电子时钟LCD显示课程设计报告_第1页
电子时钟LCD显示课程设计报告_第2页
电子时钟LCD显示课程设计报告_第3页
电子时钟LCD显示课程设计报告_第4页
电子时钟LCD显示课程设计报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

..>目录1.设计要求12.时钟总体设计思路13.系统硬件设计133.2键盘控制系统设计33.3显示电路43.4硬件原理及说明43.5主要性能参数54.软件设计54.1软件功能564.3汇编源程序55.Proteus仿真116.课程设计总结12参考文献13..>1.设计要求以AT89C51单片机为核心的时钟,在LED显示器上显示当前的时间:使用字符型LCD显示器显示当前时间。显示格式为"时时:分分:秒秒〞。用4个功能键操作来设置当前时间。功能键K1~K4功能如下。K1—设置小时。K2—设置分钟。K3—设置秒数。程序执行后工作指示灯LED闪动,表示程序开场执行,LED显示"00:00:00〞,然后开场计时。单片机是一种集成电路芯片,采集超大规模集成电路技术把具有数据处理能力〔如算数运算、逻辑运算、数据传送、中断处理〕的微型处理器,随机存取数据存储器〔RAM〕、只读程序存储器〔ROM〕、输入/输出电路〔I/O〕,可能还包括定时/计数器、串行通信口〔SCI〕、显示驱动电路〔LCD或LED驱动电路〕、脉宽调制电路〔PWM〕、模拟多路转化器及A/D转化器等电路集成到一片芯片上,构成一个最小而又完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效的完成程序设计者事先规定的任务。2.时钟的总体设计思路按照系统的设计功能要求,本时钟系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟的调整及显示。微型控制器微型控制器时钟电路数据显示按键调时图一系统总原理图3.系统硬件设计本次设计时钟电路,采用了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或CGRAMTOC\o"1-2"\h\u169494.1软件功能4016172[3]丁元杰.单片微机原理及应用.:机械工业出版社,1994143.4硬件原理及说明AT89C51是美国Intel公司生产的低电压,高性能CHMOS8位单片机,片内含有4kbytes的可反复擦写的只读程序存储器〔PEROM〕和128bytes的随机存取数据存储器〔RAM),器件采用Intel公司的高密度、非易失性存储技术生产,片内置通用4位中央处理器〔CPU〕和Flash存储单元,功能强大AT89C51单片机适合于许多较为复杂控制应用场合。与MCS-51产品指令和引脚完全兼容4k字节可重擦写Flash闪速存储器1000次擦写周期全静态操作:0Hz—24MHz三级加密程序存储器128×8字节内部RAM32个可编程I/O口线2个16位定时/计数器5个中断源可编程串行UART通道低功耗空闲和掉电模式4.软件设计4.1软件主要完成的功能〔1〕显示时间程序用软件调节时间,通过程序的调节,最后用LED现实时钟〔2〕调节时间程序按键调节时间,能实现时、分的调节时间控制程序时间控制程序,用中断准确的控制时间,采用60进制,60秒为一分钟,60分钟为一个小时,全天设置为24小时。程序用C语言编写。编程时采用KEILC,而仿真用PROTUES,仿真时仿真图如下列图图七定时中断流程图4.3汇编源程序#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineDelayNOP(){_nop_();_nop_();_nop_();_nop_();}sbitK1=P1^0;sbitK2=P1^1;sbitK3=P1^2;sbitK4=P1^3;sbitSPK=P3^0;sbitRS=P2^0;sbitRW=P2^1;sbitE=P2^2;ucharcodeStr1[]="CurrentTime";//一下两个字符串的串长均为16ucharcodeStr2[]="SetNewTime...";ucharHMS_String[]="00:00:00";//带显示的时间串bitSettime=0;//是否修改时间ucharMilliSecond,Hour=0,Minute=0,Second=0;//延时函数voidDelayMS(uint*){uchari;while(*--)for(i=0;i<120;i++);}//LCD忙状态检测bitLCD_Busy_Check(){bitresult;RS=0;RW=1;E=1;DelayNOP();result=(bit)(P0&0*80);E=0;returnresult;}//写LCD命令voidLCD_Write_Command(ucharcmd){while(LCD_Busy_Check());//判断LCD是否忙碌RS=0;RW=0;E=0;_nop_();_nop_();P0=cmd;DelayNOP();E=1;DelayNOP();E=0;}//设置LCD显示位置voidLCD_Set_Pos(ucharpos){LCD_Write_Command(pos|0*80);}//写LCD数据voidLCD_Write_Data(uchardat){while(LCD_Busy_Check());//判断LCD是否忙碌RS=1;RW=0;E=0;P0=dat;DelayNOP();E=1;DelayNOP();E=0;}//LCD初始化voidLCD_Initialize(){LCD_Write_Command(0*38);DelayMS(1);LCD_Write_Command(0*0c);DelayMS(1);LCD_Write_Command(0*06);DelayMS(1);LCD_Write_Command(0*01);DelayMS(1);}//显示函数,在LCD指定的行上显示字符串voidDisplay_String(uchar*str,ucharLineNo){uchark;LCD_Set_Pos(LineNo);for(k=0;k<16;k++)LCD_Write_Data(str[k]);}//蜂鸣函数voidBeep(){uchari,j=70;for(i=0;i<200;i++){while(--j);SPK=~SPK;}DelayMS(300);SPK=0;}//时分秒显示voidDisplay_HMS(ucharh,m,s){if(Settime)HMS_String[3]='>';//显示修改标志elseHMS_String[3]='';//不显示修改标志HMS_String[4]=h/10+'0';//时HMS_String[5]=h%10+'0';HMS_String[7]=m/10+'0';//分HMS_String[8]=m%10+'0';HMS_String[10]=s/10+'0';//秒HMS_String[11]=s%10+'0';Display_String(HMS_String,0*40);}//设置时间voidChange_Time(){Settime=0;if(K1==0||K2==0||K3==0)//按下k1k2k3中的任何一个键即进入修改状态{TR0=0;Display_String(Str2,0*00);//第一行提示修改时间Settime=1;}while(Settime){if(K1==0)//确定调整小时还是分钟{Beep();while(K1==0)Change_H_or_M=!Change_H_or_M;}elseif(K2==0)//增加{Beep();while(K2==0);if(Change_H_or_M==1){if(++Hour==24)Hour=0;}else{if(++Minute==60)Minute=0;}}elseif(K3==0)//减少{Beep();while(K3==0);if(Change_H_or_M==1){if(--Hour==0*ff)Hour=23;}else{if(--Minute==0*ff)Minute=59;}}elseif(K4==0)//确定{Beep();while(K4==0);Display_String(Str1,0*00);//第一行复原显示str1Settime=0;TR0=1;}Display_HMS(Hour,Minute,Second);}//外层While在这里完毕}//定时器0中断voidTime0()interrupt1{TH0=(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;}}}}}//主函数voidmain(){TMOD=0*01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;IE=0*82;SPK=0;LCD_Initialize();Display_String(Str1,0*00);//第一行显示TR0=1;P1=0*FF;while(1){Display_HMS(Hour,Minute,Second);//第二行显示时分秒DelayMS(500);Change_Time();//显示过程中允许修改时间}}5.Proteus仿真用Protues软件画出电路,用keil软件代码进展编译成功后,未添加源程序时的仿真电路图图八电路原理图输入汇编源程序后程序后,电路的仿真图图九电路professional仿真图通过这次的单片机课程设计,我更进一步了解到单片机的优点和强大功能,在查找资料的过程中,认识到单片机应用的广泛性。在设计中,我通过查阅各种单片机资料,并以单片机课程设计指导书作为参考,在何春霞教师的细心指导下,我终于历经两周的时间完成了这次单片机的设计,这次单片机的设计不仅使我对单片机课程有了进一步的了解,同时更加深了我对单片机的应

温馨提示

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

评论

0/150

提交评论