课程设计(论文)-基于单片机电子时钟设计.doc_第1页
课程设计(论文)-基于单片机电子时钟设计.doc_第2页
免费预览已结束,剩余23页可下载查看

下载本文档

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

文档简介

24 基于单片机的电子时钟设计 摘要 设计背景:1957年,ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活不可缺少的工具。数字式电子钟用集成电路计时时,译码代替机械式传动,用led显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。 设计目的:应用单片机控制技术,设计出以89c51单片机为核心的电子时钟,电子时钟能够显示时、分、秒显示时间的功能,还可以进行时和分的校对,而且其片选的灵活性强。 设计目标:在数码管上显示相应的时间,并通过一个控制键来实现时间的调整和是否进入省电模式的转换。关键词:单片机;电子时钟;键盘控制 一 作品简介 该电子时钟由89c51,button,六段数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。而电路中唯一的一个控制键却拥有多种不同的功能,按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。应用proteus的isis软件实现了单片机电子时钟系统的设计与仿真,该方法仿真效果真实、准确,节省了硬件资源。 二 方案论证与对比21 单片机的型号选择 通过对多种单片机性能的分析,最终认为89c51是最理想的电子时钟开发芯片。89c51是一种带4k字节闪烁可编程可擦除只读存储器的低电压,高性能cmos8位微处理器,器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容。由于将多功能8位cpu和闪烁存储器组合在单个芯片中,atmel的89c51是一种高效微控制器,而且它与mcs-51兼容,且具有4k字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。22 数码管显示工作原理数码管是一种把多个led显示段集成在一起的显示设备。有两种类型,一种是共阳型,一种是共阴型。共阳型就是把多个led显示段的阳极接在一起,又称为公共端。共阴型就是把多个led显示段的阴极接在一起,即为公共商。阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。通常的数码管又分为8段,即8个led显示段,这是为工程应用方便如设计的,分别为a、b、c、d、e、f、g、dp,其中dp 是小数点位段。而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。即,所有的a段都会连在一起,其它的段也是如此,这是实际最常用的用法。数码管显示方法可分为静态显示和动态显示两种。静态显示就是数码管的8段输入及其公共端电平一直有效。动态显示的原理是,各个数码管的相同段连接在一起,共同占用8 位段引管线;每位数码管的阳极连在一起组成公共端。利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。 三 系统硬件电路的设计 总体硬件原理图如图1所示 图1 系统电路原理图 at89c51因为其含一个可擦除的rom,以及其存储数据的时间长度可达10年之久所以选其作为该设计的核心控制部件。3.1键盘电路设计该设计只用了一个键盘,但实现的功能却是比较完善,减少了硬件资源的损耗,该键盘可以实现小时和分钟的调节以及控制是否进入省电模式。当按键按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。达到时间调节的目的。选择的多功能按键如图2所示。 图2 多功能控制键3.2主控模块89c51 89c51是一个8位单片机,片内rom全部采用flash rom技术,晶振时钟为12mhz。89c51是标准的40引脚双列直插式集成电路芯片,有4个八位的并行双向i/o端口,分别记作p0、p1、p2、p3。第31引脚需要接高电位使单片机选用内部程序存储器;第40脚为电源端vcc,接+5v电源,第20引脚为接地端vss,通常在vcc和vss引脚之间接0.1f高频滤波电容。 四 系统软件设计 在主程序的开始定义了一组固定单元用来存储计数的分、秒、时的存储单元。在主程序中,对不同的按键进行扫描,实现秒表,时间调整。系统总体流程图如图3所示。开始t0中断入口通过查表方式显示数据数码位选加1位选值=8ny位选数值=0秒计数加1秒计数=500ny秒计数=0second加1中断返回图3 总体流程图系统子程序流程图如图4所示。yynnn子程序入口second=60second=0,并minute加1minute=60minute=0,并hour加1显示数据处理中断返回hour=24y图4 子程序流程图 五 系统测试 本系统的软件系统主要可分为主程序、定时计数中断程序、时间调整程序、延时程序四大模块。在程序设计过程中,加强了部分软件抗干扰措施,下面对部分模块作介绍。系统开始仿真的仿真图如图5系统仿真图所示。 图5系统仿真图 六 总结 本次的设计使我学到如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。通过单片机硬件电路的调试,实现了预先设定的功能,设计主要用到的元件不多,最主要的是程序也比较长比较麻烦,同时也遇到了不少困难,尤其是关于校时模块的设计实现。虽然过程中遇到了一些困难,但是在解决这些问题的过程无疑也是对自己自身专业素质的一种提高。此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。 参考文献1 谢自美电子线路设计实验测试m武汉:华中理工大学出版社,1992.2刘湘涛江世明单片机原理与应用m. 北京:电子工业出版社,2006.3 楼然笛单片机开发m北京:人民邮电出版社,1994.4 付家才单片机控制工程实践技术m北京:化学工业出版社 2004.3.5 李光才单片机课程设计 实例指导m 北京:北京航空航天大学出版社 2004.6 朱定华单片机原理及接口技术实验m北京:北方交通大学出版社2002.11. 附录 部分程序清单 源程序org 0000h ;程序执行开始地址ljmp start ;跳到标号start执行org 0003h ;外中断0中断程序入口reti ;外中断0中断返回org 000bh ;定时器t0中断程序入口ljmp intt0 ;跳至intto执行org 0013h ;外中断1中断程序入口reti ;外中断1中断返回org 001bh ;定时器t1中断程序入口ljmp intt1 ;跳至intt1执行org 0023h ;串行中断程序入口地址reti ;串行中断程序返回start: mov r0,#70h ;清70h-7ah共11个内存单元mov r7,#0bh ;cleardisp: mov r0,#00h ;inc r0 ;djnz r7,cleardisp ;mov 20h,#00h ;清20h(标志用)mov 7ah,#0ah ;放入熄灭符数据mov tmod,#11h ;设t0、t1为16位定时器mov tl0,#0b0h ;50ms定时初值(t0计时用)mov th0,#3ch ;50ms定时初值mov tl1,#0b0h ;50ms定时初值(t1闪烁定时用)mov th1,#3ch ;50ms定时初值setb ea ;总中断开放setb et0 ;允许t0中断setb tr0 ;开启t0定时器mov r4,#14h ;1秒定时用初值(50ms20)start1: lcall display ;调用显示子程序jnb p3.7,setmm1 ;p3.7口为0时转时间调整程序sjmp start1 ;p3.7口为1时跳回start1setmm1: ljmp setmm ;转到时间调整程序setmm ; 1秒计时程序 ;intt0: push acc ;累加器入栈保护push psw ;状态字入栈保护clr et0 ;关t0中断允许clr tr0 ;关闭定时器t0mov a,#0b7h ;中断响应时间同步修正add a,tl0 ;低8位初值修正mov tl0,a ;重装初值(低8位修正值) mov a,#3ch ;高8位初值修正addc a,th0 ;mov th0,a ;重装初值(高8位修正值) setb tr0 ;开启定时器t0djnz r4, outt0 ;20次中断未到中断退出addss: mov r4,#14h ;20次中断到(1秒)重赋初值mov r0,#71h ;指向秒计时单元(71h-72h)acall add1 ;调用加1程序(加1秒操作)mov a,r3 ;秒数据放入a(r3为2位十进制数组合)clr c ;清进位标志cjne a,#60h,addmm ;addmm: jc outt0 ;小于60秒时中断退出acall clr0 ;大于或等于60秒时对秒计时单元清0 mov r0,#77h ;指向分计时单元(76h-77h)acall add1 ;分计时单元加1分钟mov a,r3 ;分数据放入aclr c ;清进位标志 cjne a,#60h,addhh ;addhh: jc outt0 ;小于60分时中断退出acall clr0 ;大于或等于60分时分计时单元清0 mov r0,#79h ;指向小时计时单元(78h-79h)acall add1 ;小时计时单元加1小时 mov a,r3 ;时数据放入aclr c ;清进位标志cjne a,#24h,hour ;hour: jc outt0 ;小于24小时中断退出acall clr0 ;大于或等于24小时小时计时单元清0outt0: mov 72h,76h ;中断退出时将分、时计时单元数据移mov 73h,77h ;入对应显示单元mov 74h,78h ;mov 75h,79h ;pop psw ;恢复状态字(出栈)pop acc ;恢复累加器setb et0 ;开放t0中断 reti ;中断返回 ; 闪动调时 程 序 ; ;t1中断服务程序,用作时间调整时调整单元闪烁指示intt1: push acc ;中断现场保护push psw ;mov tl1, #0b0h ;装定时器t1定时初值 mov th1, #3ch ;djnz r2,intt1out ;0.3秒未到退出中断(50ms中断6次) mov r2,#06h ;重装0.3秒定时用初值cpl 02h ;0.3秒定时到对闪烁标志取反 jb 02h,flash1 ;02h位为1时显示单元熄灭 mov 72h,76h ;02h位为0时正常显示mov 73h,77h ;mov 74h,78h ;mov 75h,79h ;intt1out: pop psw ;恢复现场pop acc ;reti ;中断退出flash1: jb 01h,flash2 ;01h位为1时,转小时熄灭控制mov 72h,7ah ;01h位为0时,熄灭符数据放入分mov 73h,7ah ;显示单元(72h-73h),将不显示分数据mov 74h,78h ;mov 75h,79h ;ajmp intt1out ;转中断退出 flash2: mov 72h,76h ;01h位为1时,熄灭符数据放入小时mov 73h,77h ;显示单元(74h-75h),小时数据将不显示 mov 74h,7ah ;mov 75h,7ah ;ajmp intt1out ;转中断退出 ; 加1子 程 序 ;add1: mov a,r0 ;取当前计时单元数据到adec r0 ;指向前一地址swap a ;a中数据高四位与低四位交换orl a,r0 ;前一地址中数据放入a中低四位 add a,#01h ;a加1操作da a ;十进制调整mov r3,a ;移入r3寄存器anl a,#0fh ;高四位变0mov r0,a ;放回前一地址单元mov a,r3 ;取回r3中暂存数据inc r0 ;指向当前地址单元swap a ;a中数据高四位与低四位交换anl a,#0fh ;高四位变0mov r0,a ;数据放入当削地址单元中 ret ;子程序返回 ; 清零程序 ;clr0: clr a ;清累加器mov r0,a ;清当前地址单元dec r0 ;指向前一地址mov r0,a ;前一地址单元清0ret ;子程序返回 ; 时钟调整程序 ;当调时按键按下时进入此程序setmm: clr et0 ;关定时器t0中断clr tr0 ;关闭定时器t0lcall dl1s ;调用1秒延时程序jb p3.7,closedis ;键按下时间小于1秒,关闭显示(省电) mov r2,#06h ;进入调时状态,赋闪烁定时初值 setb et1 ;允许t1中断setb tr1 ;开启定时器t1set2: jnb p3.7,set1 ;p3.7口为0(键未释放),等待setb 00h ;键释放,分调整闪烁标志置1set4: jb p3.7,set3 ;等待键按下lcall dl05s ;有键按下,延时0.5秒jnb p3.7,sethh ;按下时间大于0.5秒转调小时状态mov r0,#77h ;按下时间小于0.5秒加1分钟操作lcall add1 ;调用加1子程序mov a,r3 ;取调整单元数据clr c ;清进位标志cjne a,#60h,hhh ;调整单元数据与60比较hhh: jc set4 ;调整单元数据小于60转set4循环lcall clr0 ;调整单元数据大于或等于60时清0clr c ;清进位标志ajmp set4 ;跳转到set4循环closedis:setb et0 ;省电(led不显示)状态。开t0中断setb tr0 ;开启t0定时器(开时钟)close: jb p3.7,close ;无按键按下,等待。lcall display ;有键按下,调显示子程序延时削抖jb p3.7,close ;是干扰返回close等待waith: jnb p3.7,waith ;等待键释放ljmp start1 ;返回主程序(led数据显示亮)sethh: clr 00h ;分闪烁标志清除(进入调小时状态)sethh1: jnb p3.7,set5 ;等待键释放setb 01h ;小时调整标志置1set6: jb p3.7,set7 ;等待按键按下lcall dl05s ;有键按下延时0.5秒jnb p3.7,setout ;按下时间大于0.5秒退出时间调整mov r0,#79h ;按下时间小于0.5秒加1小时操作lcall add1 ;调加1子程序mov a,r3 ;clr c ;cjne a,#24h,houu ;计时单元数据与24比较houu: jc set6 ;小于24转set6循环lcall clr0 ;大于或等于24时清0操作ajmp set6 ;跳转到set6循环setout: jnb p3.7,setout1 ;调时退出程序。等待键释放lcall display ;延时削抖jnb p3.7,setout ;是抖动,返回setout再等待clr 01h ;清调小时标志clr 00h ;清调分标志clr 02h ;清闪烁标志clr tr1 ;关闭定时器t1clr et1 ;关定时器t1中断setb tr0 ;开启定时器t0setb et0 ;开定时器t0中断(计时开始)ljmp start1 ;跳回主程序set1: lcall display ;键释放等待时调用显示程序(调分)ajmp set2 ;防止键按下时无时钟显示set3: lcall display ;等待调分按键时时钟显示用ajmp set4set5: lcall display ;键释放等待时调用显示程序(调小时)ajmp sethh1 ;防止键按下时无时钟显示set7: lcall display ;等待调小时按键时时钟显示用ajmp set6setout1: lcall display ;退出时

温馨提示

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

评论

0/150

提交评论