《单片机LCD电子时钟课程设计的报告.docx》由会员分享,可在线阅读,更多相关《单片机LCD电子时钟课程设计的报告.docx(9页珍藏版)》请在第壹文秘上搜索。
1、宁德师范学院单片机课程设计报告专业电气工程及其自动化学生姓名钱泳舟学号B2013052129题目LCD电了时钟指导教师袁秋凤2015年12月8日1方案设计与论证1.1 主控制器模块方案1采用STC89C52芯片作为硬件核心。STC89C52内部具有8KBROM存储空间,512字节数据存储空间,带有2K字节的EEPRoM存储空间,VMCSHl系列单片机完全兼容,STC89C52可以通过串口下载。方案2采用AT89S52芯片作为硬件核心。AT89S52片内具有8K字节程序存储空间,256字节的数据存储空间没有EEPROM存储空间,也与MCS-51系列单片机完全兼容,具有在线编程可擦除技术。两种单片
2、机都完全能够满足设计需要,STC89C52相对ATS89C52价格廉价,且抗干扰能力强。考虑到成本因素,因此选用STC89C52.1.2 显示模块方案1用LED数码管进展显示。数码管由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用。方案2采用LCD的方法,具有硬件制作简单可直接与单片机接口,显示内容多,功耗小,成本低等优点,LCD1602可显示32个字符,采用LCD的缺点是亮度不够。比较以上两种方案:方案1硬件简单、功耗小;方案2硬件简单,显示内容多,功耗小,成本低等。木系统设计要求到达功耗小、体积小、成本低,显示信息多等要求,权衡两种方案,选择方案2。2硬件电路设计2.1 原理框图
3、2.2 单片机最小系统电路主控制器最小系统仿真电路如以以下图1所示。主要由STC89C52单片机、内部时钟电路和按键手动复位电路构成。图1最小系统仿真电路图2.2.1复位电路复位电路有两种方式:上电复位和按钮复位,我们主要用上电复位方式。如图2所示:图2复位电路图2. 2.2晶振电路晶振可以选用频率为12MHZ的晶振,晶振两端接单片机XTAl、XTA2引脚。如图3所示2.3 图3晶振电路图2.4 1.CD液晶屏显示电路显示电路采用LCD液晶显示器,采用动态扫描显示方式。单片机的PO端口作为段选线,P2.0P2.3作为位选线。显示仿真电路如以以下图,实际电路制作时采用PNP三极管9012来驱动4
4、位数码管,驱动电路如图4所示,9012的基极接单片机的P2.5P2.7引脚,集电极接数码管的COM引脚。图4LCD显示电路图2.5 按键电路图5按键电路图Kl设置时钟(按键1次设置秒,2次设置分,3次设置时。),K2增加一(设置中对所选择变量加一),K3减少一(设置中对所选择变量减一),K4复位(时分秒归零)。3软件设计3.1 主程序主程序包括键盘识别控制及液晶屏显示2个子程序,实现时钟的显示,调节功能。初始化子程序包括1602液晶显示模式和定时器初值。利用定时器0来控制时间,实现分钟,小时的计算。3.2 子程序3.2.1 按键子程序通过按键子程序的设置,可以通过按键来调整时间,三个按键分别为
5、功能键IKl)、增加键(K2)、减小键(K3).和复位键(K4):按键子程序入口别离后的日期、时间送入1602进展显示,程序框图如图3-3所示。写命令模式等待数据稳定延时4安装与调试使能端置O4.1 电路安装步骤(1)检查元件的好坏按电路图买好元件后首先检查买回元件的好坏,按各元件的检测方法分别进展检测,一定要仔细认真。而且要认真核对原理图是否一致,在检查好后才可上件、焊件,防止出现错误焊件后不便改正。(2)放置、焊接各元件按原理图的位置放置各元件,在放置过程中要先放置、焊接较低的元件,后焊较高的和要求较高的元件。特别是容易损坏的元件要后焊,在焊集成芯片时连续焊接时间不要超过IOs,注意芯片的
6、安装方向。4.2 系统调试(1)在Keil软件中编写并调试程序,修改语法错误,最终生成.hex目标程序。(2)利用PrOIeUS软件绘制电路图,在确保电路连接正确无误的情况下,载入目标程序,仿真开场3秒后查看结果,如以以下图。图3秒系统仿真效果5性能测试与结果分析使用STC-ISP软件输入目标程序,观察实物运行效果,可以通过按动按键来调整时间,按下Kl(选择“秒”位)再按下K2(加)4次,再次按下Kl(选择“分位)后按下K3(减)3次,再按Kl(选择“时位)再按下K3(减)2次结果如以以下图所示。该电子时钟设计方案正确、可行,各项指标稳定、可靠。6心得体会在这个两个星期的时间里我学到了很多珍贵
7、的知识和单片编程的经历,在这次课程设计过程中我遇到了许多困难和问题,其中一些我通过自己上网找资料和询问同学的方式找到了解决的方法,就是在这个过程中我学会了许多书本上学不到的东西,还有一些是我自己解决不了的问题,这些问题都是需要靠我以后的经历积累和不断的学习才能得到解决的,从这次课程设计中我体会到了自己用汗水换来的成果的喜悦。我在刚开场设计这个东西时是一头雾水,没有一个方向和目标,后来从网上找到一些有关的资料通过相似的题目我一步一步的完成我自己的课程设计的功能,尤其是在编写程序的时候,每一个模块都要经过非常仔细的考虑后在写,因为程序的运行过程中需要考虑各个模块之间的影响和互助,有一些模块是我们没
8、有学习过的我从网上找到相似的然后经过修改变成我能用的,在这之间我锻炼了我的变成能力。这次课程设计采用的是AT89C51系列单片机,而接口电路那么是一个数字时钟,经过反反复复的修改、调试,程序终于到达预期功能。通过protrus仿真演示也到达预期的功能。电路的设计相对编程来说要容易一些,总体来说电路图都是大同小异的,只是他们中的分支做一些修改来。课程设计需要很大的耐心,尤其是遇到困难的时候,这也是对我们的考验。在设计过程中,我们遇到问题不是感到急躁,而是耐心地寻找解决的方法,与同学进展交流讨论,寻求最正确的解决方法。最重要的学习就是一个课程设计的过程的整体思路,先做什么后做什么最后来一个总结经历
9、的过程,这给我以后的设计过程打下了根基,这次设计中,我深刻体会到专研的重要性,一个看似简单的系统,却需要着大量的知识储藏和很强的专研精神,理论和实践往往是两回事,理论上很简单的事情在实际操作中往往会遇到很多意想不到的困难,学科的知识不光来自于书本知识,更来自于实践。参考文献:1苏平.单片机的原理与接口技术M.北京:电子工业出版社,2006,1-113.2王忠民.微型计算机原理(XI.西安:西安科技大学出版社,2003,15-55.3左金生.电子与模拟电子技术M.北京:电子工业出版社,2004,105-131.4新编单片机原理与应用(第二版).西安电子科技大学出版社,2007.25张萌.单片机应
10、用系统开发综合实例M.北京:清华大学出版社,2007.7附录:1电路图2实物图正面反面3源程序#include#defineucharunsignedchar#defineuintunsignedintsbitlcdrs=P25;sbitIcswr=P26;sbitlcden=P27;sbitsl=Pl0;sbits2=P11;sbils3=P13;sbitrd=P37;ucharcount,slnum;charmiao,shi,fen;ucharcodetable=2013052129;ucharcodetablel=00:00:00,;voiddelay(uintz)(uintx,y;fo
11、r(x=z;x0;x-)fr(y=l10;y0;y-);Ivoidwrite_com(ucharcom)(Icdrs=O;Icswr=O;P0=com;delay;Icden=I;delay(5);Icden=O;voidwrite_date(uchardate)Icdrs=1;Icden=O;P0=date;delay;Icden=I;delay;Icden=O;)voidinit()(ucharnum;Icden=O;write_com(0x38);write-com(0x0c);write-com(0x06);write-com(0x01);write_com(0x80);fbr(num
12、=O;num15;num+)(write-date(tablenum);delay;)wriie-com(0x800x40);fbr(num=O;num12;num+)(write_date(tablelnum);delay;)TMOD=OxOI;TH0=(65536-50000)256;TL0=(65536-50000)%256;EA=I;ETO=1;TRO=1;IvoidWrite_sfm(UCharadd,uchardate)(ucharshi,ge;shi=date10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);w
13、rite_date(0x30+ge);voidkeyscan()(rd=O;if(sl=O)(delay(5);if(s1=0)sInum+;while(!sl);if(sInum=I)(TR0=0;write_com(0x80+0x40+10);WriQcom(OxOf);)Iif(slnum=2)(wriie_com(0x80+0x40+7);)if(slnum=3)(write_com(0x80+0x40+4);Iif(slnum=4)(slnum=0;write_com(0x0c);TRO=1;I)if(slnum!=0)(if(s2=0)(delay(5);if(s2=0)(whil
14、e(!s2);if(sInum=I)(miao+;if(miao=60)miao=0;write_sfm(IO,miao);write_com(Ox80+0x40+10);if(slnum=2)(fen+;if(fen=60)fen=O;wri(e_sfm(7,fen);write_com(0x80+0x40+7);)if(slnum=3)(shi+;if(shi=24)shi=O;write_sfm(4,shi);write_com(0x80+0x40+4);if(s3=0)(delay(5);if(s3=0)(while(!s3);if(sInum=I)miao;if(miao=-l)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);Iif(slnum=2)(fen;if(fen=-l)fen=59;WriQSfm(7,fen);wri(e_com(0x80+0x40+7);)if(sinum=3)shi-;if(shi=-l)shi=23;write_sfm(4,shi);write_com(Ox80+0x40+4);voidmain()init();while(l)keysca