- /*========================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);
- write(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 152********"); //写英文
- 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****** *****************************/
复制代码 |