《电子钟实训报告.doc》由会员分享,可在线阅读,更多相关《电子钟实训报告.doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机原理及应用课程设计报告课题名称:基于单片机的电子钟的设计 姓 名: 李 伟 院 系: 应 用 技 术 学 院 专业: 07电子信息工程(仪器仪表)学 号: 8 指导教师: 谢 辉 完成时间: 2009 年 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 电子钟计时器的显
2、示程序 63.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数码管时钟电路采用24小时计时方式,时、分、秒用六位数码管显示。该电路采用AT89C51单片机,使用5V电池供电,只使用一个按键进行复位状态的控制以及正常显示等状态。.段选和位选是针对数码管而言的,位选是表示要让哪一片数码管工作,而段选就是要让选通的那片数码管显示什么样的
4、内容。而对于时钟电路的硬件部分:LED显示采用动态扫描方式实现,P0口输出段码数据, P2口做位控口,采用6M晶振。1.2 设计目的(1) 通过课程设计,使学生深入理解单片机系统的工作原理,接口电路的设计及调试方法,培养学生综合运用所学理论知识分析和解决实际问题的能力。(2) 提高学生全局考虑问题,综合应用专业知识的能力,锻炼学生的独立工作能力,也是对前期理论与实践教学效果的检验。(3) 掌握用单片机进行实际产品开发的基本过程,加强模块化设计思想的培养,养成良好的设计和编程习惯,增加对本专业的兴趣,为学生今后在电子、测控、通信、机电等领域从事单片机技术工作打下良好基础。1.3 设计任务1.3.
5、1显示部分设计一个时钟系统,时钟时间在六位数码管上进行显示,如下图。从左到右依次为“时:分:秒”。一上电,数码管显示起始时间为0时0分0秒,即数码管显示00.00.00,以后每秒钟时钟系统加1,最大显示值为23.59.59。数码管可采用并口扩展也可采用串口扩展。设计方案自定。1.3.2扩展要求(1) 设计键盘电路,可从键盘进行显示初值设置,也可在系统运行过程中随时进行时间调整。设计方案自定。(2) 显示电路也可选择液晶显示器。1 增加附加功能模块的课程设计,根据难度系数,适当增加分数。(1)(2) 根据具体题目要求,设计以单片机为控制核心的测量系统或控制系统,完成对指定目标或对象的测量及控制。
6、(3) 设计单片机与测量及控制对象的接口并进行硬件调试。(4) 针对要求测量或控制的对象完成程序的编制。(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)上,这样程序在运行过程中就会自动查询该引脚上的电平,当该引脚电平
8、为高电平时,则电路恢复初始状态,反之,则程序正常运行。第2章 系统硬件设计电子钟的计时器的硬件电路如图所示,采用AT89C51单片机,最小化应用设计;采用共阳八段LED显示器,P0口输出段码数据,P2.0-P2.5口作列扫描输出。为了提供共阳LED数码管的驱动电压,用74LS06作为位控驱动输出。用74LS07作为段控驱动。采用6M晶振,有利于提高计时的精确性。2.1 电子钟的硬件电路六位LED显示器位控驱动AT89C51 P0 单片机控制器 P2段控驱动复位电路晶振电路图2.1硬件系统的总体设计框架2.2电路原理图设计 电路原理图设计最基本的要求是正确性,其次是布局合理,最后在正确性和布局合
9、理的前提下力求美观。 设计电路原理图:2.3 AT89C2051单片机引脚及其说明 AT89C51单片机,是一种低功耗、高性能的、片内含有4KB ROM的8位CHMOS单片机,工作电压范围为2.76V(实际使用+5V供电),8位数据总线。它有一个可编程的全双工串行通信接口,能同时进行串行发送和接收。通过RXD引脚(串行数据接收端)和TXD引脚(串行数据发送端)与外界进行通信。引脚图如下: AT89C51单片机采用双列直插式Chip Carrier)的形式封装。这里仅介绍最常用的有总线扩展引脚的(DIP),QFP44(Quad Flat Pack)和LCC(Leaded DIP40封装,AT89
10、C51有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含5个中断,2个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。主要功能特性: 兼容MCS51指令系统 4k ROM 32个双向I/O口 128B内部RAM 2个16位可编程定时/计数器中断 时钟频率0-12MHz 1个串行中断 2个外部中断源 共5个中断源 2个读写中断口线 低功耗空闲和掉电模式 2.4 74LS707的介绍 74ls07为六高压正向驱动芯片
11、,引脚图如下 74ls07 引脚图主要电气特性:电源电压 7V 输入电压 5.5V 输出截止态电压 30V 工作环境温度 -55125引出端符号: 1A6A 输入端 1Y6Y 输出端2.5 74LS706的介绍74ls06为六高压反向驱动芯片,引脚图如下第3章 系统软件的设计电子钟系统的软件设计,采用主程序和子程序结构。主程序流程图如下,主程序依次调用显示子程序,调用定时器中断服务程序,调用延时子程序。显示程序完成时、分、秒各位的显示功能,定时器中断服务程序完成中断定时功能,延时子程序实现软件延时,完成校准时间等功能。3.1 电子钟的主程序本设计中,计时采用定时器T0中断完成,其余状态循环调用
12、显示子程序,当端口开关按下时,转入相应功能程序。其主程序执行流程见下图。开始启动定时初始化常数及定时模式及开中断调用显示子程序主程序代码如下:ORG 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 S
13、ETB EA ;EA置1,中断总允许 SETB ET0 ;ET0置1,定时器0中断允许 SETB TR0 ;TR0置1,定时开始ML0: LCALL DIS ;调用显示子程序 SJMP ML0 3.2电子钟定时器的显示程序 数码管显示的数据存放在内存单元79H7EH中。其中79H7AH存放秒数据,7BH7CH存放分数据,7DH7EH存放时数据,每一地址单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM代码表中。显示时,先取出79H7EH某一地址中的数据,然后查得对应的显示用段码,并从P0口输出,P2口将对应的数码管选中供电,就能显示该
14、地址单元的数据值。显示子程序代码如下: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 ;指向下一个显示段数据地址 MOV A,R3 JB ACC.
15、5,ELD1 ;扫描到第六个显示器否? RL A ;未到,扫描码左移1位 MOV R3,A AJMP LD0ELD1: RETDESG: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH;共阳极代码3.3定时器中断服务程序定时器TO用于时间计时,定时溢出中断周期设为500us,中断进入后,判断是否到1秒钟,到了,则调用加法子程序对秒进行加1处理,处理完后返回断点地址,同时判断秒是否到了60秒,到了则对秒单元清零,同时对分进行加1操作,同样对分进行判断,到60分则对分单元清零,同时对时加1,同样也对时进行判断,到24小时,则对时单元清零,最
16、后中断返回。 T0中断服务程序执行流程见下图:保护现场 100次计数减1100次计数是否到?N20次计数减1Y20次计数是否到?NY秒值加1是否到60秒?N Y秒清0分加1是否到60分?NY分清0小时加1是否到24小时?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 3
17、1H, A JNZ RET0MOV 31H,#20 ;满20次,1s时间到,开始计时操作 MOV R0, #7AH ;移显示缓冲单元地址 ACALL DAAD1 ;移加1 MOV 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 ;时显示缓
18、冲单元清0 ACALL DAAD1 ;时加1 MOV A, R2 XRL A, #24H ;判是否到24时 JNZ RET0 ; ACALL CLR0 ;判24时,时显示缓冲单元清0RET0: CLR PSW.3 ;RS1 RS0=00,恢复0组通用寄存器 POP ACC ;现场恢复 POP PSW RETI 3.4延时功能子程序 当我们调用显示子程序的过程中,我们需要调用延时子程序来控制显示时间,假如我们不调用延时,那么我们将会看到数码管闪烁不停,这对我们的眼睛非常不利,假如调用一定时间的延时,我们的眼睛就不会很累了。 延时子程序如下:DL1: MOV R7,#01H ;延时1ms子程序DL
19、: MOV R6,#0FFHDL6: DJNZ R6,DL6DJNZ R7,DLRET 第4章 控制源程序清单ORG 00H AJMP MAIN ORG 000BH AJMP PIT0 ORG 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=100
20、20500s MOV 31H , #20 SETB EA ;EA置1,中断总允许 SETB ET0 ;ET0置1,定时器0中断允许 SETB TR0 ;TR0置1,定时开始ML0: LCALL 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 RET0
21、MOV 31H,#20 ;满20次,1s时间到,开始计时操作 MOV R0, #7AH ;移显示缓冲单元地址 ACALL DAAD1 ;移加1 MOV 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 DA
22、AD1 ;时加1 MOV A, R2 XRL A, #24H ;判是否到24时 JNZ RET0 ACALL CLR0 ;判24时,时显示缓冲单元清0RET0: CLR PSW.3 ;RS1 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
23、 R0 MOV A , R2 ; ANL A, #0F0H ;取出十位数 SWAP A ;使十位数占低4位 MOV R0,A ;返回 RET CLR0: CLR A ;清缓冲单元子程序 MOV 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, L
24、D1 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,99H,92H,82H,0F8H,80H,90H,0FFH;共阳极代码DL1: MOV R7,#01H ;延时1ms子程序DL: MOV R6,#0FFHDL6: D
25、JNZ R6,DL6DJNZ R7,DLRET END第5章 设计心得两周的课程设计很快就要过去了,虽然时间很短,但留下了很多的心得体会。我们组共有4个人,有各自的分工,也有全面的合作。我主要负责的是程序的设计与修改。程序属于单片机的软件部分,有了软件就必须有硬件作基础。所以从开始我主要对硬件进行设计,确定每个端口的作用,以及每个元件的之间衔接,这样才能为软件的设计铺好思路。硬件链接设计好后就开始设计软件,同时我们负责焊接的同学开始焊接,这样可以提高工作效率。元件的设计是一个比较复杂的过程,所以我们不得不参考一些资料。在设计过程中我遇到一些问题,比如有关键盘的程序。这个程序应该怎么和主程序衔接
26、是个很大的难点。这让我认识到了自己的不足,所以我得加把油。虽然键盘程序遇到了困难,但通过两周的学习让我受益颇丰。比如对显示程序的理解就让我建立了很好的信心。 通过这一次的课程设计,让我对单片机有了更加深刻的认识,并决心一辈子就走电子这条路了,永不后悔。第6章 附 录附录1:元器件清单序号名称型号规格数量1单片机AT89C5112六高压正向驱动芯片74LS0723六高压反向驱动芯片74LS0614共阳极数码管无6540引脚的芯片座子无3614引脚的芯片座子无37电阻器0.3K88电阻器1K19电阻器5K210电解电容10uF111晶振6M112瓷片电容30pF213发光二极管红114微动开关无1附录2:实训产品照片