LCD字符型液晶显示器控制_第1页
LCD字符型液晶显示器控制_第2页
LCD字符型液晶显示器控制_第3页
LCD字符型液晶显示器控制_第4页
LCD字符型液晶显示器控制_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LCD字符型液晶显示器控制实现功能:在实验平台上扩展一块LCD点阵字符型液晶显示器,要求:设计接口电路并编程使液晶显示器显示“当前时间”;并用按键输入与或修改时间。工作原理及设计思路:点阵字符型液晶显示器是专门用于显示数字、字母图形符号及少量自定义字符的显示器。在zks-03实验仪上有一标准的LCD液晶显示器接口J4,标注为DS1602。它与P87C52X2单片机以总线方式连接,其硬件连接如图1所示。图1由此可以看出LCD的命令寄存器的地址为:0xf800而数据寄存器的地址是:0xf801。实验箱上的J4接口如图4所示:J4 J5DS1602(SIP16) LCD_L从左到右对应的管脚分别为:

2、1:GND2:VCC3:V0接05V电压,调节LCD的对比度(实验箱上让它接地,使对比度达到最大)4:RS寄存器选择:“0”选指令寄存器;“1”选数据寄存器5:R/W“1”读操作;“0”写操作6:EN使能信号714:DB0DB7八位双向数据信号线1516:LCD背光电源将液晶显示器与J4接口对应连接好,编写读写程序,便对液晶显示器进行控制。电路仿真程序#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,temp,

3、key1n;#define yh 0x80 /第一行的初始位置#define er 0x80+0x40 /第二行初始位置/sbit cs1=P37;/sbit ledk=P25;sbit dula=P26;sbit wela=P27;sbit wr=P11;sbit rs=P10;sbit en=P25;sbit SCLK=P21; / 6 P1.1sbit IO=P20; / 7 P1.0sbit RST=P24; /时钟 5 P1.2sbit ACC0=ACC0;sbit ACC7=ACC7;sbit key=P37;sbit key1=P30;sbit key2=P31;sbit key

4、3=P32;uchar code tab1="2009- - THU"uchar code tab2=" : : "void delay(uint xms)/延时函数uint x,y;for(x=xms;x>0;x-) for(y=110;y>0;y-);/*液晶写入*/write_1602com(uchar com)/液晶写入指令函数rs=0;/置为写入命令P0=com;/送入数据delay(1);en=1;/拉高使能端delay(1);en=0;/完成高脉冲write_1602dat(uchar dat)rs=1;/置为写入数据P0=da

5、t;/送入数据delay(1);en=1;delay(1);en=0;/*over*/*ds1302*/void write_byte(uchar dat)ACC=dat;RST=1;for(a=8;a>0;a-)IO=ACC0;SCLK=0;SCLK=1;ACC=ACC>>1;uchar read_byte()RST=1;for(a=8;a>0;a-)ACC7=IO;SCLK=1;SCLK=0;ACC=ACC>>1;return (ACC);void write_1302(uchar add,uchar dat)RST=0;SCLK=0;RST=1;wri

6、te_byte(add);write_byte(dat);SCLK=1;RST=0;uchar read_1302(uchar add)uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);uchar BCD_Decimal(uchar bcd) uchar Decimal; Decimal=bcd>>4; return(Decimal=Decimal*10+(bcd&=0x0F);void ds1302_init()RST=0;SCLK=0;writ

7、e_1302(0x80,miao|0x00);/允许写void write_sfm(uchar add,uchar dat)/写时分秒uchar gw,sw;gw=dat%10;sw=dat/10;write_1602com(er+add);write_1602dat(0x30+sw);write_1602dat(0x30+gw);void write_nyr(uchar add,uchar dat)uchar gw,sw;gw=dat%10;sw=dat/10;write_1602com(yh+add);write_1602dat(0x30+sw);write_1602dat(0x30+gw

8、);void write_week(uchar week)/写星期函数write_1602com(yh+0x0d);switch(week)case 1:write_1602dat('M');/delay(5); write_1602dat('O');/delay(5); write_1602dat('N'); break; case 2:write_1602dat('T');/delay(5); write_1602dat('U');/delay(5); write_1602dat('E'); b

9、reak;case 3:write_1602dat('W');/delay(5); write_1602dat('E');/delay(5); write_1602dat('D'); break;case 4:write_1602dat('T');/delay(5); write_1602dat('H');/delay(5); write_1602dat('U'); break;case 5:write_1602dat('F');/delay(5); write_1602dat(&#

10、39;R');/delay(5); write_1602dat('I'); break;case 6:write_1602dat('S');/delay(5); write_1602dat('T');/delay(5); write_1602dat('A'); break;case 7:write_1602dat('S');/delay(5); write_1602dat('U');/delay(5); write_1602dat('N'); break;lcd_init()

11、/液晶初始化函数 wr=0;write_1602com(0x38);/设置液晶工作模式write_1602com(0x0c);/开显示不显示光标write_1602com(0x06);/整屏不移动,指针加一write_1602com(0x01);write_1602com(yh+2);/字符写入的位置for(a=0;a<14;a+)write_1602dat(tab1a);/delay(3);write_1602com(er+4);for(a=0;a<8;a+)write_1602dat(tab2a);/delay(3);void keyscan() key=0;if(key1=0

12、)/key1为功能键delay(5);if(key1=0)while(!key1);key1n+;if(key1n=9)key1n=1;switch(key1n)case 1: TR0=0;/关闭定时器/TR1=0;write_1602com(er+0x0b);/写入光标位置 write_1602com(0x0f);/设置光标为闪烁 temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);/miao write_1302(0x8e,0x80); break;case 2: write_1602

13、com(er+8);/fen /write_1602com(0x0f);break;case 3: write_1602com(er+5);/shi /write_1602com(0x0f);break;case 4: write_1602com(yh+0x0f);/week /write_1602com(0x0f);break;case 5: write_1602com(yh+0x0b);/ri /write_1602com(0x0f);break;case 6: write_1602com(yh+0x08);/yue /write_1602com(0x0f);break;case 7: w

14、rite_1602com(yh+0x05);/nian /write_1602com(0x0f);break;case 8:write_1602com(0x0c);/设置光标不闪烁TR0=1;/打开定时器temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);/miao write_1302(0x8e,0x80); break;if(key1n!=0)/当key1按下以下。再按以下键才有效if(key2=0) /上调键delay(5);if(key2=0)while(!key2);switch

15、(key1n)case 1:miao+;if(miao=60)miao=0;write_sfm(0x0a,miao);/写入新的秒数temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x80|temp); write_1302(0x8e,0x80);write_1602com(er+0x0b);/因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置/write_1602com(0x0b);break;case 2:fen+;if(fen=60)fen=0;write_sfm(0x07,fen)

16、;temp=(fen)/10*16+(fen)%10; write_1302(0x8e,0x00); write_1302(0x82,temp); write_1302(0x8e,0x80);write_1602com(er+8);break;case 3:shi+;if(shi=24)shi=0;write_sfm(4,shi);temp=(shi)/10*16+(shi)%10; write_1302(0x8e,0x00); write_1302(0x84,temp); write_1302(0x8e,0x80);write_1602com(er+5);break;case 4:week+

17、;if(week=8)week=0;write_week(week);write_1602com(yh+0x0f);break;case 5:ri+;if(ri=31)ri=0;write_nyr(10,ri);temp=(ri)/10*16+(ri)%10; write_1302(0x8e,0x00); write_1302(0x86,temp); write_1302(0x8e,0x80);write_1602com(yh+11);break;case 6:yue+;if(yue=13)yue=0;write_nyr(7,yue);temp=(yue)/10*16+(yue)%10; wr

18、ite_1302(0x8e,0x00); write_1302(0x88,temp); write_1302(0x8e,0x80);write_1602com(yh+8);break;case 7:nian+; if(nian=100)nian=0;write_nyr(4,nian);write_1602com(yh+5);break;if(key3=0)delay(5);if(key3=0)while(!key3);switch(key1n)case 1:miao-;if(miao=-1)miao=59;write_sfm(0x0a,miao);/写入新的秒数write_1602com(er

19、+0x0b);/因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置/write_1602com(0x0b);break;case 2:fen-;if(fen=-1)fen=59;write_sfm(7,fen);temp=(fen)/10*16+(fen)%10; write_1302(0x8e,0x00); write_1302(0x82,temp); write_1302(0x8e,0x80);write_1602com(er+8);break;case 3:shi-; if(shi=-1)shi=23;write_sfm(4,shi);temp=(shi)/10*16+

20、(shi)%10; write_1302(0x8e,0x00); write_1302(0x84,temp); write_1302(0x8e,0x80);write_1602com(er+5);break;case 4:week-;if(week=-1)week=7;write_week(week);write_1602com(yh+0x0f);break;case 5:ri-;if(ri=-1)ri=30;write_nyr(10,ri);temp=(ri)/10*16+(ri)%10; write_1302(0x8e,0x00); write_1302(0x86,temp); write

21、_1302(0x8e,0x80);write_1602com(yh+11);break;case 6:yue-;if(yue=-1)yue=12;write_nyr(7,yue);temp=(yue)/10*16+(yue)%10; write_1302(0x8e,0x00); write_1302(0x88,temp); write_1302(0x8e,0x80);write_1602com(yh+8);break;case 7:nian-; if(nian=-1)nian=99;write_nyr(4,nian);write_1602com(yh+5);break;void init()TMOD=0x11;TH0=0;TL0=0;EA=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论