1、附录 二 LCD.C液晶驱动程序 #include“REG51F.h“ #include“intrins.h“ #include“USEH1.h“ #include“lcd.h“ #include“HZcode.h“ bit busy_bit=1; /函数声明= void nop(void); bit CheckBusy(void); /状态检查 /写显示数据 /dat:显示数据 void WriteByte(uchar dat); /向 LCD发送命令 /command :命令 SendCommandToLCD(uchar command); /函数定义= void nop(void) _n
2、op_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); /状态检查 bit CheckBusy(void) uchar state=0; P1=0xFF;/空读操作 RW=1; DI=0; EN=1; state=P1; EN=0; P1=0xFF;/再读才有效 RW=1; DI=0; EN=1; state=P1; EN=0; busy_bit=(bit)(state7); return(busy_bit); /写显示数据 /dat:显示数据 void W
3、riteByte(uchar dat) while(CheckBusy(); DI=1; RW=0; LCD_P=dat; EN=1; EN=0; /*-*/ /向 LCD发送命令 /command :命令 SendCommandToLCD(uchar command) while(CheckBusy(); RW=0; DI=0; LCD_P=command; EN=1; EN=0; /*-*/ /设定行地址(页)-X 0-7 void SetLine(uchar line) line / 0127)return; address = Show8x8(lin,column,address);
4、Show8x8(lin,column+8,address+8); Show8x8(lin+1,column,address+16); Show8x8(lin+1,column+8,address+24); /*-*/ void InitLCD(void) /初始化 LCD uchar i=2000; /延时 while(i-); SetOnOff(1); /开显示 ClearScreen(1);/清屏 ClearScreen(2); SetStartLine(0); /开始行:0 /*-*/ /*-*/ /显示图片 /lin:行(0-7), column: 列(0-127) /high:高度,
5、 width:宽度(要为 8的倍数) /address : 图片区首地址 void ShowPicture(uchar lin, uchar column, uchar high, uchar width, uchar *address) uchar i, j; /if(column128) return; if(column64) for(j=0;jhigh;j+=8) SelectScreen(1); /如果列数64 则从第一屏上开始写 SetLine(lin); SetColumn(column); for(i=0;i127) break; if(column+i64) WriteByt
6、e(*(address+i); else SelectScreen(2); SetLine(lin); SetColumn(column-64+i); WriteByte(*(address+i); lin+=1; address+=width; else column-=64; /防止越界 for(j=0;jhigh;j+=8) SelectScreen(2); /否则从第二屏上开始写 SetLine(lin); SetColumn(column); for(i=0;i64) break; if(column+i64) WriteByte(*(address+i); else SelectScreen(1); SetLine(lin); SetColumn(column-64+i); WriteByte(*(address+i); lin+=1; address+=width;