/******************************************************************************* * 描述: * * 12864標準字庫液晶演示 數據p0,控制p2 * 普中科技開發板 * ********************************************************************************/ //2011年8月20日 下午 并行操作 #include #include #include #define uchar unsigned char #define unit unsigned int //端口定義 #define LCD_data P0 //數據口 sbit LCD_RS=P2^6; //寄存器選擇輸入 sbit LCD_RW=P2^5; //LCD讀寫控制 sbit LCD_EN=P2^7; //LCD使能控制 sbit LCD_PSB=P3^2; //串并行方式控制 sbit LCD_RST = P3^7; //液晶復位端口 uchar code dis1[]={"制作人:錦程"}; uchar code dis2[]={"2011.8.20"}; uchar code dis3[]={"星期六"}; uchar code dis4[]={"調試LCD12864"}; void delay_1ms(unit z) { unit x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } //寫指令數據到LCD //RS=L,RW=L,E=高脈沖,D0-d7=指令碼 void write_cmd(uchar cmd) { LCD_RS=0; LCD_RW=0; LCD_EN=0; P0=cmd; delay_1ms(5); LCD_EN=1; delay_1ms(5); LCD_EN=0; } //寫顯示數據到LCD //RS=H,RW=L,E=高脈沖,D0-d7=數據 void write_data(uchar date) { LCD_RS=1; LCD_RW=0; LCD_EN=0; P0=date; delay_1ms(5); LCD_EN=1; delay_1ms(5); LCD_EN=0; } //設置顯示位置 void lcd_pos(uchar X,uchar Y) { uchar pos; if(X==0) {X=0x80;} else if(X==1) {X=0x90;} else if(X==2) {X=0x88;} else if(X==3) {X=0x98;} pos=X+Y; write_cmd(pos);//顯示地址 } //LCD初始化設定 void lcd_init() { LCD_PSB=1; //并口方式 write_cmd(0x30); //基本指令操作 // delay_1ms(5); write_cmd(0x0c); //顯示開,關光標 // delay_1ms(5); write_cmd(0x01); //清除LCD的顯示內容 // delay_1ms(5); } main() { unit k; LCD_RST=0; delay_1ms(40); LCD_RST=1; delay_1ms(10); lcd_init(); lcd_pos(0,0); //設置顯示位置為第1行的第1個字符 k=0; while(dis1[k]!='\0') { write_data(dis1[k]);//顯示字符 k=k+1; } lcd_pos(1,0); //設置顯示位置為第2行的第1個字符 k=0; while(dis2[k]!='\0') { write_data(dis2[k]);//顯示字符 k++; } lcd_pos(2,0); //設置顯示位置為第3行的第1個字符 k=0; while(dis3[k]!='\0') { write_data(dis3[k]);//顯示字符 k++; } lcd_pos(3,0); //設置顯示位置為第4行的第1個字符 k=0; while(dis4[k]!='\0') { write_data(dis4[k]);//顯示字符 k++; } while(1) {} } |