1、单片机原理及应用课程设计汇报课题名称:基于单片机电子钟设计 姓 名: 李 伟 院 系: 应 用 技 术 学 院 专业: 07电子信息工程(仪器仪表)学 号: 15190128 指导老师: 谢 辉 完成时间: 年 12 月 28 日目 录第1章 引 言 11.1 电子钟概述11.2 设计目标11.4 设计任务11.3 系统关键功效1第2章 系统硬件设计 22.1 电子钟硬件电路 22.2 电路原理图 32.3 AT89C51单片机及其引脚说明 32.4 74LS707芯片介绍 52.5 74LS706芯片介绍 5第3章 系统软件设计 6 3.1 电子钟主程序 63.2 电子钟计时器显示程序 63
2、.3 定时器中止服务程序 73.5 延时功效子程序10第4章 控制源程序10第5章 设计心得13第6章 附 录14附录1 元器件清单表15 附录2 实训产品照片16基于单片机电子钟设计重庆三峡学院应用技术学院 摘要:介绍了基于ATMEL企业AT89C51系列单片机数字式电子钟路设计和制作,包含硬件电路原理、设计和制作,并分析了对应软件设计及其关键点,包含软件设计步骤、整机仿真和调试.关键词: 数字式电子钟; 蜂鸣器; 数码管; ; 51系列单片机; AT89C51; 晶振;第1章 引 言单片机含有体积小,成本低,抗干扰能力强,面向控制,能够实现分机各分布式控制等优点。本电子钟设计就是利用单片机
3、上述优点,采取现在市场上性能价格比较高AT89C51单片机设计而成最小系统。它在实际生活中含有广泛应用。1.1 电子钟概述介绍了一个基于AT89C51单片机设计数字电子钟方法,数字电子钟硬件设计和软件设计,和它性能和特点,该电子钟能够实现时间显示,含有硬件成本低、计时正确特点。LED数码管时钟电路采取二十四小时计时方法,时、分、秒用六位数码管显示。该电路采取AT89C51单片机,使用5V电池供电,只使用一个按键进行复位状态控制和正常显示等状态。.段选和位选是针对数码管而言,位选是表示要让哪一片数码管工作,而段选就是要让选通那片数码管显示什么样内容。而对于时钟电路硬件部分:LED显示采取动态扫描
4、方法实现,P0口输出段码数据, P2口做位控口,采取6M晶振。1.2 设计目标(1) 经过课程设计,使学生深入了解单片机系统工作原理,接口电路设计及调试方法,培养学生综合利用所学理论知识分析和处理实际问题能力。(2) 提升学生全局考虑问题,综合应用专业知识能力,锻炼学生独立工作能力,也是对前期理论和实践教学效果检验。(3) 掌握用单片机进行实际产品开发基础过程,加强模块化设计思想培养,养成良好设计和编程习惯,增加对本专业爱好,为学生以后在电子、测控、通信、机电等领域从事单片机技术工作打下良好基础。1.3 设计任务1.3.1显示部分设计一个时钟系统,时钟时间在六位数码管上进行显示,以下图。从左到
5、右依次为“时:分:秒”。一上电,数码管显示起始时间为0时0分0秒,即数码管显示00.00.00,以后每秒钟时钟系统加1,最大显示值为23.59.59。数码管可采取并口扩展也可采取串口扩展。设计方案自定。1.3.2扩展要求(1) 设计键盘电路,可从键盘进行显示初值设置,也可在系统运行过程中随时进行时间调整。设计方案自定。(2) 显示电路也可选择液晶显示器。1 增加附加功效模块课程设计,依据难度系数,合适增加分数。(1)(2) 依据具体题目要求,设计以单片机为控制关键测量系统或控制系统,完成对指定目标或对象测量及控制。(3) 设计单片机和测量及控制对象接口并进行硬件调试。(4) 针对要求测量或控制
6、对象完成程序编制。(5) 硬件软件联调,完成指导老师部署各个具体题目所要求完成功效。1.4 设计方案1.5 系统关键功效1.5.1时钟功效对于时钟功效,需要在数码管上显示小时、分钟和秒钟,所以,能够在内部存放空间分别定义它们显示缓存空间,来存放小时、分钟和秒钟BCD码,各2个字节。因为时钟是不能停止,所以需要采取内部定时器自动计时,并使用定时器中止处理程序来定时进行时间数值刷新。51单片机2个定时器全部含有8位定时器工作模式。当晶振为6MHz时,8位定时器最大定时值为512us;要达成1秒钟,能够采取两种方法:采取一个定时器定时和软件计数相结合方法;或采取两个定时器级联方法。考虑到资源问题,我
7、们采取第一个方法,只使用1个定时器T0,并使T0溢出时间为500us,和两重循环计数一起来实现1秒钟定时。1.5.2计时功效当该电子钟用作计时功效时,只需要一个定时器进行500uS定时,在本设计中使用单片机T0定时计数中止。在T0中止处理程序中对时、分、秒缓存空间进行更新。1.5.3功效按键 在此次设计中,我们只用到了一个按键,而且此按键是用来控制电路复位,我们将设计好复位电路直接接在单片机复位引脚(RST)上,这么程序在运行过程中就会自动查询该引脚上电平,当该引脚电平为高电平时,则电路恢复初始状态,反之,则程序正常运行。第2章 系统硬件设计电子钟计时器硬件电路图所表示,采取AT89C51单片
8、机,最小化应用设计;采取共阳八段LED显示器,P0口输出段码数据,P2.0-P2.5口作列扫描输出。为了提供共阳LED数码管驱动电压,用74LS06作为位控驱动输出。用74LS07作为段控驱动。采取6M晶振,有利于提升计时正确性。2.1 电子钟硬件电路六位LED显示器位控驱动AT89C51 P0 单片机控制器 P2段控驱动复位电路晶振电路图2.1硬件系统总体设计框架2.2电路原理图设计 电路原理图设计最基础要求是正确性,其次是布局合理,最终在正确性和布局合理前提下努力争取美观。 设计电路原理图:2.3 AT89C2051单片机引脚及其说明 AT89C51单片机,是一个低功耗、高性能、片内含有4
9、KB ROM8位CHMOS单片机,工作电压范围为2.76V(实际使用+5V供电),8位数据总线。它有一个可编程全双工串行通信接口,能同时进行串行发送和接收。经过RXD引脚(串行数据接收端)和TXD引脚(串行数据发送端)和外界进行通信。引脚图以下: AT89C51单片机采取双列直插式Chip Carrier)形式封装。这里仅介绍最常见有总线扩展引脚(DIP),QFP44(Quad Flat Pack)和LCC(Leaded DIP40封装,AT89C51有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含5个中止,2个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89
10、C51能够根据常规方法进行编程,也能够在线编程。其将通用微处理器和Flash存放器结合在一起,尤其是可反复擦写Flash存放器可有效地降低开发成本。关键功效特征: 兼容MCS51指令系统 4k ROM 32个双向I/O口 128B内部RAM 2个16位可编程定时/计数器中止 时钟频率0-12MHz 1个串行中止 2个外部中止源 共5个中止源 2个读写中止口线 低功耗空闲和掉电模式 2.4 74LS707介绍 74ls07为六高压正向驱动芯片,引脚图以下 74ls07 引脚图关键电气特征:电源电压 7V 输入电压 5.5V 输出截止态电压 30V 工作环境温度 -55125引出端符号: 1A6A
11、 输入端 1Y6Y 输出端2.5 74LS706介绍74ls06为六高压反向驱动芯片,引脚图以下第3章 系统软件设计电子钟系统软件设计,采取主程序和子程序结构。主程序步骤图以下,主程序依次调用显示子程序,调用定时器中止服务程序,调用延时子程序。显示程序完成时、分、秒各位显示功效,定时器中止服务程序完成中止定时功效,延时子程序实现软件延时,完成校按时间等功效。3.1 电子钟主程序本设计中,计时采取定时器T0中止完成,其它状态循环调用显示子程序,当端口开关按下时,转入对应功效程序。其主程序实施步骤见下图。开始开启定时初始化常数及定时模式及开中止调用显示子程序主程序代码以下:ORG 0100HMAI
12、N: MOV SP,#60H ;确立堆栈区 MOV R0,#79H ;显示缓冲区首地址 MOV R7,#06H ;显示位数ML1: MOV R0,#00H ;显示缓冲单元清0 INC R0 DJNZ R7, ML1 MOV TMOD,#02H ;定时器0,工作方法2 MOV TH0,#06H ;定时器定时500s MOV TL0, #06H MOV 30H , #100 ; 1s=10020500s MOV 31H , #20 SETB EA ;EA置1,中止总许可 SETB ET0 ;ET0置1,定时器0中止许可 SETB TR0 ;TR0置1,定时开始ML0: LCALL DIS ;调用显
13、示子程序 SJMP ML0 3.2电子钟定时器显示程序 数码管显示数据存放在内存单元79H7EH中。其中79H7AH存放秒数据,7BH7CH存放分数据,7DH7EH存放时数据,每一地址单元内均为十进制BCD码。因为采取软件动态扫描实现数据显示功效,显示用十进制BCD码数据对应段码存放在ROM代码表中。显示时,先取出79H7EH某一地址中数据,然后查得对应显示用段码,并从P0口输出,P2口将对应数码管选中供电,就能显示该地址单元数据值。显示子程序代码以下:DIS: MOV R0,#79H ;显示数据缓冲区首地址送R0 MOV R3,#0FEH ;使显示器最右边位亮 MOV A,R3 LD0: M
14、OV p2,A ;送扫描值 MOV A,R0 ;取欲显示数据 ADD A,#18H ;加上偏移量 MOVC A,A+PC ;取出字型码 CJNE R3, #3BH, LD1 AJMP LD2LD1: CJNE R3, #2FH, LD3LD2: ANL A, #7FHLD3: MOV P0,A ;送显示 ACALL DL1 ;调用延时子程序 INC R0 ;指向下一个显示段数据地址 MOV A,R3 JB ACC.5,ELD1 ;扫描到第六个显示器否? RL A ;未到,扫描码左移1位 MOV R3,A AJMP LD0ELD1: RETDESG: DB 0C0H,0F9H,0A4H,0B0H
15、,99H,92H,82H,0F8H,80H,90H,0FFH;共阳极代码3.3定时器中止服务程序定时器TO用于时间计时,定时溢出中止周期设为500us,中止进入后,判定是否到1秒钟,到了,则调用加法子程序对秒进行加1处理,处理完后返回断点地址,同时判定秒是否到了60秒,到了则对秒单元清零,同时对分进行加1操作,一样对分进行判定,到60分则对分单元清零,同时对时加1,一样也对时进行判定,到二十四小时,则对时单元清零,最终中止返回。 T0中止服务程序实施步骤见下图:保护现场 100次计数减1100次计数是否到?N20次计数减1Y20次计数是否到?NY秒值加1是否到60秒?N Y秒清0分加1是否到6
16、0分?NY分清0小时加1是否到二十四小时?NY小时清0恢复现场返回中止中止服务程序以下:PIT0: PUSH PSW ; 中止服务程序,现场保护 PUSH ACC SETB PSW.3 ;RS1 RS0=01,选1组通用寄存器 MOV A, 30H ;循环次数减1 DEC A MOV 30H,A JNZ RET0 ;不满100次,转RETO返回 MOV 30H, #100 MOV A , 31H DEC A MOV 31H, A JNZ RET0MOV 31H,#20 ;满20次,1s时间到,开始计时操作 MOV R0, #7AH ;移显示缓冲单元地址 ACALL DAAD1 ;移加1 MOV
17、 A, R2 ;加1后秒值在R2中 XRL A, #60H ;判是否到60秒 JNZ RET0 ;不到,转RETO返回 ACALL CLR0 ;到60,秒显示缓冲单元清0 MOV R0, #7CH ;分显示缓冲单元地址 ACALL DAAD1 ;分加1 MOV A, R2 XRL A, #60H ;判是否到60分 JNZ RET0 ACALL CLR0 ;判60,分显示缓冲单元清0 MOV R0, #7EH ;时显示缓冲单元清0 ACALL DAAD1 ;时加1 MOV A, R2 XRL A, #24H ;判是否到24时 JNZ RET0 ; ACALL CLR0 ;判24时,时显示缓冲单元
18、清0RET0: CLR PSW.3 ;RS1 RS0=00,恢复0组通用寄存器 POP ACC ;现场恢复 POP PSW RETI 3.4延时功效子程序 当我们调用显示子程序过程中,我们需要调用延时子程序来控制显示时间,假如我们不调用延时,那么我们将会看到数码管闪烁不停,这对我们眼睛很不利,假如调用一定时间延时,我们眼睛就不会很累了。 延时子程序以下:DL1: MOV R7,#01H ;延时1ms子程序DL: MOV R6,#0FFHDL6: DJNZ R6,DL6DJNZ R7,DLRET 第4章 控制源程序清单ORG 00H AJMP MAIN ORG 000BH AJMP PIT0 O
19、RG 0100HMAIN: MOV SP,#60H ;确立堆栈区 MOV R0,#79H ;显示缓冲区首地址 MOV R7,#06H ;显示位数ML1: MOV R0,#00H ;显示缓冲单元清0 INC R0 DJNZ R7, ML1 MOV TMOD,#02H ;定时器0,工作方法2 MOV TH0,#06H ;定时器定时500s MOV TL0, #06H MOV 30H , #100 ; 1s=10020500s MOV 31H , #20 SETB EA ;EA置1,中止总许可 SETB ET0 ;ET0置1,定时器0中止许可 SETB TR0 ;TR0置1,定时开始ML0: LCA
20、LL DIS ;调用显示子程序 SJMP ML0 PIT0: PUSH PSW ; 中止服务程序,现场保护 PUSH ACC SETB PSW.3 ;RS1 RS0=01,选1组通用寄存器 MOV A, 30H ;循环次数减1 DEC A MOV 30H,A JNZ RET0 ;不满100次,转RETO返回 MOV 30H, #100 MOV A , 31H DEC A MOV 31H, A JNZ RET0MOV 31H,#20 ;满20次,1s时间到,开始计时操作 MOV R0, #7AH ;移显示缓冲单元地址 ACALL DAAD1 ;移加1 MOV A, R2 ;加1后秒值在R2中 X
21、RL A, #60H ;判是否到60秒 JNZ RET0 ;不到,转RETO返回 ACALL CLR0 ;到60,秒显示缓冲单元清0 MOV R0, #7CH ;分显示缓冲单元地址 ACALL DAAD1 ;分加1 MOV A, R2 XRL A, #60H ;判是否到60分 JNZ RET0 ACALL CLR0 ;判60,分显示缓冲单元清0 MOV R0, #7EH ;时显示缓冲单元清0 ACALL DAAD1 ;时加1 MOV A, R2 XRL A, #24H ;判是否到24时 JNZ RET0 ACALL CLR0 ;判24时,时显示缓冲单元清0RET0: CLR PSW.3 ;RS
22、1 RS0=00,恢复0组通用寄存器 POP ACC ;现场恢复 POP PSW RETI DAAD1: MOV A, R0 ;加1子程序,十位数送A DEC R0 SWAP A ;十位占高4位 ORL A, R0 ;个位占低4位 ADD A, #01H ;加1 DA A ;十位制调整 MOV R2, A ;全值暂存R2中 ANL A, #0FH ;取出个位数 MOV R0,A ;个位值送显示缓冲单元 INC R0 MOV A , R2 ; ANL A, #0F0H ;取出十位数 SWAP A ;使十位数占低4位 MOV R0,A ;返回 RET CLR0: CLR A ;清缓冲单元子程序 M
23、OV R0,A ;十位数缓冲单元清0 DEC R0 MOV R0,A ;个位数缓冲单元清0 RET DIS: MOV R0,#79H ;显示数据缓冲区首地址送R0 MOV R3,#0FEH ;使显示器最右边位亮 MOV A,R3 LD0: MOV p2,A ;送扫描值 MOV A,R0 ;取欲显示数据 ADD A,#18H ;加上偏移量 MOVC A,A+PC ;取出字型码 CJNE R3, #3BH, LD1 AJMP LD2LD1: CJNE R3, #2FH, LD3LD2: ANL A, #7FHLD3: MOV P0,A ;送显示 ACALL DL1 ;调用延时子程序 INC R0
24、;指向下一个显示段数据地址 MOV A,R3 JB ACC.5,ELD1 ;扫描到第六个显示器否? RL A ;未到,扫描码左移1位 MOV R3,A AJMP LD0ELD1: RETDESG: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH;共阳极代码DL1: MOV R7,#01H ;延时1ms子程序DL: MOV R6,#0FFHDL6: DJNZ R6,DL6DJNZ R7,DLRET END第5章 设计心得两周课程设计很快就要过去了,即使时间很短,但留下了很多心得体会。我们组共有4个人,有各自分工,也有全方面合作。我关键负责
25、是程序设计和修改。程序属于单片机软件部分,有了软件就必需有硬件作基础。所以从开始我关键对硬件进行设计,确定每个端口作用,和每个元件之间衔接,这么才能为软件设计铺好思绪。硬件链接设计好后就开始设计软件,同时我们负责焊接同学开始焊接,这么能够提升工作效率。元件设计是一个比较复杂过程,所以我们不得不参考部分资料。在设计过程中我碰到部分问题,比如相关键盘程序。这个程序应该怎么和主程序衔接是个很大难点。这让我认识到了自己不足,所以我得加把油。即使键盘程序碰到了困难,但经过两周学习让我受益颇丰。比如对显示程序了解就让我建立了很好信心。 经过这一次课程设计,让我对单片机有了愈加深刻认识,并决心一辈子就走电子这条路了,永不后悔。第6章 附 录附录1:元器件清单序号名称型号规格数量1单片机AT89C5112六高压正向驱动芯片74LS0723六高压反向驱动芯片74LS0614共阳极数码管无6540引脚芯片座子无3614引脚芯片座子无37电阻器0.3K88电阻器1K19电阻器5K210电解电容10uF111晶振6M112瓷片电容30pF213发光二极管红114微动开关无1附录2:实训产品照片