基于单片机AT89S51控制的数字时钟课程设计报告.doc_第1页
基于单片机AT89S51控制的数字时钟课程设计报告.doc_第2页
基于单片机AT89S51控制的数字时钟课程设计报告.doc_第3页
基于单片机AT89S51控制的数字时钟课程设计报告.doc_第4页
基于单片机AT89S51控制的数字时钟课程设计报告.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

宁波技师学院课 程 设 计 报 告论文题目 基于at89s51控制的数字时钟 专业班级 学生姓名 _学 号 _指导教师 _ _宁波技师学院电气技术系二零一三 年 九 月摘 要本系统采用msc-51系列单片机以at89s51为中心器件来设计多功能数字时钟。文中详细介绍了51单片机应用中的数据转换显示,数码管显示原理,动态扫描显示原理,单片机的定时中断原理。该时钟系统能实现时钟日历的功能:能进行时、分、秒的显示;也具有日历计算、显示和时钟,日历的校准、定时时间的设定,实现秒表,整点报时等功能关键词:at89s51;74ls245 ;原理;时钟 ;单片机目录1引言42总体设计方案52.1系统总体结构框图53硬件设计63.1复位电路63.2晶振电路63.3 数码管原理图73.3.1at89s51的管脚说明84软件设计94.1主程序流程图95制作和调试中遇到的问题和解决方法96结论107致谢108参考文献10附录1c语言程序11附录2硬件接线图24附录3系统仿真图25宁波技师学院电气系胡珂、姚烨汀、虞峰课程设计 221 引言近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新.在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善.本文通过用对一个能实现定时,日历显示功能的时间系统的设计学习,详细介绍了51单片机应用中的数据转换显示,数码管显示原理,动态扫描显示原理,单片机的定时中断原理、从而达到学习,了解单片机相关指令在各方面的应用。2 总体设计方案系统at89s51、led数码管、按键、电容,电阻,晶震等部分构成,能实现的功能有:时间显示、日期显示、定时。左键:切换更改项目,按一下选择更改时钟秒位,再按为分位、小时位。小时位置在按则跳出编辑时间功能。中键:给当前项进行加1的控制,使当前项在个位加1。右键:给当前项进行减1的控制,使当前项在个位减1。2.1 系统总体结构框图针对于设计思想,做系统的结构框图如下图2-1所示:晶振电路显示电路复位电路aaat89s51按键控制电 路图2-1总体方案方框图3 硬件设计本数字时钟系统的硬件电路主要包括晶振电路、数码显示电路及其它外围电路等。3.1复位电路【2】9复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。下图所示的rc复位电路可以实现上述基本功能,sm为手动复位开关。图3-0 复位电路图3.2晶振电路1at89s51中有一个构成内部震荡器的高增益反向放大器,引脚xtal1和xtal2分别是放大器的输入端和输出端,这个放大器与作为反馈元件的石英晶体构成自激震荡电路。外接石英晶体及电容c1,c2接在放大器的反馈回路中构成并联震荡电路。图3-1晶体震荡电路3.3数码管原理图4810。 图3-2 数码管管脚图3.3.1 at89s51的管脚说明2 图3-3 at89s51管脚图vcc 电源电压.gnd 接地.rst 复位输入.当rst变为高电平并保持2个机器周期时,将使单片机复位.wdt溢出将使该引脚输出高电平,设置sfr auxr的disrto位(地址8eh)可打开或关闭该功能.diskrto位缺省为reset输出高电平打开状态.xtal1 反向振荡放大器的输入及内部时钟工作电路的输入.xtal2 来自反向振荡放大器的输出.p0口 一组8位漏极开路型双向i/o口.也即地址/数据总线复用口.作为输出口用时,每位能驱动8个ttl逻辑门电路,对端口写1可作为高阻抗输入端用.在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻.在flash编程时,p0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻.p1口 一个带内部上拉电阻的8位双向i/o口,p1的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路.对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(iil).flash编程和程序校验期间,p1接收低8位地址. p2口 一个带内部上拉电阻的8位双向i/o口.p1的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路.对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(iil).在访问外部程序存储器或16位地址的外部数据存储器时,p2口送出高8位地址数据.在访问8位地址的外部数据存储器时,p2口线上的内容在整个访问期间不改变.flash编程和程序校验期间,p2亦接收低8位地址.p3口 一个带内部上拉电阻的8位双向i/o口.p3的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路.对p3口写1时,它们被内部的上拉电阻把拉到高电并可作输入端口.作输入端口使用时,被外部拉低的p3口将用上拉电阻输出电流(iil).p3口除了作为一般的i/o口线外,更重要的用途是它的第二功能,如下图所示.p3口还接收一些用于flash闪速存储器编程和程序校验期间的控制信号.psen/ 程序储存允许输出是外部程序存储器的读先通信号,当at89s51由外部程序存储器取指令(或数据)时,每个机器周期两次psen/有效,即输出两个脉冲.当访问外部数据存储器,没有两次有效的psen/信号.ea/vpp 外部访问允许.欲使cpu仅访问外部程序存储器,ea端必须保持低电平,需注意的是:如果加密位lb1被编程,复位时内部会锁存ea端状态.flash存储器编程时,该引脚加上+12v的编程电压vpp.4 软件设计4.1 主程序流程图5 制作和调试中的一些问题和解决办法数字时钟设计刚完成时,我经过检查,发现了一些问题147:1 刚弄好电路板并烧写程序进去后发现数码管不能正确显示时间,每个数码管中显示的数字几乎一样。经过询问老师,自己查阅资料,终于找出问题的原因:由于我在电路中采用的是动态数码管显示,需准确地调整延时子程序del1ms。我在程序中采取的延时时间为1毫秒。2复位电路中的开关不能使电路复位到初始状态即12:00:00,经过认真检查电路后我发现我是开关的管脚没接对。测试后重新接下开关的管脚就可以了。6 结论经过调试之后,我发现我做的基于at89s51设计的数字时钟,经过调试,一天的时间里面,差不多在1秒,计时是相对准确。而且该设计的成本不高,硬件电路简单,可以用在对时间精度要求不高的场合. 由于时钟电路的重要性,时钟电路在很多应用系统中必不可少,用软件方法可以实现,但误差很大。在对时间精度要求很高的情况下,通常采用时钟芯片来实现。典型的时钟芯片有:ds1302,ds12887,x1203等都可以满足精度要求。致谢辞在论文完成之际,谨向关心我、支持我的师长、朋友和亲人表示最衷心的感谢。首先要感谢我尊敬的指导老师陈弢和唐幼君,本论文的工作得到了陈老师悉心的指导和启发,从论文的选题和具体实现都给予极大的帮助。唐老师平易近人,我非常感两位老师。本设计的完成,当然也少不了同学的帮助,感谢他们对我的帮助,没有他们的帮助,设计的任务是不可能这么快顺利完成的。同时,也要感谢我的爸爸妈妈,感谢他们这么多年来默默地支持着我的学业,我会再接再厉,以更加饱满的热情投入到今后的学习和工作中去。参考文献: 1 曹巧媛 单片机原理与应用m.京:电子工业出版社, 20022 何立民 mcs-51系列单片机应用系统设计.北京航空航天大学出版社,20003 丁元杰 单片微机原理及应用第2版m.北京机械工业出版社,20014 郁凯平 mcs-51单片机串口一口两用在led显示屏的一例应用 电子与电脑2008年第1期5 陈忠平 p89lpc935驱动数码管显示时钟的设计 湖南工业职业技术学院学报2007 年第 02 期6 林成武等 mcs-51单片机po口扩展技术研究.电子元器件应用2007 年第 4 期7 谢自美 电子线路设计、实验、测试 .华中理工大学出版社,20008 李正浩等 51单片机在led数码管显示中的应用.实验科学与技术 2006 年第z1 期9 包国宾、张建民 单片机复位电路的设计与分析.光电技术应用 2005 年第 03 期10 唐光明 基于中断技术的开关软件消抖算法现代机械 2006 年第 03 期11 n. ambramson, editor, multiple acess communication-foundation of emerging tecnologies, ieee press,1992附录1 c语言程序附录org 0000hljmp main ;跳到主程序org 0003hljmp int0 ;跳到外部中断0org 000bh ljmp t0 ;跳到定时器0org 0013hljmp int1 ;跳到外部中断1org 001bhljmp t1 ;跳到定时器1org 0100hmain: ;主函数clr p3.0 ;关蜂鸣器acall initial ;调用初始化函数done:jnb 00h,done1 ;是否显示时间mov r0,#73h ;显示时间acall convert ;把时间存储器转化到显示存储器ajmp test ;是否处于调整状态done1:jnb 01h,done2 ;是否显示日期mov r0,#70h ;显示日期acall convert ;转化ajmp test ;是否处于调整状态done2:jnb 02h,done3 ;是否显示定时时间mov r0,#63h ;显示定时时间acall convert ;转化ajmp test ;done3:mov r0,#60h ;显示秒表acall convert ;转化ljmp disp ;跳到显示函数test: ;判断是否处于调整状态 jnb 18h,test10 ;是否按键已经按下 jnb p3.5,test7 ;按键是否已经释放 ajmp test11test10:jb 16h,test8 ;判断是否有按键按下 jb p3.5,test7 setb 16h ajmp test7test8:jb p3.5,test9 setb 18h ajmp test7 test11:clr 18h cpl 17h mov c,17h mov p0.0,c clr 16h clr 12h ;定时结束 clr tr1 ;关定时器1 clr p3.0 ;关蜂鸣器 clr 13h ; mov 59h,#00h ; mov 58h,#01h ajmp test7 test9:clr 16h test7:jnb 12h,test6 jb p3.4,test6 clr 12h ;定时结束 clr tr1 ;关定时器1 clr p3.0 ;关蜂鸣器 clr 13h ; mov 59h,#00h ; mov 58h,#01h ;test6:jnb 01h,test5 ;是否处于日期状态 jb p3.4,test4 ;案键3是否按下 mov 20h,#01h ; 返回时间状态 mov 21h,#00h ljmp disp test5:jnb 02h,test4 ;是否处于定时时间状态 jb p3.4,test4 ;按键3是否按下 mov 20h,#01h ;返回时间状态 mov 21h,#00h ljmp disp test4:jnb 15h,do ;闪烁标志是否有效 ljmp disp ;无效则进入显示函数do: mov a,21h ; cjne a,#00h,test2 ;是否在调整状态 ljmp disp ;不处于调整状态则进入显示函数 test2: jb p3.4,test3 mov 20h,#01h mov 21h,#00h ljmp disp test3:jnb 08h,done4 ;是否秒位置处于调整状态 mov 78h,#11 ;不显示 mov 79h,#11 ;不显示 ljmp disp ;进入显示函数 done4:jnb 09h,done5 ;是否分位置处于调整状态 mov 7bh,#11 ;不显示 mov 7ch,#11 ;不显示 ljmp disp ;进入显示函数 done5:mov 7eh,#11 ;时位置不显示 mov 7fh,#11 ;时位置不显示 ljmp disp ;进入主函数convert: ;转化成数码管显示所对应的存储器mov a,r0 ;把r0存储的地址所对应的存储器的内容转化到秒位置的存储器mov b,#10 ;div ab ;mov 79h,a ;高位存储?mov 78h,b ;地位存储inc r0 ;地址加一mov a,r0 ;取数据mov b,#10 ;div ab ;mov 7ch,a ;高位存储mov 7bh,b ;低位存储inc r0 ;地址加一mov a,r0 ;取数据mov b,#10 ;div ab ;mov 7fh,a ;高位存储mov 7eh,b ;低位存储retinitial: mov 7fh,#1 ;数码管显示12:00:00 mov 7eh,#2 mov 7dh,#10 mov 7ch,#0 mov 7bh,#0 mov 7ah,#10 mov 79h,#0 mov 78h,#0 mov 75h,#12 ;初始化时间 12:00:00 mov 74h,#0 mov 73h,#0 mov 72h,#08 ;初始化日期 08.3.20 mov 71h,#3 mov 70h,#20 mov 65h,#12 ;初始化定时时间 12:00:20 mov 64h,#0 mov 63h,#20 mov 62h,#00 ;初始化秒表00:00.00 mov 61h,#00 mov 60h,#00 mov 50h,#100 ;1s定时100*10ms mov 51h,#20 ;200ms闪烁计时 mov 52h,#10 ;秒表计数器 mov 53h,#5 ;每放一个音时延时5ms mov 58h,#1 ;存放音乐表的指针 mov th0,#0d8h ;t0定义为10ms中断 mov tl0,#0f0h mov tmod,#11h ;定时器工作在方式1 mov ip,#2 ;定时器0高优先级 mov ie,#8fh ;开中断 setb it0 ;外部中断为边缘触发 setb it1 ;外部中断为边缘触发 setb tr0 ;开定时器0 mov 20h,#0 ; setb 00h ;设置成处在时间显示状态 00h为时间显示标志,01h为日期显示标志,02h为定时时间显示标志,03h秒表显示标志 ;08h为秒位置选择标志,09h为分位置选者标志,0ah为时位置选择标志 ;10h为秒表开始或暂停标志,11h为,12h为是否正在放音乐标志,13h为是否延时标志,15h为闪烁标志,16h,17h为判断定时按键标志 mov 21h,#0 ;位存储器初始化 mov 22h,#0 ; setb 17h ; 开定时器 setb p0.0 ;开定时器指示灯retdisp: ;显示函数 mov r0,#78h ;显示第一 个位置 mov dptr,#tab ;mov r7,#0feh ;第一位有效next: mov a,r0 ; movc a,a+dptr ;把十进制数转化成数码管对应的数据 mov p1,a ;数据送出端口 mov p2,r7 ;地址送出端口 acall del1ms ;延时一毫秒 mov a,r7 ; rl a ;地址位左移到下一位 mov r7,a ; inc r0 ;数据地址加1 cjne r0,#80h,next ;是否已经显示完ljmp donetab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,40h,00h ;0 1 2 3 4 5 6 7 8 9 - 空del1ms: ;延时1毫秒函数 mov r6,#2 del1:mov r5,#250 djnz r5,$ djnz r6,del1rett0: ;定时器0函数 push dph push dpl push psw push acc mov th0,#0d8h ;定时时间设置为10毫秒 mov tl0,#0f0h djnz 50h,miao1 ;是否已经延时1秒 ajmp next5 ; miao1:ljmp miaobiao ;一秒还没到,进入秒表 next5:mov 50h,#100 ; 重新循环100次,即一秒 inc 73h ;秒加一 mov a,73h ; cjne a,#60,miao2 ;是否已经加到60 ajmp next6 ; miao2:ljmp miaobiao ;没到60,进入秒表 next6:mov 73h,#0 ;已经加到60,秒清0 inc 74h ;分加一 mov a,74h ; cjne a,#60,miao3 ;分是否已经加到60 ajmp next7 ; miao3:ljmp miaobiao ;没到60,进入秒表 next7:mov 74h,#0 ;已经到60,分清0 inc 75h ;时加1 mov a,75h ; cjne a,#24,miao4 ;是否已加到24 ajmp next8 ; miao4:ljmp miaobiao ;没到24则进入秒表 next8:mov 75h,#0 ;时清0 inc 70h ;日加1 mov a,70h ; cjne a,#29,month ;是否是29 mov a,71h ; cjne a,#2,miao5 ;是否是2月 ajmp next9 ;miao5:ljmp miaobiao ;不是2月,进入秒表next9:mov 71h,#3 ;月份为3 mov 70h,#1 ;日为1 ljmp miaobiao ;month: mov a,70h ; cjne a,#31,month1 ;是否是日是31 mov a,71h ; cjne a,#4,month6 ;是否是4月 mov 71h,#5 ;月份为5 mov 70h,#1 ;日为1 ajmp miaobiao ; month6:mov a,71h ; cjne a,#6,month9 ;是否是6月 mov 71h,#7 ;月份为7 mov 70h,#1 ;日为1 ajmp miaobiao ; month9:mov a,71h ; cjne a,#9,month11 ;是否是 9月 mov 71h,#10 ;月分为10 mov 70h,#1 ;日为1 ajmp miaobiao ; month11:mov a,71h ; cjne a,#11,miaobiao ;是否是11月 mov 71h,#12 ;月份为12 mov 70h,#1 ; 日为1 ajmp miaobiao ;month1: mov a,70h ; cjne a,#32,miaobiao ;是否日是32 mov a,71h ; cjne a,#12,month0 ;是否是 12月 inc 73h ;年加1 mov 70h,#1 ;月为1 mov 71h,#1 ;日为1 ajmp miaobiao ; month0:inc 71h ;不是12月,月加1 mov 70h,#1 ;日为 ajmp miaobiao ;miaobiao: ;秒表函数 jnb 03h,dingshi ;是否进入计时 jnb 10h,dingshi ;是否开始计时 djnz 52h,dingshi ;是否100毫秒已到 mov 52h,#10 ; jnb p3.4,clear ;按键按下时清0 inc 60h ;0.1秒位加1 mov a,60h ; cjne a,#10,dingshi ;是否已加到10 mov 60h,#0 ;0.1秒位清0 inc 61h ;秒位加1 mov a,61h ; cjne a,#60,dingshi ;秒是否已经加到60 mov 61h,#0 ;秒位清0 inc 62h ;分加1 mov a,62h ; cjne a,#60,dingshi ;是否是60分 mov 62h,#0 ;分为清0 ajmp dingshi ; clear:mov 60h,#0 ;清0 mov 61h,#0 ; mov 62h,#0 ; clr 10h ;停止计数 ajmp dingshi ;dingshi: ;定时函数 jb 17h,ystart ;定时器有效 ljmp baoshi ;定时器无效 ystart:jb 12h,start ;是否已经在放音乐 mov a,63h ; cjne a,73h,bao1 ;是否时已到 ajmp next10 ; bao1:ljmp baoshi ; next10:mov a,64h ; cjne a,74h,bao2 ;是否分已到 ajmp next11 ; bao2:ljmp baoshi ; next11:mov a,65h ; cjne a,75h,bao3 ;是否秒已到 ajmp next12 ; bao3:ljmp baoshi ; next12:setb 12h ;设置定时已到 mov 55h,#10h ;第一个节拍 mov 57h,#0fbh ;第一个音调高位 mov 56h,#8bh ;第一个音调低位 setb tr1 ;启动定时器1start:djnz 55h,bao4 ;节拍是否已结束 ajmp next13 ;bao4: ljmp baoshi ;next13: cpl 13h ; jb 13h,delay50ms ;进入延时50毫秒 mov a,58h ; inc a ;表地址加1 mov 58h,a ; getnext:mov dptr,#dat ; movc a,a+dptr ;取音调 cjne a,#00h,dsq1 ;是否已经结束 clr 12h ;定时结束 clr tr1 ;关定时器1 clr p3.0 ;关蜂鸣器 clr 13h ; mov 59h,#00h ; mov 58h,#01h ; ajmp baoshi ; dsq1:cjne a,#01h,dsq2 ; mov a,55h ; inc a ; inc a ; mov 55h,a ; ajmp getnext ; dsq2:cjne a,#0ffh,dsq3 ;是否播放空音调 clr tr1 ;关定时器1 clr p3.0 ;关蜂鸣器 ajmp dsq4 ; dsq3:mov b,#20 ;把音调转化成定时器1所对应定时存储器 mul ab ; mov 59h,a ; mov a,#0ffh ; subb a,59h ; mov 56h,a ; mov 59h,b ; mov a,#0ffh ; subb a,59h ; mov 57h,a ; setb tr1 ; dsq4:mov a,58h ; inc a ;表地址加1 mov 58h,a ; mov dptr,#dat ; movc a,a+dptr ;取节拍进行延时 mov 55h,a ; jb p3.4,baoshi ;是否停止放 clr 12h ;清标志位 clr tr1 ;关定时器1 clr p3.0 ;关蜂鸣器 clr 13h ; mov 59h,#00h ; mov 58h,#01h ; ajmp baoshi ; delay50ms:clr tr1 ;延时50毫秒 clr p3.0 ;关蜂鸣器 mov 55h,#5 ;baoshi: ;整点报时函数 jb 12h,flashctrl ;如果正在定时放音乐则不整点报时 mov a,74h ; cjne a,#0,bao ;是否是0分 mov

温馨提示

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

评论

0/150

提交评论