基于AT89C51单片机的电子钟设计_第1页
基于AT89C51单片机的电子钟设计_第2页
基于AT89C51单片机的电子钟设计_第3页
基于AT89C51单片机的电子钟设计_第4页
基于AT89C51单片机的电子钟设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

基于AT89C51单片机的电子钟设计PAGEPAGE18摘要:以单片机设计了一个基于AT89C51的作息时间控制器系统。我们采用的是六位数码管静态显示方案来实现的。该电子主要由AT89C51、74L164、六位数码管等构成的。采用晶振电路作为驱动电路,有延时程序和循环程序作为一秒定时,达到时分秒的计时。用keil进行代码编译,用proteus的ISIS软件进行仿真。,单片机体积小设计成本低,且抗干扰能力很强,可以实现分式各分部控制的优点,让单片机很大的发展前景。本次设计采用的就是现在性能最好的AT89C51单片机设计而成的最小系统。它在我们生活中有很广泛的应用。关键词:单片机电子钟静态显示目录第一章:引言1.1设计要求…………第2页1.2设计目的…………第2页1.3设计思路…………第2页1.4主控制系统………………………第2页第二章:硬件系统2.1硬件原理图………………………第3页2.2晶振电路…………第3页2.3复位电路…………第4页2.4驱动电路…………第4页2.5显示电路…………第5页2.6硬件原理及说明…………………第6页2.7主要性能及参数…………………第6页第三章:软件系统设计……………………….第7页3.1主程序…………….第7页3.2显示子程序……………………….第8页3.3定时中断子程序………………….第10页3.4软件仿真………….第12页第四章:系统调试…………….第14页4.1硬件调试………….第14页第五章:实验心得…………….第14页参考文献……………...第14页附录……………………第15页基于AT89C51单片机的电子钟设计全文共20页,当前为第1页。基于AT89C51单片机的电子钟设计全文共20页,当前为第1页。第一章引言1.1设计要求:系统上电和复位后能自动显示时间,能根据预先设定的时间进行打铃,响铃时间为15秒。设计一个六位数码管的额显示电路,能够显示“时、分、秒”1.2设计目的:1.2.1通过课程设计能让我们更加深入的了解单片机的基本原理,各电路的设计及其仿真调试。1.2.2使用AT89C51芯片的串口功能,利用寄存器74LS164实现时分秒的显示。1.2.3用keil原件进行编程和调试,再利用proteus进行仿真制作电路图。1.3设计思路:1.3.1该设计选用单片机来实现,要进行各个芯片的选择1.3.2采用AT89C51芯片,其为高性能CMOS8位单片机,该芯片内含有4Kbytes的可反复擦写的只读存储器、128bytes的随机存取数据存储器、32位可编程I/O口线、2个16位定时/计数器、6个中断源、可编程串行UART通道及低功耗空闲和掉电模式。因此,我们采用AT89C51。1.3.3采用6位数码管显示,显示较为清楚直观,便于观察与调试。1.3.4直接采用单片机定时计数提供秒信号。使用程序实现时分秒的计数,采用此种芯片可以减少芯片的使用,节约成本,实现的时间误差较小。1.4综上方案对此次电子钟选定为AT89C51芯片采用串行输出静态显示作为主控制系统,来实现时分秒的显示。AT89C51AT89C51主控制器晶振电路模块复位电路模块74LS164驱动电路6位LED显示电路→→→↓基于AT89C51单片机的电子钟设计全文共20页,当前为第2页。基于AT89C51单片机的电子钟设计全文共20页,当前为第2页。第二章硬件系统的设计2.1硬件原理图采用AT89C51作为主芯片,用定时计数器提供时钟,利用LED作为时间显示。2.2晶振电路晶振电路运用单片机的18、19脚与晶振和瓷片电容相连接,由2个30pF电容C1、C2和一个6MHz的晶振X1组成。它能产生一个高精度且稳定的振荡信号,即频率为6MHz的方波信号,此信号为单片机提供一个时钟信号,以供定时器定时用。基于AT89C51单片机的电子钟设计全文共20页,当前为第3页。2.3复位电路基于AT89C51单片机的电子钟设计全文共20页,当前为第3页。复位电路是运用单片机的9脚,实现的按键与上电复位。该电路中的复位电路为上电与按键均有效的复位,上电瞬间RST引脚获得高电平,随电容C1的充电,RST引脚的高电平将逐渐下降。RST引脚上的高电平只能保持两个机器周期的时间,单片机就可以进行复位操作。单片机在运行期间,我们可以利用按键开关来完成复位。当按键开关按下瞬间,RST上的电平立即变为高电平,即可进行复位2.4驱动部分74LS164是最常见的移位寄存器,移位寄存器是暂时记忆数据的“寄存器”,其特征是具有将数据向左或向右移动的功能。移位寄存器有各种形式。按存数据的位数有4位、8位等,按“输入/输出数据”形式有“串入/串出”、“串入/并出”、“并入/串出”、“并入/并入”等。芯片管脚图如图所示:74ls164是一个串入并出的8位移位寄存器,它常用于单片机系统中,图6是串行输入/并行(串行)输出移位寄存器74LS164的管脚排列图。其功能表见表1所示。74LS164有两个串行数据DA、DB输入端,使用时一般把它们连在一起;为清零输入端,低电平有效,当该端加入低电平时,寄存器输出Q0~Q7全为低电平。在正常情况下,清零输入端接高电平,当CP信号上升沿到来时,数据右移一位;Q0~Q7为并行数据输出端,同时Q7端也是串行数据输出端,对于串行输入的数据,最后进入的从Q0输出。CP为移位脉冲。最先输入的从Q7输出,基于AT89C51单片机的电子钟设计全文共20页,当前为第4页。基于AT89C51单片机的电子钟设计全文共20页,当前为第4页。段控部分位控部分2.5显示电路部分对于数字显示电路,通常采用液晶显示或数码管显示。本设计的显示电路采用6位一体数码管作为显示介质。基于AT89C51单片机的电子钟设计全文共20页,当前为第5页。数码管显示可以分为静态显示和动态显示两种。由于本设计静态显示则占用的口线多,硬件电路复杂。所以采用动态显示。基于AT89C51单片机的电子钟设计全文共20页,当前为第5页。2.6硬件原理及说明AT89C51是美国Intel公司生产的低电压,高性能CHMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(PEROM)和蔼可亲128bytes的随机存取数据存储器(RAM),器件采用Intel公司的高密度、非易失性存储技术生产,片内置通用4位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机适合于许多较为复杂控制应用场合。2.7主要性能参数与MCS-51产品指令和引脚完全兼容4k字节可重擦写Flash闪速存储器1000次擦写周期全静态操作:0Hz—24MHz三级加密程序存储器128×8字节内部RAM32个可编程I/O口线2个16位定时/计数器5个中断源可编程串行UART通道低功耗空闲和掉电模式基于AT89C51单片机的电子钟设计全文共20页,当前为第6页。基于AT89C51单片机的电子钟设计全文共20页,当前为第6页。第三章软件系统设计有主程序;静态显示子程序;中断服务程序;时、分、秒加1子程序;时分秒单元清零子程序。3.1主程序;功能:系统初始化,按键扫描子程序循环调用;*************************************************************START: MOV SECOND,#00 ;时钟初值为00.00.00 MOV MINITE,#59 MOV HOUR,#00 MOV DISPBIT,#00H ; MOV T2SCNTA,#00H MOV T2SCNTB,#00H MOV TEMP,#0FEH LCALL DISP ;调显示程序 MOV TMOD,#01H ;T0方式1,定时5ms ;MOV TH0,#((65536-20000)/256) ;T0赋初值 ;MOV TL0,#((65536-20000)MOD256) MOVTH0,#0ECH MOVTL0,#78H SETB TR0 ;启动T0 SETB ET0 ;开放T0中断 SETB EAMLP: LCALL WT ;调按键扫描子程序 SJMP MLP3.2显示子程序显示子程序流程图:基于AT89C51单片机的电子钟设计全文共20页,当前为第7页。基于AT89C51单片机的电子钟设计全文共20页,当前为第7页。基于AT89C51单片机的电子钟设计全文共20页,当前为第8页。显示子程序:基于AT89C51单片机的电子钟设计全文共20页,当前为第8页。;入口参数:时、分、秒值分别放在HOUR、MINITE和SECOND单元中;;出口信息:(47H)=BCD码时高位;(46H)=BCD码时低位;; (44H)=BCD码分高位;(43H)=BCD码分低位;; (41H)=BCD码秒高位;(40H)=BCD码秒低位;; (45H)=(42H)=0AH(“-”的位控码);************************************************************** DISP: MOV A,#DISPBUF ADD A,#8 DEC A MOV R1,A MOV A,HOUR ;取“时”值 MOV B,#10 ;“时”转换为BCD码 DIV AB MOV @R1,A ;BCD码“时”高位存入47H单元 DEC R1 MOV A,B ;BCD码“时”低位存入46H单元 MOV @R1,A DEC R1 MOV A,#10 MOV @R1,A ;45H单元存入0AH DEC R1 MOV A,MINITE ;取“分”值 MOV B,#10 DIV AB ;“分”转换为BCD码 MOV @R1,A ;BCD码“分”高位存入44H单元 DEC R1 MOV A,B MOV @R1,A ;BCD码“分”低位存入43H单元 DEC R1 MOV A,#10 MOV @R1,A ;42H单元存入0AH DEC R1 MOV A,SECOND ;取“秒”值基于AT89C51单片机的电子钟设计全文共20页,当前为第9页。 MOV B,#10 基于AT89C51单片机的电子钟设计全文共20页,当前为第9页。 DIV AB ;“秒”转换为BCD码 MOV @R1,A ;BCD码“秒”高位存入41H单元 DEC R1 MOV A,B MOV @R1,A ;BCD码“秒”低位存入40H单元 DEC R1 RET3.3定时中断子程序定时器TO用于时间计时,定时溢出中断周期设为100ms,中断进入后,判断是否到1秒钟,到了,则调用加法子程序对秒进行加1处理,处理完后返回断点地址,同时判断秒是否到了60秒,到了则对秒单元清零,同时对分进行加1操作,同样对分进行判断,到60分则对分单元清零,同时对时加1,同样也对时进行判断,到24小时,则对时单元清零,最后中断返回。中断服务程序:;功能:定时器定时10ms。1s=2×50×10ms。;每2ms进入一次中断,刷新对应的两位显示器;基于AT89C51单片机的电子钟设计全文共20页,当前为第10页。;按规定调整200ms、1000ms、秒、分、时单元的值基于AT89C51单片机的电子钟设计全文共20页,当前为第10页。;**************************************************************INT_T0: ;MOV TH0,#((65536-20000)/256) ;重赋初值;MOV TL0,#((65536-20000)MOD256)MOVTH0,#0ECHMOVTL0,#78HMOV A,#DISPBUF ;取显示缓冲单元ADD A,DISPBITMOV R0,AMOV A,@R0 ;取对应显示位MOV DPTR,#TABLEMOVC A,@A+DPTR ;查表取段码值CPLA MOV P2,A ;P1口输出对应位段码值MOV A,DISPBIT ;显示位地址MOV DPTR,#TABMOVC A,@A+DPTR ;查表取位控码MOV P3,A ;P3口输出位控码 LCALL DELY5MS ;延时2.5MS,稳定(必须加入,系统才能稳定显示) MOV P3,#0FFH ;位控码全灭(必须加入,否则扫描时位控码不关闭,会输出错误代码)INC DISPBIT ;位控码增1MOV A,DISPBIT CJNE A,#08H,KNA ;位控码到8了吗? MOV DISPBIT,#00H ;位控码到8,则清0KNA: INC T2SCNTA ;200ms单元加1MOV A,T2SCNTA CJNE A,#100,DONE ;500ms到了吗? MOV T2SCNTA,#00H ;200ms到,200ms单元清0 INC T2SCNTB ;1000ms单元加1MOV A,T2SCNTB CJNE A,#02H,DONE ;1000ms到了吗? MOV T2SCNTB,#00H ;1000ms到,1000ms单元清0基于AT89C51单片机的电子钟设计全文共20页,当前为第11页。 INC SECOND ;秒单元加1基于AT89C51单片机的电子钟设计全文共20页,当前为第11页。 MOV A,SECONDSETBP1.0 CJNE A,#60,NEXT ;60秒到了吗 MOV SECOND,#00H ;60s到,60s单元清0 INC MINITE ;分单元加1 MOV A,MINITE CJNE A,#60,NEXT ;60分到了吗? MOV MINITE,#00H ;60分到,分单元清0INC HOUR ;时单元增1CLRP1.0MOV A,HOUR CJNE A,#24,NEXT ;24小时到了吗? MOV HOUR,#00H ;24小时到,时单元清0NEXT: LCALLDISP ;调显示转换程序DONE: RETITABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H ;0~9,“-”共阴极代码,代码从高位到低位为dpgfedcbaTABLE:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH ;0~9,“-”共阳极代码,代码从高位到低位为dpgfedcbaTABLE1:DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H,02H;0~9,“-”共阴极代码,代码从高位到低位为abcdefgdpTAB:DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH ;动态扫描代码END3.4软件仿真:基于AT89C51单片机的电子钟设计全文共20页,当前为第12页。本次实训通过Kei和protues仿真软件仿佛进行调试与连调,确定各个程序模块正确无误基于AT89C51单片机的电子钟设计全文共20页,当前为第12页。基于AT89C51单片机的电子钟设计全文共20页,当前为第13页。基于AT89C51单片机的电子钟设计全文共20页,当前为第13页。第四章系统调试硬件调试用protues软件画出电路,用keil软件把代码进行编译。如果有错,对程序进行修改和调试。当没有错时生成HEX文件,在protues中添加源程序,在进行调试。调试成功后执行程序看仿真效果。第五章实验心得通过这次实验更加深入的了解到了单片机的基本工作原理,对于接口电路和调试的方法有了进一步的提高,对单片机的程序有了更加深刻的认识。在今后的工作一定会有很大的帮助。在这次实验中,通过与同学的协作完成了这次课程设计,大家都说出了自己的想法,增加了同学间的团结协作。这次课程设计实行的块结构,这个思想将会应用的以后的工作中。本次试验我学到了很多自己的动手能力得到了很大的提高在以后的课程中应该更加的努力好好完成试验。参考文献:《单片机原理及应用》谢辉化学工业出版社《电子技术基础试验》陈大钦高等教育出版社《电路基础》许熙文高等教育出版《单片机应用技术》北京理工大学出版社主编倪志连《单片机原理与应用系统设计》电子工业出版社主编张琦《51系列单片机高级实例开发指南》李军北京航空航天大学出版《单片机原理及应用》姜志海电子工业出版社《C程序设计》 潭浩强北京航空航天出版社基于AT89C51单片机的电子钟设计全文共20页,当前为第14页。《51系列单片机C语言程序设计与应用》于京中国电力出版社基于AT89C51单片机的电子钟设计全文共20页,当前为第14页。附录:完整程序:SECOND EQU 30H ;秒单元 MINITE EQU 31H ;分单元 HOUR EQU 32H ;时单元 HOURK BIT P0.2 ;时按键 MINITEKBIT P0.1 ;分按键 SECONDKBIT P0.0 ;秒按键 DISPBUFEQU 40H ;显示缓冲区 DISPBITEQU 48H ;显示位控码 T2SCNTAEQU 49H ;200ms存放单元 T2SCNTBEQU 4AH ;1000ms存放单元 TEMP EQU 4BH ORG00H LJMPSTART ORG0BH LJMPINT_T0;**************************************************************;主程序:基于AT89C51单片机的电子钟设计全文共20页,当前为第15页。;功能:系统初始化,按键扫描子程序循环调用基于AT89C51单片机的电子钟设计全文共20页,当前为第15页。;*************************************************************START: MOV SECOND,#00 ;时钟初值为00.00.00 MOV MINITE,#00 MOV HOUR,#00 MOV DISPBIT,#00H ; MOV T2SCNTA,#00H MOV T2SCNTB,#00H MOV TEMP,#0FEH LCALL DISP ;调显示程序 MOV TMOD,#01H ;T0方式1,定时5ms ;MOV TH0,#((65536-20000)/256) ;T0赋初值 ;MOV TL0,#((65536-20000)MOD256) MOVTH0,#0ECH MOVTL0,#78H SETB TR0 ;启动T0 SETB ET0 ;开放T0中断 SETB EAMLP: LCALL WT ;调按键扫描子程序 SJMP MLP;**************************************************************;按键扫描子程序:;功能:判断秒、分、时按键是否按下。;“秒”键按下,每按一次加1秒;;“分”键按下,每按一次加1分;;“时”键按下,每按一次加1个小时;;**************************************************************WT: JB SECONDK,NK1 ;秒按键按下否? ;LCALL DELY10MS ;延时10ms,消抖 JB SECONDK,NK1 ;抖动,转NK1 INC SECOND ;秒单元加1 MOV A,SECOND CJNE A,#60,NS60 ;60秒到否? MOV SECOND,#00H ;60s到,秒单元清0NS60: LCALL DISP ;调显示程序 JNB SECONDK,$ ;判断秒按键释放否?NK1: JB MINITEK,NK2 ;分按键按下否? ;LCALL DELY10MS ;延时10ms,消抖 JB MINITEK,NK2 ;抖动,转NK2 INC MINITE ;分单元加1 MOV A,MINITE CJNE A,#60,NM60 ;60分到否? MOV MINITE,#00H ;60分到,分单元清0NM60: LCALL DISP ;调显示程序基于AT89C51单片机的电子钟设计全文共20页,当前为第16页。 JNB MINITEK,$ ;判断分按键释放否? 基于AT89C51单片机的电子钟设计全文共20页,当前为第16页。NK2: JB HOURK,NK3 ;时按键按下否? ;LCALL DELY10MS ;延时10ms,消抖 JB HOURK,NK3 ;抖动,转NK3 INC HOUR ;时单元加1CLRP1.0 MOV A,HOUR CJNE A,#24,NH24 ;24小时到否? MOV HOUR,#00H ;24小时到,时单元清0NH24: LCALL DISP ;调显示程序 JNB HOURK,$ ;判断时按键释放否?NK3: RET ;**************************************************************;10MS延时子程序。(晶振12MHz);**************************************************************DELY10MS:MOV R6,#20D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET;**************************************************************;*******************************************************;2.5MS延时子程序。(晶振12MHz);**************************************************************DELY5MS:MOV R6,#6D5: MOV R7,#50 DJNZ R7,$ DJNZ R6,D5 RET;**************************************************************;显示转换子程序;入口参数:时、分、秒值分别放在HOUR、MINITE和SECOND单元中;;出口信息:(47H)=BCD码时高位;(46H)=BCD码时低位;; (44H)=BCD码分高位;(43H)=BCD码分低位;; (41H)=BCD码秒高位;(40H)=BCD码秒低位;; (45H)=(42H)=0AH(“-”的位控码);************************************************************** DISP: MOV A,#DISPBUF ADD A,#8 DEC A MOV R1,A MOV A,HOUR ;取“时”值 MOV B,#10 ;“时”转换为BCD码 DIV AB基于AT89C51单片机的电子钟设计全文共20页,当前为第17页。 MOV @R1,A ;BCD码“时”高位存入47H单元基于AT89C51单片机的电子钟设计全文共20页,当前为第17页。 DEC R1 MOV A,B ;BCD码“时”低位存入46H单元 MOV @R1,A DEC R1 MOV A,#10 MOV @R1,A ;45H单元存入0AH DEC R1 MOV A,MINITE ;取“分”值 MOV B,#10 DIV AB ;“分”转换为BCD码 MOV @R1,A ;BCD码“分”高位存入44H单元 DEC R1 MOV A,B MOV @R1,A ;BCD码“分”低位存入43H单元 DEC R1 MOV A,#10 MOV @R1,A ;42H单元存入0AH DEC R1 MOV A,SECOND ;取“秒”值 MOV B,#10 DIV AB ;“秒”转换为BCD码 MOV @R1,A ;BCD码“秒”高位存入41H单元 DEC R1 MOV A,B MOV @R1,A ;BCD码“秒”低位存入40H单元 DEC R1 RET;**************************************************************;定时中断子程序。;功能:定时器定时10ms。1s=2×50×10ms。;每2ms进入一次中断,刷新对应的两位显示器;;按规定调整200ms、1000ms、秒、分、时单元的值;**************************************************************INT_T0: ;MOV TH0,#((65536-20000)/256) ;重赋初值 ;MOV TL0,#((65536-20000)MOD256) MOVTH0,#0ECH MOVTL0,#78H MOV A,#DISPBUF ;取显示缓冲单元 ADD A,DISPBIT MOV R0,A MOV A,@R0 ;取对应显示位 MOV DPTR,#TABLE基于AT89C51单片机的电子钟设计全文共20页,当前为第18页。 MOVC A,@A+DPTR ;查表取段码值基于AT89C51单片机的电子钟设计全文共20页,当前为第18页。CPLA MOV P2,A ;P1口输出对应位段码值 MOV A,DISPBIT ;显示位地址 MOV DPTR,#TAB MOVC A,@A+DPTR ;查表取位控码 MO

温馨提示

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

评论

0/150

提交评论