数字时钟.docx
《数字时钟.docx》由会员分享,可在线阅读,更多相关《数字时钟.docx(22页珍藏版)》请在冰点文库上搜索。
数字时钟
2.1AT89TC52单片机的介绍
与单片机产品兼容8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、两个16位定时器/计数器五个中断源、全双工UART串行通道。
AT89S52芯片内部结构简介
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(内部RAM):
数据存储器用于存放变化的数据。
AT89C51中数据存储器的地址空间为256个RAM单元,但其中能作为数据存储器供用户使用的仅有前面128个,后128个被专用寄存器占用。
程序存储器(内部ROM):
程序存储器用于存放程序和固定不变的常数等。
通常采用只读存储器,且其又多种类型,在89系列单片机中全部采用闪存。
AT89C51内部配置了4KB闪存。
定时/计数器(ROM):
定时/计数器用于实现定时和计数功能。
AT89C51共有2个16位定时/计数器。
并行输入输出(I/O)口:
AT89TC52共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
每个口都由1个锁存器和一个驱动器组成。
它们主要用于实现与外部设备中数据的并行输入与输出,有些I/O口还有其他功能。
全双工串行口:
AT89C52内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
时钟电路:
时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。
中断系统:
中断系统的作用主要是对外部或内部的终端请求进行管理与处理。
AT89C52共有5个中断源,其中又2个外部中断源和3个内部中断源。
主要引脚功能:
图2.1AT89C52引脚图
VCC:
电源电压
GND:
地
P0口:
P0口是一组8位漏极开路型双向I/0口,也即地址/数据总线复用口。
作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
P1口:
Pl是一个带内部上拉电阻的8位双向I/O口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
Flash编程和程序校验期间,Pl接收低8位地址。
表2.1具有第二功能的P1口引脚
端口引脚
第二功能:
P1.5
MOSI(用于ISP编程)
P1.6
MOSI(用于ISP编程)
P1.7
MOSI(用于ISP编程)
P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@Ri指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。
Flash编程或校验时,P2亦接收高位地址和其它控制信号。
P3口:
P3口是一组带有内部上拉电阻的8位双向I/0口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“l”时,它们被内部上拉电阻拉高并可作为输入端口。
作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/0口线外,更重要的用途是它的第二功能,如下表所示:
表2.2具有第二功能的P1口引脚
端口引脚
第二功能:
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外中断0)
P3.3
/INT1(外中断1)
P3.4
T0(定时/计数器0外部输入)
P3.5
T1(定时/计数器1外部输入)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD外部数据存储器读选通)
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRT0位(地址8EH)可打开或关闭该功能。
DISRT0位缺省为RESET输出高电平打开状态。
ALE/
:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
程序储存允许(
)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次
有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的
信号。
/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。
F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。
XTAL1:
振荡器反相放大器及内部时钟发生器的输入端。
2.2数码管的介绍
数码管结构
数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0~9,字符A~F、H、L、P、R、U、Y等符号及小数点“.”。
数码管又分为共阴极和共阳极两种类型。
数码管工作原理
共阳极数码管中8个发光二极管的阳极(二极管正端)连接一起,即为共阳极接法,简称共阳数码管。
通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。
当某段驱动电路的输入端为低电平时,该端所连接的字段导通并点亮。
根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
共阴极数码管中8个发光二极管的阴极(二极管负端)连接在一起,即为共阴极接法,简称共阴数码管。
通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。
同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
图2.27段数码管
单片机LED共阳极段码表【0-F】
DB0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H[0-7]
DB80H,90H,88H,83H,0c6H,0a1H,86H,8eH[8-F]
单片机LED共阴极段码表【0-F】
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H[0-7]
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H,76H[8-F]
为了满足某些特殊用户需要有时也会用到以下特别字符的段码表
单片机LED共阳极段码表【HLPRUY-.熄灭】
DB89H,0C7H,8CH,0CEH,0C1H,91H,0BFH,7FH,0FFH[HLPRUY-.熄灭]
单片机LED共阴极段码表【HLPRUY-.熄灭】
DB76H,38H,73H,31H,3EH,6EH,40H,80H,00H[HLPRUY-.熄灭]
2.374LS245的介绍
74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。
74LS245还具有双向三态功能,既可以输出,也可以输入数据。
当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。
当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)DIR=“1”,信号由A向B传输;(发送)当CE为高电平时,A、B均为高阻态。
由于P2口始终输出地址的高8位,接口时74LS245的三态控制端1G和2G接地,P2口与驱动器输入线对应相连。
P0口与74LS245输入端相连,E端接地,保证数据线畅通。
8051的/RD和/PSEN相与后接DIR,使得RD且PSEN有效时,74LS245输入(P0.1←D1),其它时间处于输出(P0.1→D1)。
图2.374LS245引脚图
2.4MAX232的介绍
MAX232芯片是美信(MAXIM)公司专为RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。
图2.4MAX引脚图
引脚介绍:
第一部分是电荷泵电路。
由1、2、3、4、5、6脚和4只电容构成。
功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。
由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。
8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。
15脚GND、16脚VCC(+5v)。
2.5单片机硬件开发工具Proteus
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
它的元器件、连接线路等却和传统的单片机实验硬件高度对应。
这在相当程度上替代了传统的单片机实验教学的功能,例:
元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。
随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。
它具有设计灵活,结果、过程的统一的特点。
可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。
相信在单片机开发应用中PROTEUS也能茯得愈来愈广泛的应用。
2.6单片机软件开发工具Keil
Keil是德国KeiSoftware公司开封的8051系列单片机的软件开发平台。
由于内嵌多种符合当前工业标准的开发工具,可以完成从工程建立和管理、编译、链接、目标代码的生成、软件仿真及硬件仿真等完整的开发流程,尤其是C编译工具在产生代码的准确性和效率方面达到了很好的水平,而且可以附加灵活的控制选项,非常适合大型项目的开发。
它可以实现与Proteus的联调,实现基本电路的仿真,为一些基本的设计课题提供了保证[5]。
3硬件设计
3.1MCS—51中断系统
MCS-51单片机的中断系统,是8位单片机中功能最强的一种。
80C51提供了5个中断源。
1、外部中断0(P3.2):
可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。
当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
2、外部中断1(P3.3):
可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。
当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。
3、TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。
当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
4、TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。
当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。
当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。
80C51的中断请求分别由特殊功能寄存器TCON和SCON的相应位锁存。
TCON为内部定时器/计数器T0、T1的控制寄存器,其字节地址为88H,位地址为88H~8FH。
图3.1TCON格式
图中各位的作用如下:
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
(低电平有效)。
当IT0=1时,为边沿触发方式。
(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
SCON用于控制和监视窜行口的工作状态。
其字节地址为98H,位地址为98H~9FH。
图3.2SCON格式
RI(SCON.0):
串行口接收中断标志位。
当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。
RI必须由软件清除。
TI(SCON.1):
串行口发送中断标志位。
当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。
每发送完一个串行帧,由硬件置位TI。
CPU响应中断时,不能自动清除TI,TI必须由软件清除。
MCS-51单片机有5个(8052有6个)中断源,为了使每个中断源都能独立地被允许或禁止,以便用户能灵活使用,它在每个中断信号的通道中设置了一个中断屏蔽触发器。
只有该触发器无效,它所对应的中断请求信号才能进入CPU,即此类型中断开放。
否则,即使其对应的中断标志位置1,CPU也不会响应中断,即此类型中断被屏蔽了。
同时CPU内还设置了一个中断允许触发器,它控制CPU能否响应中断。
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
图3.3IE格式
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断1允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA(IE.7),CPU中断允许(总允许)位。
8051单片机有两个中断优先级,即可实现二级中断服务嵌套。
每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的。
图3.4IP格式
PX0(IP.0):
外部中断0优先级设定位;
PT0(IP.1):
定时/计数器T0优先级设定位;
PX1(IP.2):
外部中断1优先级设定位;
PT1(IP.3):
定时/计数器T1优先级设定位;
PS(IP.4):
串行口优先级设定位;
PT2(IP.5):
定时/计数器T2优先级设定位。
同一优先级中的中断申请不止一个时,则有中断优先权排队问题。
同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如图所示:
图3.5同级内第二优先级次序
3.2定时计数器工作原理
51单片机内部有2个16位的定时器/计数器,其实质是加1计数器(16位),由高8位和低8位两个寄存器组成。
TMOD是定时器/计数器的工作方式寄存器,确定工作方式和功能;TCON是定时器/计数器的控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
单片机中的定时器和计数器是复用的,实质都是加1计数器,输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来(定时器);一个是T0或T1引脚输入的外部脉冲源(计数器)。
每来一个脉冲,计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。
如果定时器/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。
计数值N乘以机器周期Tcy就是定时时间t。
设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。
在每个机器周期的S5P2期间采样T0、T1引脚电平。
当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。
由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。
当晶振频率为12MHz时,机器周期为1s,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2s。
定时器/计数器工作方式寄存器TMOD用于选择定时器的工作方式,它的高4位控制定时器T1,低4位控制定时器T0。
TMOD中各位的定义如下:
图3.6TMOD各位定义
M1M0工作方式控制位,两位可组合成4种工作方式。
表3.1工作方式选择表
M1M0
方式
说明
00
0
13位定时器(TH的8位和TL的低5位)(很少使用)
01
1
16位定时器/计数器
10
2
自动重装入初值的8位计数器
11
3
T0分成两个独立的8位计数器,T1在方式3时停止工作(很少使用)
C/T计数器方式或定时器方式选择位若C/T=1时,为计数器方式;C/T=0时,为定时器方式。
GATE定时器/计数器运行门控标志位用于控制定时器/计数器的启动是否受外
部中断请求信号的影响。
GATE=0时,与外部中断无关,由TCON寄存器中的TRx位控制启动。
只要用软件使TCON中的TR0或TR1为1,就可以启动定时器/计数器0或1工作;GATE=1时,由控制位TRx和引脚共同控制启动,只有在没有外部中断请求信号的情况下(即外部中断引脚=1时),才允许定时器启动,用软件使TR0或TR1为1,启动定时器/计数器0或1工作。
特殊功能寄存器TCON用于控制定时器的操作机对定时器中断的控制。
TF0、TF1分别是定时器/计数器T0、T1的溢出标志位,加法计数器计满溢出时置1,申请中断,在中断响应后自动复0。
TF产生的中断申请是否被接受,还需要由中断是否开放来决定。
TR1、TR0分别是定时器/计数器T1、T0的运行控制位,通过软件置1后,定时器/计数器才开始工作,在系统复位时被清0。
图3.7电子钟设计原理图
MCS-51单片机芯片内部设有一个反向放大器所构成的振荡电路,XTAL1和XTAL2分别为振荡电路的输出端和输入端,与C2、C3、X1构成了内部时钟电路。
C1、R1、R2、复位1构成了复位电路。
80C51的P2口与74LS245的A0~A7对应相连。
74LS245的B0~B7口分别与四个数码管对应相连,应用单片机的中断和定时功能让后两个数码管显示分钟并让前两位显示时钟。
P3^2、P3^3、P3^5、P3^6分别四个数码管的片选,这样分钟于时钟可以动态的显示。
P3^4作发光二极管的片选,让它实现一秒亮灭。
P3^0、P3^1与MAX232相连组成串口。
P1^0、P1^1、P1^2分别作为调时、调分、复位。
4软件设计
4.1流程图
电子中的程序设计分为主程序与中断程序。
主程序主要实现程序的初始化和时钟、分钟的显示,让他进入死循环等待中断,。
依照这一思路主程序的流程图如下:
图4.1主程序流程图
中断程序里主要实现在准确的时间里分钟、时钟的增加,还有调时、调分、复位各键的设置。
具体的流程图如下:
图4.2中断流程图
图4.3调小时
图4.4调分钟
图4.5复位
附录:
电子钟程序
#include
#defineuintunsignedint
#defineucharunsignedchar
sbita=P2^0;
sbitb=P2^1;
sbitn=P2^2;
sbitc=P2^3;
sbitd=P2^4;
sbitm=P1^2;
sbitk=P1^0;
sbitj=P1^1;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uintsecond=0;uintmin=0;uchary;
uinthour=0;
uintflag=0;
uintGGG=0;
voiddelay(uintz)
{uinti,j;
for(i=0;ifor(j=0;j<9;j++);
}
voidmain()
{
ucharupmin,lowmin,uphour,lowhour;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while
(1)
{
upmin=min/10;
lowmin=min%10;
uphour=hour/10;
lowhour=hour%10;
a=1;b=1;
c=0;
d=1;
P0=table[upmin];
delay(4);
a=1;b=1;
c=1;
d=0;
P0=table[lowmin];
delay(3);
a=0;b=1;
c=1;
d=1;
P0=table[uphour];
delay
(2);
a=1;b=0;
c=1;
d=1;
P0=table[lowhour];
delay
(1);
}}
voidtemer0()interrupt1using1
{
GGG++;
if(