|
基于51單片機12864液晶顯示- /*========================LCD12864液晶并行驅動程序==========================
- 程序名稱:12864液晶驅動程序(并行模式)
- ============================================================================*/
- #include <at89x52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar t,p;
- /********************************引腳定義***********************************/
- #define RS P1_0 //RS=0為執行指令;RS=1為執行數據;
- #define RW P1_1 //讀寫
- #define E P1_2 //使能
- #define PSB P1_3 //低電平(串口驅動);高電平(并口驅動)
- #define RST P1_4 //LCD復位
- /********************************定義數組***********************************/
- uchar code title[] = {"LCD 并行接口測試"};
- uchar code website[]={"qwertyuioopplkjh"};
- uchar code dig[]={"0123456789"};
- uchar code dig2[]={0,1,2,3,':'}; //
- /*******************************相關子程序**********************************/
- void Init_lcd(); //初始化液晶
- void lcd_busy(); //忙標志查詢
- void delay100us(); //100us延時程序
- void write(uchar x,uchar Data); //寫單字節函數
- void Show(uchar address,uchar L,uchar STR1[]);
- void Show_dig(uchar address,uint number);
- /*******************************延時子程序**********************************/
- void delay100(int n)
- {
- unsigned char i;
- while(n--)
- for(i=0;i<100;i++);
- }
- /*******************************LCD 忙標志查詢******************************/
- void lcd_busy(void)
- {
- uchar busy;
- P0=0xff;
- RS=0;
- RW=1;
- do{
- E=1;
- busy=P0;
- E=0;
- }
- while(busy>0x7f);
- }
- /*****************************寫指令或數據**********************************/
- void write(uchar x,uchar Data)
- {
- lcd_busy(); //忙查詢
- if(x==0)
- {
- RS=0;
- RW=0; //寫單字節命令字
- }
- else if(x==1)
- {
- RS=1;
- RW=0; //寫單字節數據
- }
- E=1;
- P0=Data;
- E=0;
- P0=0xff;
- }
- /*******************************初始化LCD **********************************/
- void Init_lcd(void)
- {
- delay100(20); //啟動等待,等LCM講入工作狀態
- PSB=1; //并口驅動模式
- RST=0;
- delay100(4);
- RST=1; // 復位LCD
- write(0,0x30); //8 位介面,基本指令集
- write(0,0x0c); //顯示打開,光標關,反白關
- write(0,0x01); //清屏,將DDRAM的地址計數器歸零
- }
- /*******漢字和字符顯示,參數入口:Show(地址,顯示寬度,漢字數組)************/
- void Show(uchar address,uchar L,uchar STR1[])
- {
- uchar i;
- write(0,address);
- for(i=0;i<L;i++)
- write(1,STR1[i]);
- }
- /************純阿拉伯數字顯示,參數入口:Show_dig(地址,數字)**************/
- void Show_dig(uchar address,uint number)
- {
- uchar shi,ge;
- shi=number/10;
- ge=number%10;
- write(0,address);
- delay100(20);
- write(1,dig[shi]);
- delay100(20);
- wri
- te(1,dig[ge]);
- }
- /************************************主程序**********************************/
- void main(void)
- {
- Init_lcd();
- TMOD=0X01;
- TH0=0xdc;
- TL0=0x00;
- ET0=1;
- TR0=1;
- EA=1;
- P3_6=0;
- delay100(30);
- Show(0x83,4,"梁浩"); //寫數組里的內容
- write(0,0x0d);
- delay100(30);
- Show(0x90,16,"電子科技協會會長");
- delay100(30);
- Show(0x88,16,"TEL 15281642659"); //寫英文
- delay100(30);
- while(1)
- {
- Show_dig(0x99,p); //寫實時數組
- }
- }
- void exter() interrupt 1
- {
- TH0=0xdc;
- TL0=0x00;
- t++;
- if(t==20)
- {
- t=0;
- p++;
- }
- if(p==60)
- p=0;
- }
- /***************************************end***********************************/
復制代碼
|
|