《LCD12864显示程序[参考]》由会员分享,可在线阅读,更多相关《LCD12864显示程序[参考](3页珍藏版)》请在金锄头文库上搜索。
1、精品文档可编辑版 本例程为通过用 AT89C52 芯片操作 LCD12864 显示的程序,使用的晶振为 12M。 /* 程序说明:LCD12864 显示主程序 程序调试员:莫剑辉 调试时间:2010-6-7 */ #include #include12864.c void main() Ini_Lcd(); /液晶初始化子程序 Disp(1,0,6,莫剑辉); /显示数据到 LCD12864 子程序 while(1); 这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到 LCD12864 的程序的调用。 /* 程序说明:LCD12864 显示头文件 程序调试员:莫剑辉 调试时间
2、:2010-6-7 */ /#include #define uchar unsigned char #define uint unsigned int #define DATA P2 /数据输出端 07 sbit RS=P00; /LCD12864 RS 端 sbit RW=P01; /LCD12864 RW 端 sbit E =P02; /LCD12864 E 端 sbit PSB =P03; /* 延时子程序 */ void Delay_1ms(uint x) uint j,i; for(j=0;jx;j+) for(i=0;i120;i+); /延时 X 乘以 120 1 / 3 精品
3、文档可编辑版 /* LCD12864 液晶测忙子程序(读状态) */ void Busy() uchar busy; do E = 0; /0 为关闭使能端,1 为打开使能端 RS = 0; /1 为指令,0 为数据 RW = 1; /1 为读,0 为写 Delay_1ms(20); /延时 20 乘以 120 时间 E = 1; /0 为关闭使能端,1 为打开使能端 busy=P1; /读取 P2 状态 Delay_1ms(20); /延时 20 乘以 120 时间 E = 0; /0 为关闭使能端,1 为打开使能端 while(busy /判断 BUSY 位是否工作:1 为内部在工作,0
4、为正常状态 /* LCD12864 液晶数据写入子程序 */ void Write_Data(uchar k) Busy(); /测忙 E =1;/0 为关闭使能端,1 为打开使能端 RS=1;/1 为指令,0 为数据 RW=0;/1 为读,0 为写 DATA=k;/输入数据 K 到 DATA Delay_1ms(20);/延时 20 乘以 120 时间 E =0; /0 为关闭使能端,1 为打开使能端 Delay_1ms(20); /延时 20 乘以 120 时间 /* LCD12864 液晶命令写入子程序 */ void Write_Cmd(uchar cmd) Busy(); /测忙 E
5、=1;/0 为关闭使能端,1 为打开使能端 RS=0; /1 为指令,0 为数据 RW=0;/1 为读,0 为写 DATA=cmd; /输入命令 cmd 到 DATA Delay_1ms(20);/延时 20 乘以 120 时间 2 / 3 精品文档可编辑版 E=0;/0 为关闭使能端,1 为打开使能端 Delay_1ms(20);/延时 20 乘以 120 时间 /* LCD12864 液晶数据显示子程序 */ void Disp(uchar y,uchar x,uchar i,uchar *z) uchar Address; if(y=1)Address=0 x80+x; /Y 判断第几行
6、,X 判断第几列,0 x80 为液晶行初始地址 if(y=2)Address=0 x90+x; if(y=3)Address=0 x88+x; if(y=4)Address=0 x98+x; Write_Cmd(Address); /写入地址命令到 LCD12864 while(i) /写入显示数据的大小 Write_Data(*(z+); /写入显示数据到 LCD12864 i-; /* LCD12864 液晶初始化子程序 */ void Ini_Lcd(void) PSB=1; Delay_1ms(20); Write_Cmd(0 x30); /基本指令集 Delay_1ms(20); Write_Cmd(0 x02); / 地址归位 Delay_1ms(20); Write_Cmd(0 x0c); /整体显示打开,游标关闭 Delay_1ms(20); Write_Cmd(0 x06); /游标右移 Delay_1ms(20); Write_Cmd(0 x80); /设定显示的起始地址 Delay_1ms(20); Write_Cmd(0 x01); /清除显示 3 / 3