基于单片机的LCD1602控制总线模式
时间:2012-09-10 13:50:39 来源: 作者:
第一行显示\第二行显示=\若要显示其他字符,请直接往数组 LCMLineOne[16]和LCMLineTwo[16]填充相应的代码。直接上图,仿真图如下:
源程序如下,可以对比时序方式,理解总线的操作方法。 #include<> //#include<>
#define uchar unsigned char #define uint unsigned int #define busy 0x80
uchar xdata LCMWriteCOM _at_ 0x80ff; //写指令寄存器 uchar xdata LCMReadCOM _at_ 0xa0ff ; //读指令寄存器 uchar xdata LCMWriteData _at_ 0xc0ff ; //写数据寄存器 uchar xdata LCMReadData _at_ 0xe0ff ; //读数据寄存器 uchar data LCMLineOne[16]=\第一行显示的数据 uchar data LCMLineTwo[16]=\第二行显示的数据
void Delayms(uchar ms) {
uchar i,j; for(i=0;i //写指令寄存器 void LCMWriteC(uchar COMData) { uchar LCMStatus; do { LCMStatus=(LCMReadCOM&busy); } while(LCMStatus!=0); LCMWriteCOM=COMData; } //读指令寄存器 uchar LCMReadC() {uchar LCMStatus; do { LCMStatus=(LCMReadCOM&busy); } while(LCMStatus!=0); LCMStatus=LCMReadCOM; return(LCMStatus); } //读数据寄存器 uchar LCMReadD(uchar addr) {uchar LCMStatus; do { LCMStatus=(LCMReadCOM&busy); } while(LCMStatus!=0); LCMWriteC(0x80+addr); LCMStatus=LCMReadData; return(LCMStatus); } //写数据寄存器带地址 void LCMWriteDAdd(uchar addr,uchar LCMData) {uchar LCMStatus; do { LCMStatus=(LCMReadCOM&busy); } while(LCMStatus!=0); LCMWriteC(0x80+addr); LCMWriteData=LCMData; } //写数据寄存器无地址 void LCMWriteD(uchar LCMData) {uchar LCMStatus; do { LCMStatus=(LCMReadCOM&busy); } while(LCMStatus!=0); LCMWriteData=LCMData; } //初始化 void LCMInit(void) { Delayms(15); LCMWriteCOM=0x38; Delayms(5); LCMWriteCOM=0x38; Delayms(5); LCMWriteCOM=0x38; Delayms(5); LCMWriteC(0x38); LCMWriteC(0x08); LCMWriteC(0x01); LCMWriteC(0x06); LCMWriteC(0x0c); } main() { uchar i; LCMInit(); while(1) { LCMWriteC(0x80); //第一行开始地址 for(i=0;i<16;i++) LCMWriteD(LCMLineOne[i]); LCMWriteC(0x80+0x40); //第二行开始地址 for(i=0;i<16;i++) LCMWriteD(LCMLineTwo[i]); } }
相关推荐: