《基于单片机并行口的电子钟的设计毕业设计论文.doc》由会员分享,可在线阅读,更多相关《基于单片机并行口的电子钟的设计毕业设计论文.doc(34页珍藏版)》请在三一办公上搜索。
1、毕业设计论文基于单片机并行口的电子钟的设计摘要:电子钟是一种用电子电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 电子钟从原理上讲是一种典型的电子电路,其中包括了组合逻辑电路和时序电路。目前,电子钟的功能越来越强,并且有多种专门的大规模集成电路可供选择。 从有利于学习的角度考虑,这里主要介绍以中小规模集成电路设计电子钟的方法。 经过了电子电路设计这门课程的系统学习,特别经过了关于组合逻辑电路与时序逻辑电路部分的学习,我们已经具备了设计小规模集成电路的能力,借由本次设计的机会,充分将所学的知识运用到实际中去。
2、 本次课程设计要求设计一个电子钟,基本要求为电子钟的时间周期为24小时,电子钟显示时、分、秒,数字钟的时间基准一秒对应现实生活中的时钟的一秒。供扩展的方面涉及到定时自动报警、按时自动打铃、定时广播、定时启闭路灯等。因此,研究电子钟及扩大其应用,有着非常现实的意义。关键字:单片机, LED显示器,电子钟,汇编语言。 目 录1 多功能电子表说明及总体方案介绍11.1多功能电子表计时方案11.2多功能电子表键盘/显示方案22 电子钟的工作原理43 多功能电子表原理框图、原理图及PCB图53.1多功能电子表原理框图54 多功能电子表元器件清单95 单片机硬件资源分配256 程序流程图267 电子钟程序
3、清单328 误差分析409 电子钟使用说明4310 设计体会4411 教学意见4512 参考资料461 多功能电子表说明及总体方案介绍本次设计电子钟系统功能简单,用单片机的最小系统就能得以实现。而单片机的最小系统设计中实际上最重要的就是对键盘/显示器接口电路的设计,由于系统功能不同所以要求就不同,接口设计也就不同。对一个键盘/显示器接口设计应从整个系统出发,综合考虑软、硬件特点。下面是本人在设计前对各种设计方案的考虑1.1 多功能电子表计时方案方案一:采用实时时钟芯片实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。计算机可通过中断或查
4、询方式读取计时数据进行显示,因此计时功能的实现无需占用CPU的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据。由于功能完善,精度高,软件程序设计相对简单,且计时不占用CPU时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。方案二: 软件控制。利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时及秒表计时。该方案节省硬件成本,且能使设计者对单片机的指令系统能有更深入的了解,从而掌
5、握单片机应用技术MCS-51汇编语言程序设计方法,因此,本系统设计采用此种软件控制方法来实现计时。而由于ATMEL公司的AT89S51单片机是低功耗的具有4KB在线可编程Flash存器的单片机。它与通用80C51系列单片机的指令系和引脚兼容。片内的Flash可允许在线重新编程,也可使用通用非易失性存储器编程。它将通用CPU和在线可编程Flash集成在一个芯片上,形成了功能强大、使用灵活和具有较高性能价格比的微控制器。它的功能强大,而且也较容易购买,故本设计中所选的单片机为AT89S51单片机。1.2 多功能电子表键盘/显示方案方案一: 8279扩展。该方案方框图如图1.2.1所示,8279是一
6、种可编程的键盘/显示接口专用芯片,它含有键盘输入和显示输出两种功能,键扫描程序和动态显示程序全由8279硬件自动完成,此种方案能以比较简单的硬件 电路和较少的软件开销实现单片机与键盘、LED显示器的接口。方案二: 8155扩展,LED动态显示。该方案方框图如图1.2.2所示,8155是一块可编程的接口芯片,与单片机的接口非常简单,它的键盘、显示共用一个接口电路,可节省I/O口。但动态扫描方式需占用CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。方案三: 串口扩展,LED静态显示。该方案方框图如图1.2.3所示,独立式键盘配置灵活,软件结构简单,按键较多时不宜采用。静态显示占用口
7、资源少,采用串口传输实现静态显示, LED数码管与单片机之间通过6个移位寄存器相连,显示亮度有保证,但此方案的硬件开销大,电路复杂,信息刷新速度慢,比较适用于并行口资源较少的场合。方案四: 独立式按键,LED动态显示。 该方案方框图如图1.2.4所示,独立式按键直接与单片机I/O口相连构成键盘,每个按键不会相互影响,因本系统用到的按键比较少,采用独立式键盘不会浪费I/O口线,所以本系统采用独立式键盘。动态显示的亮度虽然不如静态显示,但其硬件电路较简单,可节省硬件成本,虽然动态扫描需占用CPU较多的时间,但本系统中的单片机没有很多实时测控任务,因此,本系统采用此种方案。 2 多功能电子表的工作原
8、理本设计中的电子钟的核心是AT89S51单片机,其内部带有4KB在线可编程Flash存储器的单片机,无须外扩程序存储器,硬件电路主要由四部分构成:时钟电路,复位电路,键盘以及显示电路。时钟电路是电子表硬件电路的核心,没有时钟电路,电子表将无法正常工作计时。本系统时钟电路采用的晶振的频率为12MHz,定时器采用的是定时器0工作在方式1定时,用于实现时、分、秒的计时,定时时间为62.5ms。复位电路可使电子表恢复到初始状态。键盘可对电子表进行开启、停止,还能实现时、分、秒的显示及设定等操作。显示电路由两个共阳级4位一体LED数码管构成,它的段控端和位控端通过74LS244及其S8550PNP型号三
9、极管与AT89S51单片机的I/O口相连,显示器可使电子表显示出时、分、秒。 多功能电子表的计时原理为:上电后,电子表显示P.提示符,按下A键后,电子表从00:00:00开始计时。当定时器0的定时时间满62.5ms后,定时器0溢出一次,溢出满16次后,电子表的秒加1,满60秒后,分加1,满60分后,时加1,满24时后,电子表重新从00:00:00开始计时3 多功能电子表原理方框图、原理图及PCB图3.1 多功能电子表原理方框图多功能电子表整机电路方框图如图3.1 4 多功能电子表元器件清单多功能电子表电路所有元器件清单如表4.1所示表4.1 多功能电子表元器件清单1元件名称封装形式元件号LED
10、数码管(共阳极)DIP-12D1LED数码管(共阳极)DIP-12D2510电阻AXIAL0.4R1510电阻AXIAL0.4R2510电阻AXIAL0.4R3510电阻AXIAL0.4R4510电阻AXIAL0.4R5510电阻AXIAL0.4R6510电阻AXIAL0.4R7510电阻AXIAL0.4R81K电阻AXIAL0.4R9200电阻AXIAL0.4R104.7K电阻AXIAL0.4R114.7K电阻AXIAL0.4R124.7K电阻AXIAL0.4R134.7K电阻AXIAL0.4R144.7K电阻AXIAL0.4R154.7K电阻AXIAL0.4R164.7K电阻AXIAL0.
11、4R174.7K电阻AXIAL0.4R18电源插座UINDIANYUAN74LS244芯片DIP-20A1S8550PNP三极管TO-585501S8550PNP三极管TO-585502S8550PNP三极管TO-585503S8550PNP三极管TO-585504S8550PNP三极管TO-585505S8550PNP三极管TO-585506轻触开关ADIP04A轻触开关BDIP04B轻触开关CDIP04C轻触开关DDIP04D轻触开关DIP04S512M晶振XTAL1Y133pF电容RAD0.2C133pF电容RAD0.2C222F电容RB.2/.4C37805芯片TO-220U10.33
12、F电容RAD0.2C10.1F电容RAD0.2C2220F电容RB.2/.4C3220F电容RB.2/.4C4桥式整流DIP-04D2二极管DIODE0.4D111V变压器DIP-5TR扩展插针SIP08J0扩展插针SIP08J15 单片机硬件资源的分配本次设计用到了单片机正常工作的硬件资源,如(连接晶振的引脚XTAL1和XTAL2,复位引脚RESET),对其硬件资源还做了具体的安排。(1).P0口作为数码管显示器的段控输出口,对数码管显示器进行控制。(2).P1口P1.0P1.3接了四个独立式分别为A键、B键、C键、D键,用于对键盘的控制,P1.5、P1.6、P1.7则作为ISP程序下载的输
13、入端。(3).P2口该口全部用于数码管的位控端。(4).定时/计数器使用定时器0来实现本次电子钟的运行。(5).内部存储单元30H存储定时/计数器0的中断次数。31H36H分别作为时、分、秒个位和十位的数据存储单元。79H7E分别作为LED0、LED1、LED2、LED3、LED4、LED5显示缓冲单元。(6).通用寄存器第0组寄存器:R0、R1、R3、R7,用来存放键功能程序的数据;第1组寄存器:R3,用来存放中断服务程序的数据;第2组寄存器:R1、R4,用来存放显示程序的数据。(7).专用寄存器定时器控制寄存器TCON,通过设置该寄存器中TR0位的状态来控制定时/计数器0的启动/停止;中断
14、允许寄存器IE,通过设置该寄存器EA/ET0位的状态来设置定时/计数器0中断允许/禁止;定时/计数器工作方式寄存器TMOD,设置定时/计数器0的工作方式。7 程序流程图 8 电子钟程序清单调整运行后的电子钟程序清单;该程序实现电子钟时、分、秒运行,时、分、秒调整;十、分、秒同时显示;共A、B、C、D四个按键,A键实现电子钟的运行和停止、B键调时、C键调分、D键调秒;该电子钟是单片机AT89S51控制,使用芯片中的定时器0方式1实现定时功能;P0口输出段控码、P2口输出位控码控制数码管显示;该电子钟共使用两个4位一体数码管(S02841A-B)显示;系统初始化程序*ORG 0000H AJMP
15、MAIN;转到系统初始化程序 ORG 000BH AJMP PITO;转到定时器0中断服务程序 ORG 0100H MAIN: MOV SP, #60H;确立堆栈区 MOV TMOD, #01H;设定定时器0为工作方式1 MOV TL0, #0DCH;装计数器初值 MOV TH0, #0BH CLR 21H.0 CLR TR0H;TR0置“0”,定时关闭 SETB EAH;EA置“1”,中断总允许 SETB ET0H ;ET0置“1”,定时器0中断 允许 MOV 30H, #10H;循环次数 MOV 7EH, #0AH;P.点显示初始化 MOV R0, #79H MOV R1, #05H PP
16、: MOV R0, #0BH INC R0 DJNZ R1, PP MOV R0, #31H;时、分、秒值存储单元清零 MOV R1, #06H Q00: MOV R0, #00H INC R0 DJNZ R1, Q00;监控程序* LOOP: LCALL DIR;调显示子程序 LCALL KEY;调键扫描子程序 LOOP1: JB 20H.0, KEYA ;A键是否按下,是跳转到A键功能程序 JB 20H.1, KEYB ;B键是否按下,是跳转到B键功能程序 JB 20H.2, KEYC ;C键是否按下,是跳转到C键功能程序JB 20H.3, KEYD ;D键是否按下,是跳转到D键功能程序
17、LCALL DIR LJMP LOOP;跳转到监控程序;A键功能子程序* KEYA: CPL TR0H ;开启/关闭定时器 SETB 21H.0 AJMP LOOP ;返回;B键功能子程序* KEYB: JB TR0H, KEYBO ;定时器是否运行,是跳转 JNB 21H.0, KEYBOO MOV R0, #36H ;时值存储单元地址送R0 LCALL DAAD1 ;调加1子程序 MOV A, R3 ;时值加1后的值送累加器A XRL A, #24H JNZ KEYBO ;时值是否到24时,否返回 LCALL CLR0 ;时值存储单元清零 KEYBO: MOV 7DH, 35H MOV 7
18、EH, 36H KEYBOO: LJMP LOOP ;返回监控程序;C键功能子程序* KEYC: JB 8CH, KEYCO ;定时器是否运行,否跳转 JNB 21H.0, KEYCOO MOV R0, #34H ;分值存储单元地址送R0 LCALL DAAD1 ;调加1子程序 MOV A, R3 ;分值加1后的值送累加器A XRL A, #60H JNZ KEYCO ;分值是否到60分,否返回 LCALL CLR0 ;分值存储单元清零 KEYCO: MOV 7CH, 34H MOV 7BH, 33H KEYCOO: LJMP LOOP ;返回监控程序;D键功能子程序* KEYD: JB 8C
19、H, KEYDO ;定时器是否运行,否跳转 JNB 21H.0, KEYDOO MOV R0, #32H ;秒值存储单元地址送R0 LCALL DAAD1 ;调加1子程序 MOV A, R3 ;秒值加1后的值送R0 XRL A, #60H JNZ KEYDO;秒值是否到60秒,否返回 LCALL CLR0;秒值存储单元清0 KEYDO: MOV 79H, 31H MOV 7AH, 32H KEYDOO: LJMP LOOP;返回监控程序;中断服务程序* PITO: PUSH PSW;中断服务程序,现场保护 PUSH A SETB RS0;选第三组通用寄存器 SETB RS1 MOV TL0,
20、#0DCH;计数器重新加载 MOV TH0, #0BH MOV A, 30H;循环次数减1 DEC A MOV 30H, A JNZ RETO;不满16次,转RET0返回 MOV 30H, #10H;满16次开始计时操作 MOV R0, #32H;秒显示单元地址 ACALL DAAD1;秒加1 MOV A, R3;加1后秒值在R3中 XRL A, #60H;判是否到60秒 JNZ RETO;不到转RET0返回 ACALL CLR0;到60秒显示单元清0 MOV R0, #34H;分显示单元地址 ACALL DAAD1;分加1 MOV A, R3;加1后分值在R3中 XRL A, #60H;判是
21、否到60分 JNZ RETO;不到转RET0返回 ACALL CLR0;到60分显示单元清0 MOV R0, #36H;时显示单元地址 ACALL DAAD1;时加1 MOV A, R3;加1后时值在R3中 XRL A, #24H;判是否到24时 JNZ RETO;不到转RET0返回 ACALL CLR0;到24时显示单元清0 RETO: CLR RS0;返回第0组通用寄存器 CLR RS1 POP A;现场恢复 POP PSW MOV 79H, 31H;时、分、秒值放缓冲区 MOV 7AH, 32H MOV 7BH, 33H MOV 7CH, 34H MOV 7DH, 35H MOV 7EH
22、, 36H RETI ;中断返回;加1子程序* DAAD1: MOV A, R0 ;加1子程序,十位送A DEC R0 SWAP A;十位数占高4位 ORL A, R0;个位数占低4位 ADD A, #01H;加1 DA A;十进制调整 MOV R3, A;全值暂存R3中 ANL A, #0FH;屏蔽十位数,取出个位数 MOV R0, A;个位值送显示缓冲单元 MOV A, R3 INC R0 ANL A, #0F0H;屏蔽个位数取出十位数 SWAP A;使十位数占低四位 MOV R0, A;十位数送缓冲单元 RET;返回 CLR0: CLR A;清缓冲单元子程序 MOV R0, A;十位缓冲
23、单元清“0” DEC R0 MOV R0, A;个位数缓冲单元清“0” RET;返回 ;键盘扫描子程序* KEY: LCALL KEYCHULI;调键值处理子程序 JZ EXIT;没有键按下转到返回 LCALL DIR LCALL DIR;调显示去抖动 LCALL KEYCHULI;调键值处理子程序 JZ EXIT;没有键按下转到返回 MOV B, 20H;保存键值 KEYSF: LCALL KEYCHULI;调键值处理子程序 JZ KEY1;键释放,转到恢复键值 LCALL DIR;调显示子程序延时 AJMP KEYSF;等到键释放 KEY1: MOV 20H, B;键值送20H单元保存 E
24、XIT: RET;返回 KEYCHULI: PUSH PSW;保护现场 CLR RS1;改变寄存器组号 SETB RS0 MOV P1, #0FFH;先向P1口写1 MOV A, P1;P1口值送累加器A CPL A;A值取反 ANL A, #0FH;保存P1口的低4位 MOV 20H, A;A值送20H保存 CLR RS1;改变寄存器组号 CLR RS0 POP PSW;恢复现场 RET;显示子程序* DIR: PUSH PSW ;恢复现场 SETB RS1 ;改变寄存器组号 CLR RS0 MOV R0, #79H;建立显示缓冲区首地址 MOV R3, #0FBH;设置位控码 LD0: M
25、OV P2, R3;送位控码 MOV A, R0;缓冲区值送累加器A DISP1: ADD A, #1BH MOVC A, A+PC;取段控码并送A中 DISP2: MOV P0, A;送段控码 MOV R2, #09H;设置延时循环次数 ACALL DEY;延时点亮 INC R0;缓冲区地址加1 MOV A, R3;位控码送A JNB ACC.1, HERE;是否到最高位,是转到返回 JBACC.5, LD2RL ARL A;不到向显示器高位移位 LD2:RL AMOV R3, A;位控值保存到R4中 AJMP LD0;继续扫描 HERE: CLR RS0;改变寄存器组号 CLR RS1 P
26、OP PSW;恢复现场 RET;返回 DBB: DB 0C0H DB 0F9H DB 0A4H DB 0B0H DB 99H DB 92H DB 82H DB 0F8H DB 80H DB 90H DB 0CH DB 0FFH ;延时子程序*DEY: PUSH 12HDEY0: PUSH 12HDEY1: PUSH 12HDEY2: DJNZ R2, DEY2 POP 12H DJNZ R2, DEY1 POP 12H DJNZ R2, DEY0 POP 12H DJNZ R2, DEY RET END9.误差分析在上面的章节中已经介绍过,本电子钟设计是使用单片机的定时/计数器0在工作方式1下
27、定时62.5ms,根据定时时间和单片机最小系统的时钟周期(1s)使定时/计数器0重复中断16次就是一秒的时间了。定时/计数器0每产生一个中断就定时62.5ms,当产生一次中断后,定时/计数器0并没有马上被赋予原来产生62.5ms的初值,而是在中断服务程序中重新赋的初值,因而使用定时/计数器实现电子钟的运行存在着一定的误差。一个62.5ms产生后,到下一个62.5ms开始计数,中间单片机要执行电子钟程序中的指令如下所示:ORG 000BH AJMP PITO;转到定时器0中断服务程序;中断服务程序* PITO: PUSH PSW;中断服务程序,现场保护 PUSH A SETB RS0;选第三组通
28、用寄存器 SETB RS1 MOV TL0, #0DCH;计数器重新加载 MOV TH0, #0BH 定时/计数器0产生中断后,由硬件自动转到定时/计数器0的中断服务区(000BH 001BH),使用一条跳转指令转到存放在其他地方的中断服务程序,只要计算出从中断服务区开始执行的跳转指令AJMP PITO到定时/计数器0重新赋值完毕MOV TH0, #0BH之间的所有的指令所占的机器周期再乘上机器周期所得的时间就是相邻的两个62.5ms之间的时间间隔。假设时间间隔为T,所有的指令所占的机器周期之和为P,因为本次设计使用的晶振频率为12Mhz,因此一个机器周期的时间Time为: Time = 121/12Mhz Time = 1s所以,时间间隔为T的计算公式为: T = PTime通过查汇编语言指令周期表,计算出P = 10,即以上所有指令占10个机器周期,那么时间间隔T为: T = PTimeT = 101sT = 10s 定时/计数器0定时16个62.5ms是一秒,因此秒值加1比实际理想的秒加1要慢一段时间Ts,Ts 的值为16倍的T再加上下面的电子钟要执行的电子钟程序中的指令所占的机器周期P1, PITO: ;中断服务程序,现场保护 MOV