电子时钟(LCD显示)课程设计.doc_第1页
电子时钟(LCD显示)课程设计.doc_第2页
电子时钟(LCD显示)课程设计.doc_第3页
电子时钟(LCD显示)课程设计.doc_第4页
电子时钟(LCD显示)课程设计.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

目录1. 设计要求.12. 时钟总体设计思路.13. 系统硬件设计.13.1 单片机控制系统.3 3.2 键盘控制系统设计.3 3.3 显示电路.4 3.4 硬件原理及说明.4 3.5 主要性能参数.54. 软件设计. 54.1 软件功能.54.2软件设计.64.3 汇编源程序.5 5. proteus仿真.11 6. 课程设计总结.12 参考文献.131. 设计要求 以at89c51单片机为核心的时钟,在led显示器上显示当前的时间:使用字符型lcd显示器显示当前时间。显示格式为“时时:分分:秒秒”。用4个功能键操作来设置当前时间。功能键k1k4功能如下。k1设置小时。k2设置分钟。k3设置秒数。程序执行后工作指示灯led闪动,表示程序开始执行,led显示“00:00:00”,然后开始计时。 单片机是一种集成电路芯片,采集超大规模集成电路技术把具有数据处理能力(如算数运算、逻辑运算、数据传送、中断处理)的微型处理器,随机存取数据存储器(ram)、只读程序存储器(rom)、输入/输出电路(i/o),可能还包括定时/计数器、串行通信口(sci)、显示驱动电路(lcd或led驱动电路)、脉宽调制电路(pwm)、模拟多路转化器及a/d转化器等电路集成到一片芯片上,构成一个最小而又完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效的完成程序设计者事先规定的任务。 2. 时钟的总体设计思路按照系统的设计功能要求,本时钟系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟的调整及显示。微型控制器时钟电路数据显示按键调时 图一 系统总原理图 3. 系统硬件设计 3.1 单片机控制系统 本次设计时钟电路,采用了atc89c51单片机芯片控制电路,这种单片机芯片比较简单,并且省去了很多复杂的线路,更容易表达和理解,通过按钮来调节电子钟的时、分、秒。并且这次电路我采用了一个按钮控制一个显示的方案,在调节小时/分钟/秒数时,只需要按下对其控制的按钮进行调节就行了,不要普遍所见的需要进入调节界面。同时这次我采用了c语言控制整个时钟的显示,这样通过三个模块:单片机芯片、led显示屏、按钮控制电路即可达到设计要求。3.2 键盘控制系统设计按键需要3个,分别实现为调整小时、分钟、秒数三个功能。用单片机的3个i/o口接收控制信号,其电路如图下: 图五 按键调时电路通过控制键来控制所要调节的是时、分、还是秒。在按下小时/分/秒键后将对小时/分/秒进行调整调整,从而调整到自己所需要的时间。3.3 显示电路显示电路如图所示: 图六 显示电路lm016l液晶模块采用hd44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,lm016l与单片机mcu通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(ir)和数据寄存器(dr)忙标志(bf),显示数ram(ddram),字符发生器roma(cgorom)字符发生器ram(cgram),地址计数器ram(ac)。ir用于寄存指令码,只能写入不能读出,dr用于寄存数据,数据由内部操作自动写入ddram和cgram,或者暂存从ddram和cgram读出的数据,bf为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,ddtam用来存储显示的字符,能存储80个字符码,cgrom由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.8位字符编码和字符的对应关系,cgram是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,ac可以存储ddram和cgram的地址,如果地址码随指令写入ir,则ir自动把地址码装入ac,同时选择ddram或cgram4.1 软件功能.403 丁元杰.单片微机原理及应用.北京:机械工业出版社,1994143.4 硬件原理及说明 at89c51是美国intel公司生产的低电压,高性能chmos8位单片机,片内含有4k bytes的可反复擦写的只读程序存储器(perom)和128 bytes的随机存取数据存储器(ram),器件采用intel公司的高密度、非易失性存储技术生产,片内置通用4位中央处理器(cpu)和flash存储单元,功能强大at89c51单片机适合于许多较为复杂控制应用场合。 3.5主要性能参数 与mcs-51产品指令和引脚完全兼容 4k字节可重擦写flash闪速存储器 1000次擦写周期 全静态操作:0hz24mhz 三级加密程序存储器 1288字节内部ram 32个可编程i/o口线 2个16位定时/计数器 5个中断源 可编程串行uart通道 低功耗空闲和掉电模式4. 软件设计4.1 软件主要完成的功能(1)显示时间程序用软件调节时间,通过程序的调节,最后用led现实时钟(2)调节时间程序按键调节时间,能实现时、分的调节4.2软件设计的主要流程时间控制程序时间控制程序,用中断准确的控制时间,采用60进制,60秒为一分钟,60分钟为一个小时,全天设置为24小时。程序用c语言编写。编程时采用keil c,而仿真用protues,仿真时仿真图如图所示 图七 定时中断流程图4.3 汇编源程序#include #include #define uchar unsigned char#define uint unsigned int#define delaynop() _nop_();_nop_();_nop_();_nop_();sbit k1 =p10;sbit k2 =p11;sbit k3 =p12;sbit k4 =p13;sbit spk=p30;sbit rs =p20;sbit rw =p21;sbit e =p22;uchar code str1 = current time ; /一下两个字符串的串长均为16uchar code str2 = set new time. ;uchar hms_string= 00:00:00 ;/带显示的时间串bit settime=0; /是否修改时间bit change_h_or_m =1;/1表示修改时.0表示修改分uchar millisecond,hour =0,minute=0, second =0;/延时函数void delayms(uint x)uchar i;while(x-) for(i=0;i120;i+);/lcd忙状态检测bit lcd_busy_check()bit result;rs = 0;rw = 1;e = 1;delaynop();result = (bit)(p0 & 0x80);e = 0;return result; /写lcd命令void lcd_write_command(uchar cmd)while(lcd_busy_check();/判断lcd是否忙碌rs = 0;rw = 0;e = 0;_nop_();_nop_();p0 = cmd; delaynop();e = 1;delaynop();e = 0;/设置lcd显示位置void lcd_set_pos(uchar pos)lcd_write_command(pos | 0x80);/写lcd数据void lcd_write_data(uchar dat)while(lcd_busy_check();/判断lcd是否忙碌rs = 1;rw = 0;e = 0;p0 = dat; delaynop();e = 1;delaynop();e = 0;/lcd初始化void lcd_initialize()lcd_write_command(0x38);delayms(1);lcd_write_command(0x0c);delayms(1);lcd_write_command(0x06);delayms(1);lcd_write_command(0x01);delayms(1);/ 显示函数,在lcd指定的行上显示字符串void display_string(uchar*str,uchar lineno)uchar k;lcd_set_pos(lineno);for(k=0;k16;k+) lcd_write_data(strk);/蜂鸣函数void beep()uchar i, j = 70;for(i=0;i;/显示修改标志else hms_string3 = ; /不显示修改标志hms_string4 = h/10 + 0; /时hms_string5 = h%10 + 0;hms_string7 = m/10 + 0; /分hms_string8 = m%10 + 0;hms_string10= s/10 + 0; /秒hms_string11= s%10 + 0;display_string(hms_string,0x40);/设置时间void change_time()settime=0;if(k1=0|k2=0|k3=0) /按下k1 k2 k3中的任何一个键即进入修改状态tr0 = 0;display_string(str2,0x00); /第一行提示修改时间settime = 1;while (settime) if(k1 = 0) /确定调整小时还是分钟 beep();while(k1 = 0)change_h_or_m = !change_h_or_m;else if(k2 = 0) /增加 beep();while(k2 = 0);if(change_h_or_m=1)if(+hour = 24) hour = 0;elseif(+minute = 60) minute = 0;else if(k3 = 0) /减少beep();while(k3 = 0);if(change_h_or_m = 1)if(-hour = 0xff) hour = 23;else if(-minute = 0xff) minute = 59;else if(k4 = 0) /确定beep();while(k4 = 0);display_string(str1,0x00); /第一行还原显示str1settime = 0;tr0 = 1;display_hms(hour,minute,second); /外层while在这里结束/定时器0中断void time0() interrupt 1th0 = (65536 -50000)/256;tl0 = (65536 -50000)%256; /重新装入50ms定时if(+millisecond = 20) /50*20=1s millisecond = 0;if(+second = 60) second = 0;if(+minute = 60)minute = 0;if(+hour = 24)hour = 0;minute = 0;second = 0;/主函数void main()tmod = 0x01;th0 = (65536-50000)/256;tl0 = (65536-50000)%256;ie = 0x82;spk = 0;lcd_initialize();display_string(str1,0x00); /第一行显示tr0 = 1;p1 = 0xff;while(1)display_hms(hour,minute,second); /第二行显示时分秒delayms(500);change_time(); /显示过程中允许修改时间 5. proteus仿真 用protues软件画出电路,用keil软件代码进行编译成功后,未添加源程序时的仿真电路图 图八 电路原理图 输入汇编源程序后程序后,电路的仿真图 图九 电路professional仿真图 6.课程设计总结 通过这次的单片机课程设计,我更进一步了解到单片机的优点和强大功能,在查找资料的过程中,认识到单片机应用的广泛性。在设计中,我通过查阅各种单片机资料,并以单片机课程设计指导书作为参考,在何春霞老师的细心指导下,我终于历经两周的时间完成了这次单片机的设计,这次单片机的设计不仅使我对单片机课程有了进一步的了解,同时更加深了我对单片机的应用。学完单片机课程后我只是对单片机有了一些理论的了解,但这次单片机课程设计却加深了我对单片机理论与实践的结合。但由于我的知识水平有限,设计的单片机电子时钟还是存在一些的缺点和不足,如在电子时钟的基础上实现闹钟音乐等方面的设计,希望能在以后的学习过程钟,能够尽快的解决这些问题。最后,我觉得单片机的课程设计是很有意义的,在这个过程中可以学会如何把自己平时所学的东西应用到实际中。虽然我对这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得有点难,也没有很有效的办法通过自身去理解,但是靠着这两个多星期的“学习”,在小组同学的帮助和讲解下,自己开始主动学习并逐步从基础慢慢开始弄懂它。我认为这个收获应该说是相当大的。我觉得课程设计反映的是一个从理论到实际应用的过程,这个过程对缺乏实际经验的我们是非常重要的。通过这次单片机课程设计使我认识

温馨提示

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

评论

0/150

提交评论