单片机控制LCD时钟设计毕业设计_第1页
单片机控制LCD时钟设计毕业设计_第2页
单片机控制LCD时钟设计毕业设计_第3页
单片机控制LCD时钟设计毕业设计_第4页
单片机控制LCD时钟设计毕业设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

常州工学院学士学位论文目录第一部分设计任务与调研……………………3第二部分设计说明………………8第三部分设计成果………………20第四部分结束语…………………30第五部分致谢………………………31第六部分参考文献………………32

第一部分设计任务与调研毕业设计的主要任务:基于单片机设计的LCD显示电子时钟,该LCD液晶可以显示电子时钟的年、月、日、星期、时、分、秒,调节功能键可以调节时间,并且显示时间按秒实时更新,每次按键伴随“嘀”的声音。1.设计的思路方法:本次设计完成电子时钟精确时间的显示、环境温度测量以及定时闹钟的功能。由于DS12887时钟芯片内置一个锂电池,所以即使出现断电情况依然可以运行十年以上不丢失数据,且重新上电后不用校正时钟。硬件电路包括单片机最小系统电路、DS12887实时时钟芯片电路模块、LCD1602液晶显示模块、DS18B20温度传感器模块、按键模块、蜂鸣器报警电路模块:软件部分主要通过C程序的编程实现对时钟芯片进行时间数据的读写,然后通过液晶显示时间,按键操作实现功能转换以及屏幕切换。2.方案选择单片机芯片的选择:RTC89C52单片机的主要特性如下:与MCS-51产品指令系统完全兼容全静态工作模式:0~33MHZ4K字节的在线编程Flash存储器,1000次擦写周期4.0~4.5V的工作电压范围三级程序存储器锁128*8字节内部RAM32个可编程I/O口线2个16位定时/计数器6个中断源低功耗空闲和掉电模式全双工串行UART通道中断可从空闲模式唤醒系统看门狗(WTD)及双数据指针具有掉电状态下的中断恢复功能掉电标识和快速编程特性灵活的在系统编程(ISP字节或页写模式)3.显示模块及时钟芯片的选择采用液晶LCD显示,以电流刺激液晶分子产生点,显示字符的行数和液晶的点阵行。液晶功耗低、体积小、显示简单。采用DS12887实现时钟记时,把时间数据送入单片机,由单片机控制显示。DS12887芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,精度非常高,工作电压范围2.5V~5.5V,最小耗电小于300MA。。单片机LCD时钟硬件组成本作品采用ATMEL公司的RTC89C52单片机,以汇编语言为程序设计的基础,设计一个用四位数码管显示时、分的时钟。在实物图中,左边靠近电源的绿色发光二极管(长亮)是电源指示灯,表示的是5V稳定电源工作正常;单片机左下角红色发光二极管是秒灯,每闪烁一次表示时间走动一秒钟;按键正上方绿色发光二极管是设置灯,当时间正常走动时此时不亮,当第一次按下设置键(右键)时,此绿灯亮,同时秒时熄灭,且分钟的两位数码管出现闪烁,时间停止走动,进入校时状态,表示此时可以进行分钟的调整,当按一次加一键(左键)可实现分钟的加一功能,分钟以60分为极限,超出60分则返回数值0,从0再重新算起;如果再次按下设置键时,这时秒灯和设置灯仍旧保持熄灭和点亮状态,表示分钟的数码管停止闪烁,反过来表示小时的两位数码管则开始闪烁,此时可进行小时的调整,按加1键可实现小时的加1功能,小时调整以24为上限,同样超出24小时则重新回0;当第三次按下设置键时,数码管停止闪烁,设置灯熄灭,秒灯重新闪烁,时间以设定值计时。

第二部分设计说明1.可实现的功能1.采用六位数码管显示小时、分钟、秒,并且可以任意设定时间。2.可以查看并且设定日期,日期采用年、月、日的显示方式。3.可以查看并设定闹钟,闹钟的显示方式采用与时间相同的显示方式。4.可以查看并设定星期,数码管的最后一位显示星期,用数字8表示星期日。5.系统设定详细说明:系统的初始状态为显示时钟状态,此时显示小时、分钟、秒。初始状态下,按K0键进入时间调整程序,按K1键查看闹钟,按K2键查看日期,按K3键查看星期。进入时间调整状态后,首先调整分钟,此时分钟闪烁显示,按K1键加一,按K2键减一。按K0键开始调整小时,此时小时闪烁显示,按K1键加一,按K2键减一,再按K0键后系统返回到显示时间状态。在调整时间状态下按下K3键进入调整闹钟状态,此时显示原先的闹钟时间,并且闹钟分钟闪烁显示,此时按K1键加一,按K2键减一;调整后按K0键转换到闹钟小时调整单元,此时按K1键加一,按K2键减一。闹钟调整完毕后按K0键回到调整时间状态,按K3键转到调整日期状态。在调整日期状态下,日单元闪烁显示,此时按K1键加一,按K2键减一;按下K0键进入调整月,此时按K1键加一,按K2键减一;按下K0键进入调整年,此时按K1键加一,按K2键减一。此时按下K0键返回到调整时间状态,按下K3键进入调整星期状态。在调整星期状态下,星期闪烁显示,此时按K1键加一,按K2键减一。按下K0键返回到调整时间状态。此时分钟闪烁显示,按K0键开始调整小时,此时小时闪烁显示,再按K0键后系统返回到显示时间状态。2.软件设计流程秒计数器的计数时钟信号为1Hz的标准信号,可以由CPLD板上提供的20MHZ的信号通过分频得到。秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号[11].设计一个同时显示时、分、秒6个数字的数字钟,则需要6个七段显示器。若同时点亮这6个七段显示器,则电路中会产生一个比较大的电流,很容易造成电路烧坏,我们通过扫描电路来解决这一问题,通过产生一个扫描信号LT(0)一LT(5)来控制6个七段显示器,依次点亮6个七段显示器,也就是每次只点亮一个七段显示器。只要扫描信号的频率超过人的眼睛视觉暂留频率24Hz以上,就可以达到尽管每次点亮单个七段显示器,却能具有6个同时显示的视觉效果,而目显示也不致闪烁抖动。其中6位扫描信号一方面控制七段显示器依次点亮,一方面控制6选1选择器输出相应显示数字。控制电路用来将控制时钟的一些功能加入到整个正常计数的显示电路中,通过最终的显示来验证控制电路的正确性【12】。图2.1为整体系统设计标图。图2.1图4.2计时中断服务程序流程图3.硬件工作介绍(1)电源组成部分图2.2如图2.2所示,220V交流电通过双12V变压器变为12V交流电,12V交流电通过四个二极管的全桥整流后变为12V直流电,然后经过电解电容(470uF)进行一级滤波,以去除直流电里面的杂波,防止干扰。12V直流电出来后再经过三端稳压器7805稳压成为稳定的5V电源,其中7805的Vin脚是输入脚,接12V直流电源正极,GND是接地脚,接12V直流电源负极,Vout为输出脚,它和接地脚的电压就是+5V了。5V电源出来再经过电解电容的二级滤波,是5V电源更加稳定可靠。同时在5V稳压电源加上一个470Ω的电阻和一个绿色发光二极管,当上电后,绿色发光二极管点亮,表示电源工作正常。此时一个稳定输出5V的电源已经设计好,对于本设计它完全能够满足单片机及集成块所需电源的要求。图2.2注:由于7805产生的5V电源供给的电器件较多,所以用散热片防止7805过热而烧坏芯片PAGE204.仿真软件的调试Keil单片机模拟调试软件内集成了一个文本编辑器,用该文本编辑器可以编辑源程序。打开”FILE”“NEW”就打开的此编辑器。在图2.3中已经完成了汇编语言源文件的输入,并且完成了源程序向当前工程的添加。然后再创建工程的步骤如下:打开”project”“newuvisionproject”然后显示一个对话框,在对话框里选择ATMEL,在ATMEL的下拉框中找AT89C51选择后点击“OK”就创建了一个工程,注意:创建时把此工程保存在熟悉的文件夹里,以便于后面的查找使用。图2.3Keil单片机模拟调试软件的集成开发环境完成c语言源文件的输入后,接着需要把c语言源文件加入工程之中。选择图5.1中的工程管理器窗口的子目录SourceGroup1,再单击鼠标右键打开快捷菜单。在快捷菜单中选择“AddFiletoGroup“SourceGroup1”,加入文件对话框被打开。在这个对话框的“查找范围”下拉列表框中选择存储汇编语言源文件的文件夹,在“文件类型”下拉列表框中选择AsmSourcefile(*.a*;*.src),这时存储的d语言源文件将显示出来。双击要加入的文件名,或者选择要加入的文件名再单击Add按钮即可完成把d语言源文件加入工程。这时工程管理窗口的文件选项卡中子目录SourceGroup1下出现一个c语言源文件,如图1.3所示。Proteus软件:Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。PROTEUS软件由Labcenter公司开发,是目前世界上最先进、最完整的嵌入式系统设计与仿真平台,可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能,是目前唯一能够对各种处理器进行实时仿真、调试与测试的EDA工具。微控制器系统相关的仿真需建立编译和调试环境,可选择KeilC51uVision2软件。该软件支持众多不同公司的芯片,集编辑、编译和程序仿真等于一体,同时还支持PLM、汇编和C语言的程序设计。它的界面友好易学,在调试程序、软件仿真方面有很强大的功能。其革命性的功能是:将电路仿真和微处理器仿真进行协同,直接在基于原理图的虚拟原型上进行处理器编程调试,并进行功能验证,通过动态器件如电机、LED、LCD、开关等,实时看到运行后的输入、输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,Proteus为我们建立了完备的电子设计开发环境。5.晶振电路图2.4单片机工作的时间基准是由时钟电路提供的,在单片机的XTAL1和XYAL2两个管脚接一只晶振及两只电容就构成了单片机的时钟电路,电路中电容器和对振荡频率有微调作用,通常取(30±10)pF石英晶体选择6MHz或12MHz(本设计取的是11.0592MHz只是为计算串口通信的波特率精准)都可以。时钟电路如图2.4所示。6.蜂鸣器电路如图2.5所示,在单片机的FM管脚接蜂鸣器电路,电路中PNP三极管以及电阻R18构成放大电路,当FM引脚为低电平时,驱动蜂鸣器工作。图2.5 矩阵键盘图2.6如图2.6所示,分别连接单片机的对应口,本设计中的时钟调节只用到了S9,S13,S17来调节时钟进行时钟的调节。(注:调节时,如果调节按键不起作用,就是下载的USB口拔掉方可调节,因为那是键盘接口和下载口连接电路有冲突。)7.软件程序流程根据需要,本设计使用的软件为KeiluVision4,本软件操作简单,编译也极其方便。由此可将系统软件按照功能划分为4个模块,分别是主程序模块、24C02自动保护模块、液晶显示模块、中断服务程序模块,各模块的功能关系如图2.7所示。编写系统软件时,可首先编写各模块的底层驱动程序,而后是系统联机调试,编写上层主程序。系统主程序系统主程序液晶管显示24C02自动保护程序护程序中断服务.图2.7在程序设计过程中,我遇到了很多困难,这部分也是让我学到很多东西的地方。首先,我学习了定时器的相关知识,计数器的使用是很重要的组成部分,在这个设计中选择计数器T0。T0的工作方式有:方式0:不推荐方式1:16位计数器,常用方式2:自动重装初值的8位定时/计数器方式3:T0相当于两个独立的8位定时/计数器此程序采用方式1,方式1的定时时间t为t=(216-M)*12/fosc。其中M为定时器初值,fosc为12MHz(本设计用的11.0592MHz),若M0t=65536*12/2*106=65.536ms。因此可取50ms为计时单位,初值M应为50*10-3*106=216-M。M=15536=11110010110000=3CB0。即定时器初值为TH0=(65536-50000)/256;TL0=(65536-50000)%256;定时器中断20次为一秒,这部分在中断程序中用到。其次,我参看了文献中的设计思路,做到胸有成竹后再进行具体的程序书写工作。认真学习了教科书中关于C语言编程的问题,熟悉了C语言的编程方法和语法习惯。PAGE33第三部分设计成果

优点:本设计以单片机RTC89C52为控制核心,由实时时钟模块、环境温度检测模块、电压检测模块、人机借口模块、报警模块等部分组成。其中实时时钟采用DS12887可实现年月日时分秒等时间信息的采集和闹钟功能。温度检测模块由DS18B20集成温度传感器对现场环境温度进行实时检测。电网检测模块由AD536、ICL7135等实现对电网电压有效值的采样和频率的间接测量及电网电压的欠压、过压检测。人机接口模块4*4键盘和LCD12864点阵液晶组成,可实现时间显示、闹钟设置、环境温度测量、电网电压、电网频率显示等功能。本系统。本系统以89C52为核心部件,利用软件编程,通过键盘控制和液晶显示实现了时钟功能、闹钟功能,能实现本设计基本要求和发挥部分。在本设计中尽量做到了硬件电路简单稳定,减小电磁干扰和其它环境干扰,充分发挥软件编程的优点,减小因元器件精度不够引起的误差。缺点:由于时间有限和本身知识水平的限制,我们认为本系统还有需要改进的地方,例如选用更高精度的元器件,硬件电路更加精确稳定,软件测量算法进一步的改进和完善。2.8程序的主要模块1.延迟程序在液晶显示时,必然用到延迟程序,这里使用延迟50ms的程序,此程序需要反复调用。此段程序是很简单的,但就是在这段简单的程序上,也会出现问题。voiddelay(uintxms){ uinti,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);}2.1602液晶读写程序voidwrite_com(ucharcom){ rs=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;}voidwrite_date(uchardate){ rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0;}voidwrite_shifenmiao(ucharadd,uchardate){ ucharshi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge);}3.初始化程序voidinit(){ ucharnum; rd=0; dula=0; wela=0; lcden=0; shi=0; fen=0; miao=0; count=0; s1num=0; init_24c02(); write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01);write_com(0x80); for(num=0;num<15;num++) { write_date(table[num]); delay(5); } write_com(0x80+0x40+6); write_date(':'); delay(5); write_com(0x80+0x40+9); write_date(':'); delay(5); shi=read_add(3); fen=read_add(2); miao=read_add(1); write_shifenmiao(4,shi); write_shifenmiao(7,fen); write_shifenmiao(10,miao); TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;}4.按键扫描程序voidkeyscan(){ if(s1==0) { delay(5); if(s1==0) { s1num++; while(!s1); di(); if(s1num==1) { TR0=0; write_com(0x80+0x40+10); write_com(0x0f);//光标闪烁 } if(s1num==2) { write_com(0x80+0x40+7); } if(s1num==3) { write_com(0x80+0x40+4); } if(s1num==4) { s1num=0; write_com(0x0c); TR0=1; } } } if(s1num!=0) { if(s2==0) { delay(5); if(s2==0) { while(!s2); di(); if(s1num==1) { miao++; if(miao==60) miao=0; write_shifenmiao(10,miao); write_com(0x80+0x40+10); write_add(1,miao); }if(s1num==2) { fen++; if(fen==60)fen=0; write_shifenmiao(7,fen); write_com(0x80+0x40+7); write_add(2,fen); }if(s1num==3) { shi++; if(shi==24) shi=0; write_shifenmiao(4,shi);; write_com(0x80+0x40+4); write_add(3,shi); } } } //if(s1num!=0) if(s3==0) {delay(5);if(s3==0){ while(!s3);di(); if(s1num==1) { miao--; if(miao==-1) miao=59; write_shifenmiao(10,miao); write_com(0x80+0x40+10); write_add(1,miao); } if(s1num==2) { fen--; if(fen==-1) fen=59; write_shifenmiao(7,fen); write_com(0x80+0x40+7); write_add(2,fen); } if(s1num==3) { shi--; if(shi==-1) shi=23; write_shifenmiao(4,shi); write_com(0x80+0x40+4); write_add(3,shi); } } } }}5.主程序voidmain(){ init(); while(1) { keyscan(); }}6.定时器中断程序voidtimer0()interrupt1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; if(count==20) { count=0; miao++;if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; } write_add(3,shi); write_shifenmiao(4,shi); } write_add(2,fen); write_shifenmiao(7,fen); } write_add(1,miao) ; write_shifenmiao(10,miao); }}7.2c402.h的EEPROM的操作函数程序#include"24c02.h"bitwrite=0;sbitsda=P2^0;sbitscl=P2^1;voiddelay0(){;;}voidstart(){ sda=1; delay0(); scl=1; delay0(); sda=0; delay0();}voidstop(){ sda=0; delay0(); scl=1; delay0(); sda=1; delay0();}voidrespons(){ uchari; scl=1; delay0(); while((sda==1)&&(i<250))i++; scl=0; delay0();}voidinit_24c02(){sda=1;delay0();scl=1;delay0();}voidwrite_byte(uchardate){ uchartemp,i;temp=date; for(i=0;i<8;i++) { temp=temp<<1; scl=0; delay0(); sda=CY; delay0(); scl=1; delay0(); } scl=0; delay0(); sda=1; delay0(); } ucharread_byte() { uchark,i;scl=0; delay0(); sda=1; delay0(); for(i=0;i<8;i++) { scl=1; delay0();k=(k<<1)|sda; scl=0; delay0(); } returnk; } voidwrite_add(ucharadress,uchardate) { start(); write_byte(0xa0); respons(); write_byte(adress); respons(); write_byte(date); respons(); stop(); } charread_add(ucharadress) { uchardate; start(); write_byte(0xa0); respons(); start(); write_byte(adress); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return(date); }//20C02*/

第四部分结束语总结本设计的硬件电路主要由单片机最小系统电路、温度测量模块、按键模块、时钟芯片模块、LCD1602液晶显示模块等模块组成,软件方面则是通过C语言对系统进行编程,这体现了本设计的实时性和灵活性。系统实现了以下多种功能:1)显示年、月、日、星期等日历相关信息。通过按键设置年月日和星期,以及定时闹钟。2)掉电后时钟芯片正常运行,重新上电后不用校正时钟。3)定时时间到达时,蜂鸣器报警;手动按任意键报警停止;如无人工按键,报警在1.5min后停止。4)实时温度显示。本设计还有一些地方可以改进:(1)供电电源改成5V电池在生活中,不可能使用电源箱来作为硬件的供电电源,如果想要完成便携式携带的电子钟,则也不可能使用电源适配器来实现电源的提供,所以电源应该使用基于锂电池的设计使系统具备安全,简单,容易携带等优点。(2)可以增加一个背光自动调节功能该功能主要是通过液晶显示屏LCD1602外接光敏三极管来实现,但考虑到器件价格及时间方面的限制,放弃了这个部分。但若能有这个功能,则夜晚的时候背光灯更亮,白天的时候背光灯较暗,这也间接起到了节能的作用。

第五部分致谢大学生涯行将结束,今天完成了毕业设计的定稿工作,现在,我要对老师、同学、学校、家人表达最真诚的谢意。首先要提到的是我的毕业设计指导老师,虽然他这学期没有给我们班上课,但是他对工作认真严谨的态度完全体现在了毕业设计的过程中。尽管老师平时也有教学上的任务,但他对我的毕业设计一点也没有省心,而是投入到了每个环节中,这包括前期方案的设计,资料的查找,设计的修改和完成。在这些环节中,老师都会尽可能的帮助我去好好完成,比如我在做毕业设计的中途由于自身的能力有限而遭遇瓶颈,无法顺

温馨提示

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

评论

0/150

提交评论