12864带字库 *** 作步骤

12864带字库 *** 作步骤,第1张

#include <reg51.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

/*12864端口定义*/

#define LCD_data P1 //数据

sbit LCD_RS = P2^4 //选择寄存器(并行) 0 ;指令 1 :数据

sbit LCD_RW = P2^3 //液晶读/写控制

sbit LCD_EN = P2^2 //读写数据启始宽含烂脚(并行)

sbit LCD_PSB = P2^7 //串/并老衡方式控制 0为串行模式,1 为并

sbit LCD_RST = P2^5 //复位 低电平有

uchar code dis1[] = {"一二三四 ,送 |"}

uchar code dis2[] = {"落日故人情。友李"}

uchar code dis3[] = {"挥手自兹去,人白"}

uchar code dis4[] = {"萧萧班马鸣。 | "}

/********************************************************

//延时函数

//*******************************************************/

void delay(uint k)

{

uint i

uchar j

for(i=0i<ki++)

{

for(j=0j<10j++)

}

}

/**********************************************************

// 延时1ms 函数

//********************************************************/

void delay_ms(unsigned int k)//延时0.994us,晶振12M

{

unsigned int x,y

for(x=kx>0x--)

for(y=121y>0y--)

}

void ledzs()

{

led=0

delay_ms(100)

led=1

delay_ms(100)

}

/*************************************************************

/慎漏 12864 读忙标志位 最高位为1 则忙,不能读写

/************************************************************/

void Read_busy()

{

LCD_RS=0

LCD_RW=1

LCD_EN=1

while(P2&0x80)

LCD_EN=0

}

/*************************************************************

/ 写命令函数

/************************************************************/

void Lcdwcom(uchar wcom)

{

Read_busy() //每次进行读忙标识 可以不加 最好加

delay(1)// 延时

LCD_RS=0//指令 为底 数据为高

delay(1)// 延时

LCD_RW=0//写为底 读为高

delay(1)// 延时

LCD_EN=1//使能信号

delay(1)// 延时

LCD_data=wcom//将指令写入并口

delay(1)// 延时

LCD_EN=0 // 关闭使能

}

/*************************************************************

/ 写数据函数

/************************************************************/

void Lcdwdata(uchar wdata)

{

Read_busy()

delay(1)

LCD_RS=1//指令 为底 数据为高

delay(1)

LCD_RW=0//写为底 读为高

delay(1)

LCD_EN=1//使能信号

delay(1)

LCD_data=wdata//将数据写入并口

delay(1)

LCD_EN=0 // 关闭使能

}

/*************************************************************

/ 12864显示位置设定函数

参数说明: x 为行号 y 位列号

/************************************************************/

void Set_Pos(uchar x,uchar y)

{

uchar i

switch(x) //确定行号

{

case 0: i=0x80break

case 1: i=0x90break

case 2: i=0x88break

case 3: i=0x98break

default :break

}

i=i+y//确定列号

Lcdwcom(i)

}

/*************************************************************

/ 12864初始化函数 顺序不可乱

/************************************************************/

void LCD_Init(void)

{

delay_ms(2)

LCD_RST=1

LCD_RST=0

LCD_RST=1

LCD_PSB=1 //选择并口

Lcdwcom(0x30)//基本指令 *** 作1 延时不同

delay(8)

Lcdwcom(0x30)//基本指令 *** 作2

delay(5)

Lcdwcom(0x0c)//显示开光标

delay(5)

Lcdwcom(0x01) //清楚LCD显示内容

delay(5)

Lcdwcom(0x06)//光标的移动方向

delay(5)

}

/*************************************************************

/ 12864 指定位置显示字符串函数 若整体化则只能显示第一行

/************************************************************/

void Display_String(uchar x1,uchar y1,uchar *string)

{

uchar i=0

Set_Pos(x1,y1)//设定位置

while(string[i]!='\0')

{

Lcdwdata(string[i])

i++

}

}

/*************************************************************

/ 12864 自带字符串显示函数 只需将ASCII码 写入即可 不怎么好使

/************************************************************/

void Display_Ascii(uchar x2,uchar y2,uchar ascii)

{

Set_Pos(x2,y2)

Lcdwdata(ascii)

}

void main()

{

uchar j=0

LCD_Init()

Lcdwcom(0x01) //清楚LCD显示内容

Display_String(0,0,dis1)

Display_String(1,0,dis2)

Display_String(2,0,dis3)

Display_String(3,0,dis4)

while(1)

}

带字库的LCD模块不需要取字模

只需要向LCD模块写入需要显示的汉字的GB2312代码就可以了,显示位置可用模块手册中的定位指令代码设置

切换到点阵图形模式,并设置好书写规律,在字模相应位置写入对仿扰应字模数据就可以了

比如16*16点阵,定义备纤旦第一组两个8字节数据的起始竖凯位置,连续列入两字节,然后定位下一行起始地址,再写,重复上述过程直到写完一个字的全部16行

原理都是一样的,具体命令与实现方法或有不同,详情参见LCD产品手册


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12464182.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存