×
嵌入式开发 > 详情

LCD控制时序方式

发布时间:2020-06-30 发布时间:
|

LCD控制时序


LCD的初始化过程如下:

第一行显示"Welcome";第二行显示="Happy day";若要显示其他字符,请直接往数组 LCMLineOne[16]和LCMLineTwo[16]填充相应的代码。仿真图(仿真是在Proteus7.4SP3下仿真通过)


源程序:#includereg51.h>
#define uchar unsigned char
#define uint unsigned int
#define busy 0x80
#define DataIO P0
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^7;
uchar  data   LCDLineOne[16]="Welcome";  //第一行显示的数据
uchar  data   LCDLineTwo[16]="Happy day"; //第二行要显示的数据
void Delayms(uchar  ms)   //ms级别的延时
{uchar  i,j;for(i=0;ims;i++)for(j=0;j57;j++);}
void delay12(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}
void Fbusy(){ uchar LCDStatus;do{ DataIO=0xff;RS=0;RW=1;E=1; LCDStatus=DataIO;E=0;LCDStatus=(LCDStatusbusy);
}while(LCDStatus!=0);}//写指令寄存器
void LCDWriteC(uchar  COMData){ Fbusy();RS=0;RW=0;DataIO=COMData;E=1;E=0;}//读指令寄存器
uchar LCDReadC()
{uchar LCDStatus;Fbusy();RS=0;RW=1;E=1;LCDStatus=DataIO;E=0;return(LCDStatus);}//读数据寄存器
uchar LCDReadD(uchar addr){uchar LCDStatus;Fbusy();LCDWriteC(0x80+addr);RS=1;RW=1;E=0;E=1;E=0;LCDStatus=DataIO;
return(LCDStatus);}//写数据寄存器带地址
void LCDWriteDAdd(uchar addr,uchar LCDData){Fbusy();LCDWriteC(0x80+addr);RS=1;RW=0;DataIO=LCDData;E=1;E=0;}//写数据寄存器无地址
void LCDWriteD(uchar LCDData){Fbusy();RS=1;RW=0;DataIO=LCDData;E=1;E=0;}//初始化
void LCDInit(void){ Delayms(15);RS=0;RW=0;DataIO=0x38;E=1;E=0;Delayms(5);DataIO=0x38;E=1;E=0;Delayms(5);DataIO=0x38;E=1;E=0;Delayms(5);LCDWriteC(0x38);LCDWriteC(0x08);LCDWriteC(0x01);LCDWriteC(0x06);LCDWriteC(0x0c);}main(){ uchar i;LCDInit();DataIO=0xff;while(1){  LCDWriteC(0x80);   //第一行DDRAM地址for(i=0;i16;i++)LCDWriteD(LCDLineOne[i]);LCDWriteC(0x80+0x40);   //第二行DDRAM地址for(i=0;i16;i++)LCDWriteD(LCDLineTwo[i]);}}

这是采用时序的方式,另外也可以采用总线的方式来控制,总的来说,采用时序的方式可以让我们更好的理解LCD的控制方法,而总线的方式则可以简化程序。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
五大标准轻松搞定4K超高清电视选购