资源描述
四川信息职业技术学院毕业设计说明书(论文)
目 录
绪 论 2
摘 要 3
第1章 总体设计方案 4
1.1 数字电子钟的电路概述 4
1.2 电路的设计方案 4
1.3 总体简易设计电路图 5
第2章 系统的硬件设计 6
2.1 系统的硬件构成及功能 6
2.2 单元电路的分析与设计 6
2.2.1 AT89C51单片机及其引脚说明 6
2.2.2 晶体振荡器 10
2.2.3 LED数码管 10
2.2.4 74LS373的功能及引脚说明 12
第3章 系统的软件设计 15
3.1 软件编程要点 15
3.2 项目程序流程图 15
3.2 项目的源程序 18
第4章 系统调试 27
4.1常用调试工具 27
4.1.1 keil软件 27
4.1.2 Proteus软件 28
4.1.3 系统调试 28
第5章 总结 29
附录 整机电路图 30
参考资料 31
绪 论
在信息技术急速发展的今天,计算机科学日新月异。而单片机作为计算机科学的一个分支,在微机控制领域得到长足的发展。随着单片机的发展与科学技术的提高,单片机已经成为人类生产生活中不可缺少的工具。现在,单片机的应用已经渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置、飞机上各种仪表的控制、计算机的网络通讯与数据传输、工业自动化过程的实时控制和数据处理、广泛使用的各种智能IC卡、民用豪华轿车的安全保障系统、录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。
单片机要解决的问题多数是仍是老问题,新颖之处是比以前用较少的元件。尤其是设计逻辑关系复杂的控制系统,过去用通用的逻辑门集成电路芯片将需要几十片甚至上百片,而现在只用几片就能够实现,而且方便灵活,做设计修改或改动功能时,只消改写软件原文件重写芯片,免去了在硬件线路上大动干戈的苦差事。大连减少芯片个数主要是靠单片机的可编程性和高度集成化。使开发周期更短,制造成本更低,用电更省和可靠性更高。要求用各种逻辑门芯片实现的逻辑电路,可以用一片单片机芯片加上相应的控制软件就可以实现。
摘 要
计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。单片机在这种情况下诞生了。截止今日,单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。
单片计算机即单片微型计算机。(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
本文通过对一个基于单片机的能实现定时,秒表,万年历,闹钟等功能的多功能电子时钟的设计学习,详细介绍了单片机应用中的数据转换显示,液晶显示原理,键盘扫描原理,单片机的定时中断原理。从而达到学习、了解单片机相关指令在各方面的应用。系统由AT89S52、温度检测芯片、时钟芯片、液晶显示器、存储器、稳压电源等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示和实时温度显示。也具有日历计算和时钟、日历的校准,定时时间的设定和闹铃等功能。文章后附有电路原理图、PCB板图和程序清单,以供读者参考。因水平有限,难免有疏落不足之处,敬请老师和同学能给与批评指正。
关键字:定时 秒表 闹钟 万年历
第1章 总体设计方案
1.1 数字电子钟的电路概述
数字钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能和报时功能。因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路、报时电路和振荡器组成。干电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发现胡一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。译码显示电路将“时”、“分”、“秒”计数器的输出状态菁七段显示译码器译码,通过六位LED七段显示器显示出来。整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。
1.2 电路的设计方案
根据功能和指标要求,本系统选用AT89C51单片机为主控机。通过扩展必要的外围接口电路,实现对数字电子钟的设计。具体设计考虑如下:
(1)由于此次所要设计的是简单的数字电子钟显示时、分、秒功能,因此需要用LED数码管作为显示器。
(2)同时用于调时、分的调时电路分别接引脚P1.1、P1.2。
(3)用并行口P0.0-P0.7作为段选码,P2.0-P2.5作为位选码,相应的驱动芯片用74LS373。
(4)同时还需晶体振荡电路,复位电路及中断电路。
该数字电子钟可以完成以下功能:
(1) 能准确的显示0~23小时59分59秒;
(2)具有方便的校时功能;
(3)具有特定作息报时功能;
通过将以上电路组合起来实现本次我所要设计完成的简易数字电子钟及其功能。
1.3 总体简易设计电路图
中断电路
调时电路
单
片
机
AT89C51
复位电路
晶振电路
LED数码显示器
74LS373芯片
图1-1 总体结构框图
工作原理:数字钟一般由振荡器、分频器、计数器、译码器、显示器等几部分组成。这些都是数字电路中应用最广的基本电路。石英晶体振荡器产生的时标信号送到分频器,分频电路将时标信号分成每秒一次的方波秒信号。秒信号送入计数器进行计数,并把累计的结果以“时”、“分”、“秒”的数字显示出来。“秒”的显示由两级计数器和译码器组成的六十进制计数电路实现:“分”的显示电路与“秒”相同,“时”的显示由两级计数器和译码器组成的二十四进制计数电路来实现。所有计时结果由六位数码管显示。
第2章 系统的硬件设计
2.1 系统的硬件构成及功能
根据总体要求分析,数字电子钟的电路系统由秒信号发生器、“时、分、秒”LED数码管显示电路、校时电路、复位电路等组成。秒信号发生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。“时、分、秒”分别通过不同进制的计数器来实现。74LS373将“时、分、秒”的输出状态经LED数码管显示出来。电路是根据计时系统的输出状态产生一脉冲信号。校时电路是用来对“时、分、秒”显示数字进行校对调整的。根据实际情况,硬件的主要单片机为AT89C51芯片,它能够满足数据的采集、控制和数据处理的需求。调试时间时,有相应的调试时、分的按钮。
2.2 单元电路的分析与设计
2.2.1 AT89C51单片机及其引脚说明
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51单片机如图2-1:
图2-1 AT89C51单片机
功能特性及引脚说明:
AT89C51提供以下标准功能:4K字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
1、主电源引脚(2根)
(1) VCC:电源输入,接+5V电源;
(2) GND:接地线。
2、外接晶振引脚(2根)
(1) XTAL1:片内晶振电路的输入端;
(2) XTAL2:片内晶振电路的输出端。
3、控制引脚(4根)
(1) RST/VPP:复位引脚,引脚上出现2个机器周期的高电平将使单片机复位;
(2) ALE/PROG:地址所存允许信号。当访问外部程序存储器或数据存储器时,ALE输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器。ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(/PROG)。如有必要,可通过对特殊功能寄存器区中的8EA单元的DO位置位,可禁止ALE操作。该置位后,只有一条MOVX和MOVC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效;
(3) PSEN:外部存储器读选通讯信号。当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次/PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的/PSEN信号不出现;
(4) EA/VPP:程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
4、可编程输入/输出引脚(32根)
AT89C51单片机有4组8为可编程I/O口,分别为P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。每一根引脚都可以编程,比如用来控制电机、交通灯等,开发产品时就是利用这些可编程引脚来实现我们想要的功能。
(1) P0口:8位双向I/O口线,名称为P0.0-P0.7,作输入口时,应先软件置“ 1”。是一组8位漏双向极开路型I/O口,即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8位TTL逻辑门电路,对端口写’1’可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在FLASH编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻;
(2) P1口:8位准双向I/O口线,名称为P1.0-P1.7,作输入口时,应先软件置“ 1”。是一个带有内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。FLASH编程和程序校验期间,P1接收低8位;
(3) P2口:8位准双向I/O口线,名称为P2.0-P2.7,作输入口时,应先软件置“ 1”。 是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。FLASH编程和程序校验期间,P1接收低8位。在访问外部程序存储器或16位地址的外部地址存储器(例如执行MOVX @DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(例如执行MOVX @R1指令)时,P2口线上的内容(即特殊功能寄存器SFR区中R2寄存器的内容),在整个访问期间不改变。FLASH编程和校验时,P2亦接收高位地址和其他控制信号;
(4) P3口:8位准双向I/O口线,名称为P3.0-P3.7,作输入口时,应先软件置“ 1”。 是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,被外部拉低的P3口将用上拉电阻输出电流。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表2-1所示:
表2-1 P3口的第二功能
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
INT0(外部中断0)
P3.3
INT1(外部中断1)
P3.4
T0(定时/计数器1外部输入)
P3.5
T1(定时/计数器1外部输入)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)
P3口还接收一些用于FLASH闪速存储器编程和程序校验的控制信号。
2.2.2 晶体振荡器
石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整,作用是为系统提供基本的时钟信号。我们在晶体某一方向加一电场,从而在与此垂直的方向产生机械振动,有了机械振动,就会在相应的垂直面上产生电场,从而使机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限制时,才达到最后稳定,这种压电谐振的频率即为晶体振荡器的固有频率。
振荡器特性,XTAL1和XTAL2分别为反向放大器的输入和输出。该反晶体向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。在XTAL1和XTAL2引脚上外接定时元件就能构成自激振荡电路。定时元件通常采用石英晶体和电容组成的并联谐振电路。电容器C1和C2主要起频率微调作用。石英晶体振荡器,如下图2-2:
图2-2石英晶体振荡器
2.2.3 LED数码管
LED数码管示,如下图2-3:
图2-3 LED数码管
LED数码管的性能特点、简易检测及使用注意事项:
1.性能特点
(1) 能在低电压、小电流条件下驱动发光,能与CMOS、ITL电路兼容;
(2) 发光响应时间极短(<0.1µs),高频特性好,单色性好,亮度高;
(3) 体积小,重量轻,抗冲击性能好;
(4) 寿命长,使用寿命在10万小时以上,甚至可达100万小时。成本低。
因此它被广泛用作数字仪器仪表、数控装置、计算机的数显器件。
2.性能简易检测
LED数码管外观要求颜色均匀、无局部变色及无气泡等,在业余条件下可用干电池作进一步检查。现以共阴数码管为例介绍检查方法。
将3伏干电池负极引出线固定接触在LED数码管的公共负极端上,电池正极引出线依次移动接触笔画的正极端。这一根引出线接触到某一笔画的正极端时,那一笔画就应显示出来。用这种简单的方法就可检查出数码管是否有断笔(某笔画不能显示),连笔(某些笔画连在一起),并且可相对比较出不同笔划发光的强弱性能。若检查共阳极数码管,只需将电池正负极引出线对调一下,方法同上。LED数码管每笔画工作电流ILED约在5—10mA之间,若电流过大会损坏数码管,因此必须加限流电阻,其阻值可按下式计算:
R限 =(U。—ULED)/ILED
其中U。为加在LED两端电压,ULED为LED数码管每笔画压降(约2伏)。利用数字万用表的hFE插口能够方便地检查LED数码管的发光情况。选择NPN挡时,C孔带正电,月孔带负电。例如检查LTS547R型共阴极LED数码管时,从E孔插入一根单股细导线,导线引出端接9极(第③脚与第⑧脚在内部连通,可任选一个作为Ө);再从C孔引出一根导线依次接触各笔段电极,可分别显示所对应的笔段。
3.使用注意事项
(1)检查时若发光暗淡,说明器件已老化,发光效率太低。如果显示的笔段残缺不全,说明数码管已局部损坏。如果数码管表面出现明显裂痕、凹哇或是其它的一些损坏皆不能再使用。
(2)对于型号不明、又无管脚排列图的LED数码管,用数字万用表的h距挡可完成下述测试工作:①判定数码管的结构形式(共阴或共阳);②识别管脚;③检查全亮笔段。预先可假定某个电极为公共极,然后根据笔段发光或不发光加以验证。当笔段电极接反或公共极判断错误时,该笔段就不能发光。
2.2.4 74LS373的功能及引脚说明
74LS373芯片图2-4:
图2-4 74LS373芯片
其功能介绍如下:
373为三态输出的八 D 透明锁存器,共有 54/74S373 和 54/74LS373 两种线路
结构型式,其主要电器特性的典型值如下(不同厂家具体值有差别):
型号 tPd PD
54S373/74S373 7ns 525mW
54LS373/74LS373 17ns 120mW
373 的输出端 O0~O7 可直接与总线相连。
当三态允许控制端 OE 为低电平时,O0~O7 为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,O0~O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。
当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为低电平时,O 被锁存在已建立的数据电平。
当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。
引出端符号:
D0~D7 数据输入端
OE 三态允许控制端(低电平有效)
LE 锁存允许端
O0~O7 输出端
表2-2 真值
Dn
LE
OE
On
H
H
L
H
L
H
L
L
X
L
L
Q0
X
X
H
高阻态
复位电路
为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。
复位电路示图,如下图2-5:
图2-5 复位电路图
图中所示为手动电平复位电路,当RESET键按下时,在单片机的复位端将出现一个有300的电阻和1K电阻分压的电平,单片机复位。手动复位用在人们可以进入的机器上,还可以用来紧急停止电路。自动复位用在人们不能进入的机器上。复位必须在所有危险都被清除后发生,通常手动复位更安全。自动复位可以用在人们无法进入的保护通道上。在人们可以进入并紧急停止的保护通道上,只使用手动复位。
第3章 系统的软件设计
3.1 软件编程要点
LED显示器由8个发光二极管组成。它由7个长条形的发光管排成“日”字形。LED显示器有两种不同的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED显示器。此设计采用LED显示采用共阴极的数码管。共阴极和共阳极结构的LED显示器各比划段名和安排位置是相同的。当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。
一个时钟的计时累加,要实现分、时的进位,需用到多种进制,秒、分、时钟的进位是十进制,秒向分进位和分向时进位却是六十进制,而每天又是二十四小时制,所以是二十四进制。从秒到分和从分到时的计时是通过累加与数值比较实现的。设置小时单元、分单元、秒单元,分别存放小时、分、秒的数值。
数字钟的走时可校准,校准时按下调时开关,这里用单片机AT89C51的 P3.2 I/O口外接调时开关确定可以调时,再用P1.3和P1.2两个开关实现时和分钟的校正,每按一次时、分累加1,并进位。调时好后,再将P3.2 I/O口的开关按回原处。当时间需要复位时,按下RST接口的复位键,即可复位,重新设置时间。
3.2 项目程序流程图
1.初始化流程图,如下图3-1:
开 始
初 始 化
设定时器工作方式
开中断、定时器
设定时器值
外部中断
开关
初始化定时器
图3-1 初始化流程图
开 始
开 中 断
消除误差
分或时计数单元内容加1
计时单元清零
调显示程序
检 测
返回
2.INT0中断服务程序流程图见图3-2:
3.T0中断服务流程图见图3-4:
4.显示程序流程图见图3-5:
开 始
开 始
调用折函数
10ms秒单元加1
10ms秒单元=10?
打开段选信号
10ms秒单元清零秒单元加1
秒单元=60?
打开位选信号
秒单元清零,时分单元加1
使第一数码管亮
分单元=60?
P0赋值
分单元清零,时单元加1
关闭段选信号
时单元=24?
关闭位选信号
时单元清零
调控制子程序
返回
调用延时程序
返回
图3-4 T0中断服务流程图 图3-5 显示程序流程图
3.2 项目的源程序
系统的源程序如下:
源程序:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dule=P1^0; //定义段选信号
sbit wele=P1^0; //定义位选信号
sbit key_minu=P1^2; //定义调时开关(分钟)
sbit key_hour=P1^3; //定义调时开关(小时)
sbit key=P3^2; //定义外部中断0开关
uchar aa; //定义定时器中断控制变量
uchar temp_hour; //定义调时开关的暂存变量(分钟)
uchar temp_minu; //定义调时快关的暂存变量(小时)
uchar temp_key; //定义外部中断0的暂存变量
uchar hour;
uchar minu;
uchar sec;
uchar hour_sw; //小时的十位
uchar hour_gw; //小时的个位
uchar minu_sw; //分钟的十位
uchar minu_gw;
uchar sec_gw;
uchar sec_sw;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void init()
{
TMOD=0X01; //设定定时器工作方式为工作方式1
EA=1; //开启总中断位
ET0=1; //开启定时器0中断
TH0=(65536-50000)/256; //给定时器0的高8位装数
TL0=(65536-50000)%256; //给定时器0的低8位装数
TR0=1; //允许计数器0工作
IT0=0; //设置外部中断0的触发方式位低电平触发
EX0=1; //开启外部中断0
PX0=1; //将外部中断0的优先级设位最高
aa=0; //初始化定时器中断0的控制位
hour=0;
minu=0;
sec=0;
key_hour=1; //将开关控制置高电平
key_minu=1; //将开关控制置高电平
key=1; //将开关控制置高电平
temp_key=key; //将开关控制变量的值赋给开关暂存变量
temp_hour=key_hour; //将开关控制变量的值赋给开关暂存变量
temp_minu=key_minu; //将开关控制变量的值赋给开关暂存变量
}
//拆数函数
void number()
{
hour_sw=hour/10;
hour_gw=hour%10;
minu_sw=minu/10;
minu_gw=minu%10;
sec_sw=sec/10;
sec_gw=sec%10;
}
//延时函数 微妙级
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=124;y>0;y--);
}
//显示函数
void display()
{
number(); //调用拆数函数
dule=1; //打开段选信号
wele=1; //打开位选信号
P2=0x3e; //使第一个数码管亮及数码管的位选位
P0=table[hour_sw]; //给数码管的P0口赋值及数码管的段选位
dule=0; //关闭段选信号
wele=0; //关闭位选信号
delay(5); //调用延时函数 延时 5MS
dule=1;
wele=1;
P2=0x3d;
P0=table[hour_gw];
dule=0;
wele=0;
delay(5);
dule=1;
wele=1;
P2=0x3b;
P0=table[minu_sw];
dule=0;
wele=0;
delay(5);
dule=1;
wele=1;
P2=0x37;
P0=table[minu_gw];
dule=0;
wele=0;
delay(5);
dule=1;
wele=1;
P2=0x2f;
P0=table[sec_sw];
dule=0;
wele=0;
delay(5);
dule=1;
wele=1;
P2=0x1f;
P0=table[sec_gw];
dule=0;
wele=0;
delay(5);
}
//主函数
void main()
{
init(); //调用初始化函数
while(1); //死循环,等待中断
}
//定时器中断服务函数
void _TR0_() interrupt 1
{
TH0=(65536-50000)/256; //给定时器0的高8位装初值
TL0=(65536-50000)%256; //给定时器0的低8位装初值 50ms产生一次中断
aa++; //中断控制变量自加
if(aa==20) //判断控制变量是否位20 及计时达到1S
{
aa=0; //清0
sec++; //秒自加1
if(sec==60) //判断是否到60S
{
sec=0; //清0
minu++; //分自加1
if(minu==60) //判断分是否到60'
{
minu=0; //清0
hour++; //小时自加1
if(hour==24)
{
hour=0;
}
}
}
}
display(); //调用显示函数
}
//外部中断0服务函数
void _EX0_() interrupt 0
{
temp_minu=key_minu; //将开关控制变量的值赋给开关暂存变量
temp_hour=key_hour; //将开关控制变量的值赋给开关暂存变量
temp_key=key; //将开关控制变量的值赋给开关暂存变量
while(temp_key==0) //判断中断开关是否按下 若按下执行下面的循环
{
temp_key=key; //将开关控制变量的值赋给开关暂存变量
temp_minu=key_minu; //将开关控制变量的值赋给开关暂存变量
temp_hour=key_hour; //将开关控制变量的值赋给开关暂存变量
display(); //调用显示函数
//调分钟
if(temp_minu==0) //判断调时开关(分钟)是否按下
{
delay(5); //延时5毫秒 软件消除机械误差
temp_minu=key_minu; //将开关控制变量的值赋给开关暂存变量
if(temp_minu==0) //判断调时开关(分钟)是否真的按下
{
display(); //调用显示函数
}
while(temp_minu==0) //松手检测
temp_minu=key_minu; //如果开关一直处于按下状态,则死在这里(死循环)
if(temp_minu==1) // 判断调时开关(分钟)是否松开
{
delay(5); //延时5MS 软件消除机械误差
temp_minu=key_minu; //将开关控制变量的值赋给开关暂存变量
if(temp_minu==1) //判断调时开关(分钟)是否真的松开
{
minu++; //分钟自加1
if(minu==60) //判断分钟是否为60
{
minu=0; //清0
hour++; //小时自加1
if(hour==24)
{
hour=0;
}
}
}
}
}
//调小时
temp_hour=key_hour;
if(temp_hour==0)
{
delay(5);
temp_hour=key_hour;
if(temp_hour==0)
{
display();
}
while(temp_hour==0)
temp_hour=key_hour;
if(temp_hour==1)
{
delay(5);
temp_hour=key_hour;
if(temp_hour==1)
{
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
}
}
第4章 系统调试
调试是一个必不可少的环节,它将会验证你的成果,是否实现了所要完成的功能。系统调试仿真时首先要在使用Keil编译器,把所写的程序进行编译,同时在仿真器里设置生成“.HEX”文件,编译无错误时还要进行Proteus仿真,查看功能是否能够实现。下面就将仿真将会用到的软件进行简单的介绍,并对仿真过程予以简介。
4.1常用调试工具
4.1.1 keil软件
Keil软件是集成调试环境,集成了编缉器、编译器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一目了然,支持ASM(汇编)、C语言,多语言多模块源程序混合调试,在线直接修改、编译、调试源程序,错误指令定位。功能很强大。用于对程序的调试和编辑。
4.1.2 Proteus软件
系统仿真还用到了Proteus软件,可通过仿真可以完全显示出所设计系统的功能,对于程序的调试等有很大的帮助。
首先要新建一个文档是DNS型的找出需要的器件,可以使用搜索功能。接着把各个器件放到合适的位置都要放到蓝色框内。然后根据自己的设计要求连线。把所有的元件都连接好,做出完整的电路图。
4.1.3 系统调试
系统的调试开始是把Keil编译生成的无错误后缀名为.HEX的文件加载到AT89C51单片机中,方法是双击单片机弹出一个对话框,在program file后选择要添加文件,文件要求必须是HEX文件。然后可以点击运行观察现象,当出现错误时,大多都是软件出了问题,经过不断的改进调试,步进电机控制系统设计的软件仿真能达到预期的效果。系统仿真图见附录的整机图。
第5章 总结
在此次的数字电子钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。
同时在此次设计中,发现了很多要注意的地方和需改正的错误,例如:在连接六十进制、二十四进制的进位及七进制的接法中,要求熟悉逻辑电路及其芯片各引脚的功能,那么在电路出错时便能准确地找出错误所在并及时纠正了。在设计电路中,往往是先仿真后连接实物图,但有时候仿真和电路连接并不是完全一致的,例如仿真的连接示意图中,往往没有接高电平的脚以及接低电平的脚,因此在实际的电路连接中往往容易遗漏。在设计电路的连接图中出错的主要原因都是接线和芯片的接触不良以及接线的错误所引起的。因此仿真图和电路连接图还是有一定区别的。
附录 整机电路图
整机电路图如下:
附录 整机图
参考资料
参考文献:
[1]梁宗善•电子技术基础课程设计•华中科技大学出版社,2009
[2]朱定华•电子电路测试与实验•清华大学出版社,2004
[3]朱定华•模拟电子技术基础•清华大学出版社 北京交通大学出版社,2005
[4]朱定华•现代数字电路与逻辑设计•清华大学出版社 北京交通大学出版社,2007
[5]华成英,董诗白•模拟电子技术基础(第四版)•高等教育出版社,2006
[6]阎 石•数字电子技术基础(第五版)•高等教育出版社,2006
[7]康华光•电子技术基础(第五版)模拟部分•高等教育出版社,2006
[8]康华光•电子技术基础(第五版)数字部分•高等教育出版社,2006
[9]陈大钦,罗 杰•电子技术基础实验(第三版).高等教育出版社,2008
[10]罗 杰,谢自
展开阅读全文