|
- ************************************************************************************************/
- /*** LCD2004液晶顯示 ***/
- /*** 2016-03-16 Mod By Xiaoyao ***/
- /************************************************************************************************/
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define DATA P2 //定義LCM數(shù)據(jù)總線至P0
- sbit RS=P3^0; //寄存器選擇位(0指令1數(shù)據(jù))
- sbit RW=P3^1; //設(shè)置讀寫位(0寫入1讀取)
- sbit E=P3^2; //使能為(0禁止1允許)
- sbit BF=P3^3;
- uchar line1[]="LCD TEST PROGRAM By "; //第一行顯示字符
- uchar line2[]="Everything is OK! XY"; //第二行顯示字符
- uchar line3[]="aaaaaaaaaaaaaaaabcde"; //第三行顯示字符
- uchar line4[]="bbbbbbbbbbbbbbbcdefg"; //第四行顯示字符
- void Init_LCD(void); //聲明液晶初始化設(shè)置函數(shù)
- void write_cmd(uchar); //聲明寫指令函數(shù)
- void write_data(uchar); //聲明寫數(shù)據(jù)函數(shù)
- void check_BF(void); //聲明檢測忙信號函數(shù)
- void delay_1ms(uint); //聲明延時函數(shù)
- void set_xy(uchar x,uchar y); //聲明顯示位置
- void display(uchar x,uchar y,uchar *s); //聲明顯示函數(shù)
- /*********************1ms延時函數(shù)****************************************************************/
- void delay_1ms(uint x)
- {
- uint i,j;
- for(i=1;i<x;i++)
- for(j=1;j<110;j++);
- }
- /*********************液晶初始化函數(shù)*************************************************************/
- void Init_LCD(void)
- {
- write_cmd(0x38); //設(shè)置8位格式,2行,5x7
- write_cmd(0x08); //Tune off screen
- write_cmd(0x01); //設(shè)定輸入方式,增量不移位
- write_cmd(0x06); //整體顯示,關(guān)光標(biāo),不閃爍
- write_cmd(0x0c); //清除屏幕顯示
- }
- /**********************寫指令函數(shù)******************************************************************/
- void write_cmd(uchar com)
- {
- check_BF();
- E=0;//寫命令前三控制線的狀態(tài)
- RS=0;
- RW=0;
- DATA=com;
- delay_1ms(2);
- E=1;
- delay_1ms(2);
- E=0;//寫命令后三控制線的狀態(tài)
- RS=1;
- RW=1;
- }
- /**********************寫數(shù)據(jù)函數(shù)*******************************************************************/
- void write_data(uchar chardata)
- {
- check_BF();
- E=0;//寫數(shù)據(jù)前三控制線的狀態(tài)
- RS=1;
- RW=0;
- DATA=chardata;
- delay_1ms(2);
- E=1;
- delay_1ms(2);
- E=0;//寫數(shù)據(jù)后三控制線的狀態(tài)
- RS=0;
- RW=1;
- }
- /**********************檢查忙碌函數(shù)******************************************************************/
- void check_BF(void)
- {
- P2=0xff;//賦P2口初始值
- E=0;//讀狀態(tài)前三控制線的狀態(tài)
- RS=0;
- RW=1;
- E=1;//拉高,讀狀態(tài)
- while((P2&0x80)==0x80);//判斷是否繁忙,等待空閑
- E=0;//讀狀態(tài)后三控制線的狀態(tài)
- RS=1;
- RW=0;
- }
- /**********************定義顯示位置*******************************************************************/
- void set_xy(uchar x,uchar y)
- {
- uchar add;
- if(x==0)
- add=0x80+y;
- else
- if(x==1)
- add=0xc0+y;
- else
- if(x==2)
- add=0x94+y;
- else
- if(x==3)
- add=0xd4+y;
- write_cmd(add);
- }
- /**********************顯示函數(shù)***********************************************************************/
- void displayL(uchar x,uchar y,uchar *s)
- {
- set_xy(x,y);
- while(*s)
- {
- DATA=*s;
- write_data(*s);
- s++;
- }
-
- }
- /**********************主函數(shù)*************************************************************************/
- void main()
- {
- Init_LCD();
- while(1)
- {
- displayL(0,0,line1);
- displayL(1,0,line2);
- displayL(2,0,line3);
- displayL(3,0,line4);
-
- }
- }
復(fù)制代碼
好用的2004 LCD測試腳本,配合51單片機(jī)
|
評分
-
查看全部評分
|