LCD液晶多功能数字时钟设计_第1页
LCD液晶多功能数字时钟设计_第2页
LCD液晶多功能数字时钟设计_第3页
LCD液晶多功能数字时钟设计_第4页
LCD液晶多功能数字时钟设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉纺织大学课程设计报告学院:电子信息工程学院班级:电信XX姓名:XXX学号:20100722指导老师:XXXLCD液晶多功能数字时钟设计一.设计要求设计制作基于LCD液晶显示屏的,可以调整的时钟系统。1.基本要求(1)采用1602液晶屏显示显示时间。(2)时间可以显示为:时分秒。(3)时钟可以通过按键进行调节校正。2.发挥部分(1)选用12864液晶屏显示日期和时钟。(2)当系统断电后,时钟仍然可以保持。(3)可以设置至少两个闹铃;设置温度上下限,超限可以报警二原理框图键盘三电路图设计UTC130pFC2-1.0592M30pF、C3彳、10uF(22uF)9口rVCCIRL5xvAyAVC

2、C1K1KRlw-VCCXTAL1P0.0/AD0P0.1/AD1XTAL2P0.2/AD2RSTEA/VPPP0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P1.0/T2PSENP1.1/T2EXALEP1.2P3.0/RxDP1.3P1.4P1.5P3.1/TXDP1.6P3.2/INT0P1.7P3.3/INT1P3.4/T0P2.0/A8P3.5/TLP2.1/A9P3.6/WRP2.2/A10P3.7/RDP2.3/A11VSSP2.4/A12P2.5/A13P2.6/A14P27/A1519TJ5K-2040VDD-VLRS/W-N-0-1-46-7

3、-r+-t-12345678910111213141516345111ppp四主要元件选择及参数设计单片机STC89S52U130pF2_LTY30pFJTVCCVCCXTAL1P0.0/AD0P0.1/AD1XTAL2P0.2/AD2RSTEA/VPPPSENP0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P1.0/T2P1.1/T2EXALEP1.2P3.0/RxDP1.3P1.4P1.5P3.1/TXDP1.6P3.2/INT0P1.7P3.3/INT1P3.4/T0P2.0/A8P3.5/TLP2.1/A9P3.6/WRP2.2/A10P3.7/RDP2

4、.3/A11VSSP2.4/A12P2.5/A13P2.6/A14P27/A150310uF(22uF)9n20AT89C52STC89S52是比较常用的52系列单片机。它的工作电压是+5v。外围电路加上12M的晶振,使其正常工作。P2口控制DAC0832。通过对P2口赋值来改变输出增益的大小。1602液晶1602显示容量为16乘2个字符。工作电压为+5v。编号符号引脚说明编号符号引脚说明1VSS电源地9D2DateI/O2VDD电源正极10D3DateI/O3VL液晶显示偏压信号11D4DateI/O4RS数据/命令选择端12D5DateI/O5R/W读写选择端13D6DateI/O6E使能

5、端14D7DateI/O7D0DateI/O15BLA背光源正极8D1DateI/O16BLK背光源负极按键控制51P1.352P1.453P1.5五软件编程按照电路图的设计焊接好硬件电路。就开始软件编程。程序主要分为两个部分,即液晶显示部分和控制按键的部分。由于本设计采用的是用按键分别控制。可以在主函数中调用一个键盘扫描的函数,当相应的不同按键按下后控制液晶显示和单片机P2的输出,从而控制液晶的显示。源程序见附录。本数字时钟共使用了三个按键。第一个按键用于选择所要调节的内容(如年、月、日、时、分、秒),按下不同次数光标分别在要调节的对应位置闪烁;第二个按键用于所调节的量的增加,按下一次增加一

6、个单位;第三个按键用于所调节量的减少,按一下增加一个单位。该数字时钟实现的功能是液晶正常显示时分秒,年月日和星期。不仅可以用按键调节时分秒,还可以调节年月日,并且要保证星期和年月日相对应。在这里需要指出的是由于条件限制(除非有时钟芯片实现万年历),不可能保证星期与年月日正确对应),故采程序中用天数对7取余数,余1时为星期一(MON),余2时为星期二(TUE),依此类推,余0时为星期天(SUN),当天数到每月最后一天时继续上加不回归到1,这样可以保证星期是正确的。具体见程序中注释。编程思路是,在确定了时钟要实现的功能后按照上述各按键所实现的效果编写程序。本程序包含液晶写指令函数(write_co

7、m()、写数据函数(write_data()、初始化函数(init()、写入时分秒函数(write_sfm()、写入月和日函数(write_nyr()【别指出,由于年包含四位数字其写法与月和日不同,故单独设置一个写入年函数】、写入星期函数(write_xq()和键盘扫描函数,这些程序围绕主函数互相嵌套调用。六调试部分本次实验的调试部分花了大量的时间。当程序写好编译通过后,下载到单片机中,调试硬件看有无显示和输出。调试主要分为2个部分。分别是液晶显示部分,按键控制部分。首先是液晶部分,经过几次程序的修改,和对液晶部分电路的检测终于将液晶部分调出有显示。然后检查按键部分。首先检查按键的焊接确定无误

8、后,进行按键控制,结果显示良好。七实验心得体会与总结本次实验总共做了两大方面的任务,编程和调试。在编程过程中必须牢牢把握数字时钟所要实现的功能,在确定方案的情况下理清思路,认真思考如何实现时钟的各种功能。通过编程我认识到一个合格的单片机编程人员必须有清晰的思路,要有全身心投入的工作精神。编写这个程序我花费了将近一天的时间,耗费了不少精力。起初毫无头绪,通过观摩哈尔滨工程大学郭天祥老师的单片机课程视频我学会了不少编程的技巧,如怎样使用液晶,怎样将年月日等字符转换成液晶能显示的字符,还有就是掌握了定义一个标志变量去对应按键按下的次数,根据按键次数即变量值去实现不同的功能等等。我在编程过程中使用的是

9、自己购买的单片机开发板,其液晶的用法(主要是RS、RW,E这些端口的时序),按键与单片机的接口等与我们自己焊接的单片机最小系统大有不同,程序在开发板上调制成功还要能在我们的单片机最小系统上工作,这也需要不断地调试。在调试过程中我们发现了一些问题,一是液晶上在年月日后面空白处出现了乱码,原因是在初始化函数中显示年月日的时候for语句多执行了3次;二是光标在按键过快时出现在错误位置,原因是在第一个键按下七次(此时,时钟开始走)时没有把光标重新定位;三是第一个按键不太灵敏,原因是按键在消抖的时候延时过长。通过此次单片机课程设计我掌握了1602液晶的用法,也学到了很多编程技巧,然而我要想学好用好单片机

10、还有很长的路要走。703AT89C52附录一实验电路图VCCR15XV/1KU1VDDVLRSVCCXTAL1XTAL2P0.0/ADP0.1/ADP0.2/AD:P0.3/AD:P0.4/ADP0.5/AD.P0.6/ADv123456789101112131415169n8R/WENDOD1D2D3D4D5D6P0.7/ADRSTEA/VPPP1.0/T2PSENP1.1/T2E:ALEP1.2P1.3P1.4P3.0/RxDP1.5P3.1/TxDP1.6P3.2/INT0P1.7P3.3/INT1P3.4/T0P2.0/A8P3.52T1P2.1/A9P3.6/WRP2.2/A10P3

11、.7/RDP2.3/A11D7BL+VSS45-d6-h8-k24P2.4/A12P2.5/A13P2.6/A14P2.7/A15S2P1.4P1.5S3.附录二实验源程序/由于每个月日期被规定为31天,到第32天时日期变为01,星期偏差很大本程序采用天数对7取余数,/天数到每月最后一天后继续上加不归1,减少星期误差#include#defineucharunsignedchar#defineuintunsignedintsbitRS=P0;sbitRW=Pl;sbitE=P2;sbitsi二P3;sbits2二P4;sbits3二P5;sbits4=P1飞;ucharcodetable=20

12、i0-i2-3iFRI;ucharcodetablei=23:59:50;ucharnum,count,shi=23,fen=59,miao=50;ucharyue=i2,ri=3i;uintnian=20i0;ucharsinum,s2num,xq;voiddelay(ucharz)uintx,y;for(x=z;x0;x-)for(y=ii0;y0;y-);voidwrite_com(ucharcom)/delay(5);/E=0;RS=0;RW=0;P0=com;delay(5);/_nop_();E=0;delay(5);E=i;voidwrite_data(uchardate)/de

13、lay(5);RS=i;/E=0;RW=0;P0=date;/_nop_();delay(5);E=0;delay(5);E=1;/RS=0;voidinit()delay(15);write_com(0 x38);/displaymodewrite_com(0 x08);/displaymodewrite_com(0 x01);/displaymodewrite_com(0 x06);/显示光标移动位置write_com(0 x0c);/显示开及光标设置write_com(0 x01);/显示清屏write_com(0 x80);write_com(0 x02);for(num=0;num1

14、5;num+)write_data(tablenum);delay(20);write_com(0 x80+0 x41);for(num=0;num11;num+)write_data(table1num);delay(20);TMOD=0 x01;EA=1;ET0=1;TR0=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;voidwrite_sfm(ucharadd,uchardate)/写入时分秒ucharshi,ge;shi=date/10;ge=date%10;write_com(0 x80+0 x40+add);/地址指向第二行,在第二行

15、写write_data(0 x30+shi);/write_data(0 x30+ge);voidwrite_nyr(ucharadd,uchardate)/只写入月和日(月和日均只有十位和个位,写法相同)ucharshi,ge;shi=date/10;ge=date%10;write_com(0 x80+add);write_data(0 x30+shi);write_data(0 x30+ge);voidwrite_nian(ucharadd,uintyear)/写入年uintqian,bai,shi,ge;qian=year/1000;/2413/1000=2(得到千位)bai=(yea

16、r%1000)/100;/(2413%1000)=413413/100=4(得到百位)shi=(year%1000)%100)/10;/413%100=1313/10=1(得到十位)ge=(year%1000)%100)%10;write_com(0 x80+add);/13%10=3(得到个位)write_data(0 x30+qian);write_data(0 x30+bai);write_data(0 x30+shi);write_data(0 x30+ge);voidwrite_xq1(ucharadd)/星期一write_com(0 x80+add);/write_data(0 x

17、40+0 x0d);/查询液晶的字符手册可知MON(星期一)write_data(0 x40+0 x0f);/这三个英文字符对应的二进制码write_data(0 x40+0 x0e);/voidwrite_xq2(ucharadd)/星期二write_com(0 x80+add);write_data(0 x54);write_data(0 x55);write_data(0 x45);voidwrite_xq3(ucharadd)/星期三write_com(0 x80+add);write_data(0 x50+4);write_data(0 x40+8);write_data(0 x50

18、+5);voidwrite_xq4(ucharadd)/星期四write_com(0 x80+add);write_data(0 x57);write_data(0 x45);write_data(0 x4e);voidwrite_xq5(ucharadd)/星期五write_com(0 x80+add);write_data(0 x46);write_data(0 x52);write_data(0 x49);voidwrite_xq6(ucharadd)/星期六write_com(0 x80+add);write_data(0 x53);write_data(0 x41);write_da

19、ta(0 x54);voidwrite_xq7(ucharadd)/星期日write_com(0 x80+add);write_data(0 x53);write_data(0 x55);write_data(0 x4e);voidkeyscan()/按键控制函数if(s1=0)/按键1delay(5);/按下消抖if(s1=0)s1num+;/s1num1是按键1的标志变量,表示按键1按下的次数while(!s1);/按键弹起时消抖if(s1num=1)TRO=O;/时间停止走write_com(0 x80+0 x40+ll);/按键1按下时write_com(OxOf);/光标在秒个位闪烁

20、,调秒if(s1num=2)write_com(0 x80+0 x40+8);/按键1按下第二次,光标在分个位闪烁,调分if(s1num=3)write_com(0 x80+0 x40+5);/按键1按下第三次,光标在时位闪烁,调时if(s1num=4)write_com(0 x80+4);/按键1按下第四次,光标在年位闪烁,调年if(s1num=5)write_com(0 x80+7);/按键1按下第五次,光标在月个位闪烁,调月if(s1num=6)write_com(0 x80+10);/按键1按下第六次,光标在日个位闪烁,调日if(s1num=7)s1num=0;write_com(0

21、x0c);/光标按下第七次,光标回到秒个位,write_com(0 x80+11);/同时停止闪烁,定时器开,TR0=1;/时间开始走.if(s1num!=0)/按键按下执行以下操作if(s2=0)/按键2的作用为按下时使想要调整的时分秒,年月日等数值增加delay(5);if(s2=0)while(!s2);if(s1num=1)miao+;if(miao=60)miao=0;write_sfm(10,miao);/刷新屏幕,将新的秒的值显示出来,其中秒的位置为0X80+0X40+10,从此位置开始写新的秒值write_com(0 x80+0 x40+11);if(s1num=2)fen+;

22、if(fen=60)fen=0;write_sfm(7,fen);/刷新屏幕,将新的分的值显示出来,其中分的位置为0X80+0X40+7,从此位置开始写新的分值write_com(0 x80+0 x40+8);if(s1num=3)shi+;if(shi=24)shi=0;ri+;write_nyr(9,ri);write_sfm(4,shi);/刷新屏幕,将新的时的值显示出来,其中时的位置为0X80+0X40+4,从此位置开始写新的时值,write_com(0 x80+7);write_sfm(4,shi);write_com(0 x80+0 x40+5);if(s1num=4)nian+;

23、write_nian(1,nian);/刷新屏幕,将新的年的值显示出来,其中年的位置为0X80+1,从此位置开始写新的年值write_com(0 x80+4);if(s1num=5)yue+;if(yue=13)yue=1;write_nyr(6,yue);/刷新屏幕,将新的月的值显示出来,其中月的位置为0X80+6,从此位置开始写新的月值write_com(0 x80+7);if(s1num=6)ri+;xq+;if(ri=31)ri=1;write_nyr(9,ri);/刷新屏幕,将新的日的值显示出来,其中日的位置为0X80+9,从此位置开始写新的日值write_com(0 x80+10)

24、;if(xq%7=0)write_xq1(12);if(xq%7=1)write_xq2(12);if(xq%7=2)write_xq3(12);if(xq%7=3)write_xq4(12);if(xq%7=4)write_xq5(12);if(xq%7=5)write_xq6(12);if(xq%7=6)write_xq7(12);write_com(0 x80+10);if(s3=0)/按键3的作用是按下时使想要调整的时分秒,年月日等数值减少delay(1);if(s3=0)while(!s3);if(s1num=1)miao-;if(miao=-1)miao=59;write_sfm(

25、10,miao);write_com(0 x80+0 x40+11);if(s1num=2)fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_com(0 x80+0 x40+8);if(s1num=3)shi-;if(shi=-1)shi=23;write_sfm(4,shi);write_com(0 x80+0 x40+5);if(s1num=4)nian-;write_nian(1,nian);write_com(0 x80+4);if(s1num=5)yue-;if(yue=0)yue=12;write_nyr(6,yue);write_com(0 x80+7);if(s1num=6)ri-;xq-;if(

温馨提示

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

评论

0/150

提交评论