基于51单片机的时钟电路设计概要Word下载.docx
《基于51单片机的时钟电路设计概要Word下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的时钟电路设计概要Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
4.2.2主程序18
4.2.31秒计时程序18
4.2.4闪动调时程序20
4.2.5加1子程序21
4.2.6清零程序22
4.2.7时钟调整程序22
4.2.8显示程序24
4.2.9延时程序25
参考文献27
致谢28
第一章、前言
1.1概述
时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。
在单片机的应用系统中,时钟有两个方面的含义:
一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;
二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:
一是用软件实现,即用单片机内部的可编程定时器/计数器来实现;
二是用专门的时钟芯片实现[2]。
由于51系列单片机的内部具有定时器/计数器的功能,因此采用51系列单片机里的AT89S51和LED数码管为核心,加以必要的电路,来构成了一个单片机电子时钟。
1.2研究目的
通过利用MCS-51单片机内部的定时器/计数器功能、中断系统功能、以及外围的按键和LED显示器等部件,设计一个基于单片机的电子时钟。
设计的电子时钟通过数码管显示,并能通过按键对时间进行设置。
第二章、电路涉及单片机概述
2.1单片机的概念
单片机(MCU)可以定义为:
一种把微处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)、输入/输出(I/O)接口电路、定时器/计数器、串行通信接口及中断系统等部件集成在同一块芯片上的,具有完整功能的微型计算机。
这块芯片就是硬件,而软件程序则存放在片内的只读存储器中。
2.2单片机的发展史和发展趋势
2.2.1单片机的发展历史
1974年12月,美国著名的仙童(Fairchild)公司推出了世界上第一台单片机F8。
该机有两块集成电路芯片组成,具有与众不同的指令系统,结构奇特,深受民用电器和仪器仪表领域的欢迎和重视。
从此单片机开始迅速发展,应用范围也在不断扩大,现已成为微型计算机的重要分支。
单片机的发展大致经历了外围集成、总线完善、功能集成、全方位发展等技术发展阶段,至今已走过了四代的历程[3]。
2.2.2单片机的发展趋势
当前,单片机正朝着高性能和多品种方向发展。
预计,单片机将进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方向发展。
2.3单片机的特点
根据其结构形式和所采用的半导体工艺,单片机具有以下主要特点:
(1)性价比高。
(2)集成度高、体积小、可靠性高。
由于单片机将各个功能部件集成在一块芯片上,且内部采用总线结构,减少了各个芯片之间的连线,从而大大提高了单片机的可靠性与抗干扰能力。
(3)控制功能强。
单片机中的指令系统中均有极丰富的转移指令、I/O接口的逻辑操作及位处理功能。
(4)低功耗、低电压,便于生产便携式产品。
(5)外部总线增加了串行总线方式,进一步缩小了体积,简化了结构。
(6)单片机的系统扩展和系统配置较典型、规范,易于构成各种规模的应用系统。
2.4MCS-51单片机的基本结构
2.4.1MCS-51单片机的基本组成
MCS-51单片机的基本组成如图2.1所示。
图2.1MCS-51单片机的基本组成
从图2.1中可以看出,MCS-51单片机内部主要包括以下几部分。
(1)一个8位CPU
MCS-51单片机有一个8位CPU,包括运算器和控制器,并且具有面向控制的处理功能,不仅可以处理字节数据还可以进行位变量的处理,如位处理、查表、状态检测、中断处理等。
(2)数据RAM和特殊功能寄存器SFR
MCS-51单片机片内具有128B的数据RAM,片外最多可以扩展到64KB。
数据RAM用来存储单片机运行期间的工作变量、运算的中间结果、数据暂存和缓冲、标志位等。
(3)内部程序ROM
MCS-51单片机内部具有4KB的程序ROM,片外最多可以扩展到64KB。
可以用来存储用户程序。
(4)两个定时器/计数器
MCS-51单片机内部具有两个16位的定时器/计数器,具有四种工作方式。
可以进行精确地计时,又可以对外部事件进行计数。
(5)四个8位可编程的I/O并行端口
四个8位的I/O并行端口,其中P0口为双向口,P1~P3口为准双向口。
(6)一个串行通信端口
串行口用来进行串行异步通信,与PC机或者多个单片机实现主从通信或者构成多机系统以实现更强的的功能。
(7)中断控制系统
MCS-51单片机具有五个固定的可屏蔽中断源,三个在片内,两个在片外,它们在程序存储器中有各自的固定中断入口地址,由此可以进入中断服务程序。
(8)内部时钟电路
路单片机的时钟信号用来提供单片机内各种微操作的时间基准,有两种方法可以得到时钟信号:
一种是内部振荡方式;
另一种是外部振荡方式。
2.4.2AT89S51单片机的引脚
AT89S51单片机芯片采用40个引脚、双列直插封装(DIP)方式,引脚排列如图2.2所
图2.2MCS-51单片机的引脚排列
第三章、系统设计
3.1设计方法及原理
3.1.1设计方法
(1)电子时钟的显示为XX(时):
XX(分):
XX(秒)
(2)电子时钟的时间可调整,且调整方法为:
按下调整键(S2)的时间小于1秒时(t<
1s),关闭显示。
按下调整键(S2)的时间大于0.5秒时(t>
0.5s)分钟位闪亮,此时按下S2键(t<
0.5s)该个位数值加1,当加到9时,再按下S2键则该个位显示0,分钟十位加1。
继续按下调整键(S2)(t>
0.5s)时钟位闪亮,此时按下S2键(t<
0.5s)该个位数值加1,当加到9时再按下加S2键则该个位显示0,时钟十位加1。
0.5s),返回到正常显示状态。
3.1.2电子时钟原理
在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。
利用定时器和相关软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;
若秒值达到60,则将其清零,并将相应的分字节值加1;
若分值达到60,则清零分字节,并将时字节值加1;
若时值达到24,则将时字节清零。
3.1.3数码管显示原理
数码管的显示采用动态显示。
动态显示就是指轮流的一位一位的点亮各个显示位,对显示器的每一位,采用每隔一段时间点亮一次。
利用人的视觉暂留特点能够看到整个显示,但必须保证扫描速度够快,字符才能不闪烁。
显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。
调整参数可以实现较高稳定度的显示[4]。
因此采用动态显示节省了I/O口,更降低了能量的消耗。
3.2总体设计
3.2.1系统说明
利用单片机(AT89S51)制作电子时钟,由六个LED数码管分别显示小时的十位、小时的个位、分钟的十位、分钟的个位、秒钟的十位、秒钟的个位。
6个PNP管分别控制六个数码管的亮灭,采用一个按键用于时间调整。
3.2.2系统框图
系统框图如图3.1所示。
图3.1系统框图
3.3模块设计
3.3.1电源部分
图3.2电源部分
如图3.2所示,从外部引入4.5V的直流电,为单片机、复位电路提供电源。
3.3.2复位电路
图3.3复位电路
如图3.3所示,复位电路主要由1N4148型的二极管,10UF/16V型的电解电容,104型的瓷片电容,10K的电阻以及按键S1构成,S1接芯片的相应引脚RST,当开关按下时引脚RST为高电平1,断开时引脚为低电平0。
3.3.3数码管的连接电路
图3.4数码管连接电路
图3.4为LED数码管的连接电路,每位的段码线(a,b,c,d,e,f,g,dp)分别与1个8位的锁存器输出相连,由AT89S51控制组合0-9十个数据,如令其显示1则b,c引脚(即2,3引脚)送高电平,此时数码管显示1。
由于各位的段码线并联,8位I/O口输出段码对各个显示位来说都是相同的。
3.3.4控制部分
如图3.5所示。
图3.5控制电路
第四章、软件设计
4.1程序流程图
图4.1描述的是主程序的流程图,程序开始运行,首先初始化定时器的常数,设置好T0中断入口,然后进入一个循环,等待中断T0的到来。
图4.2描述的是一次T0中断的过程。
进入中断,首先现场保护,然后重新设定定时器初值;
然后判断本轮中断的次数是否满20次,如果不是,则还没增加到1秒,如果满20次,然后时间增加1秒,分钟和时钟的变化也按相应规则随之改变。
做完上面操作之后,恢复进入中断前的现场,退出中断,到此一次中断结束。
图4.3描述的是时钟调整的程序的执行过程。
这个过程,根据按键S2的时间去判断执行何种操作。
图4.3时钟调整的程序流程图
4.2源程序
表4.1P1口对应段码及数值
显示
数字
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
16进制代码
dp
g
f
e
d
c
b
a
1
3FH
06H
2
5BH
3
4FH
4
66H
5
6DH
6
7DH
7
07H
8
7FH
9
6FH
4.2.1中断入口程序
ORG0000H;
程序执行开始地址
LJMPSTART;
跳到标号START执行
ORG0003H;
外中断0中断程序入口
RETI;
外中断0中断返回
ORG000BH;
定时器T0中断程序入口
LJMPINTT0;
跳至INTTO执行
ORG0013H;
外中断1中断程序入口
RETI;
外中断1中断返回
ORG001BH;
定时器T1中断程序入口
LJMPINTT1;
跳至INTT1执行
ORG0023H;
串行中断程序入口地址
串行中断程序返回
4.2.2主程序
START:
MOVR0,#70H;
清70H-7AH共11个内存单元
MOVR7,#0BH
CLRP3.7
CLEARDISP:
MOV@R0,#00H
INCR0
DJNZR7,CLEARDISP
MOV20H,#00H;
清20H(标志用)
MOV7AH,#0AH;
放入"
熄灭符"
数据
MOVTMOD,#11H;
设T0、T1为16位定时器
MOVTL0,#0B0H;
50MS定时初值(T0计时用)
MOVTH0,#3CH;
50MS定时初值
MOVTL1,#0B0H;
50MS定时初值(T1闪烁定时用)
MOVTH1,#3CH;
SETBEA;
总中断开放
SETBET0;
允许T0中断
SETBTR0;
开启T0定时器
MOVR4,#14H;
1秒定时用初值(50MS×
20)
START1:
LCALLDISPLAY;
调用显示子程序
JNBP3.7,SETMM1;
P3.7口为0时转时间调整程序
SJMPSTART1;
P3.7口为1时跳回START1
SETMM1:
LJMPSETMM;
转到时间调整程序SETMM
4.2.31秒计时程序
INTT0:
PUSHACC;
累加器入栈保护
PUSHPSW;
状态字入栈保护
CLRET0;
关T0中断允许
CLRTR0;
关闭定时器T0
MOVA,#0B7H;
中断响应时间同步修正
ADDA,TL0;
低8位初值修正
MOVTL0,A;
重装初值(低8位修正值)
MOVA,#3CH;
高8位初值修正
ADDCA,TH0
MOVTH0,A;
重装初值(高8位修正值)
开启定时器T0
DJNZR4,OUTT0;
20次中断未到中断退出
ADDSS:
20次中断到(1秒)重赋初值
MOVR0,#71H;
指向秒计时单元(71H-72H)
ACALLADD1;
调用加1程序(加1秒操作)
MOVA,R3;
秒数据放入A(R3为2位十进制数组合)
CLRC;
清进位标志
CJNEA,#60H,ADDMM
ADDMM:
JCOUTT0;
小于60秒时中断退出
ACALLCLR0;
大于或等于60秒时对秒计时单元清0
MOVR0,#77H;
指向分计时单元(76H-77H)
分计时单元加1分钟
MOVA,R3;
分数据放入A
CJNEA,#60H,ADDHH
ADDHH:
JCOUTT0;
小于60分时中断退出
大于或等于60分时分计时单元清0
MOVR0,#79H;
指向小时计时单(78H-79H)
小时计时单元加1小时
时数据放入A
CJNEA,#24H,HOUR
HOUR:
小于24小时中断退出
大于或等于24小时小时计时单元清0
OUTT0:
MOV72H,76H;
中断退出时将分、时计时单元数据移
MOV73H,77H;
入对应显示单元
MOV74H,78H
MOV75H,79H
POPPSW;
恢复状态字(出栈)
POPACC;
恢复累加器
开放T0中断
RETI;
中断返回
4.2.4闪动调时程序
T1中断服务程序,用作时间调整时调整单元闪烁指示
INTT1:
中断现场保护
PUSHPSW
MOVTL1,#0B0H;
装定时器T1定时初值
MOVTH1,#3CH
DJNZR2,INTT1OUT;
0.3秒未到退出中断(50MS中断6次)
MOVR2,#06H;
重装0.3秒定时用初值
CPL02H;
0.3秒定时到对闪烁标志取反
JB02H,FLASH1;
02H位为1时显示单元"
熄灭"
02H位为0时正常显示
MOV73H,77H
INTT1OUT:
POPPSW;
恢复现场
POPACC
中断退出
FLASH1:
JB01H,FLASH2;
01H位为1时,转小时熄灭控制
MOV72H,7AH;
01H位为0时,"
数据放入分
MOV73H,7AH;
显示单元(72H-73H),将不显示分数据
AJMPINTT1OUT;
转中断退出
FLASH2:
01H位为1时,"
数据放入小时
显示单元(74H-75H),小时数据将不显示
MOV74H,7AH
MOV75H,7AH
4.2.5加1子程序
ADD1:
MOVA,@R0;
取当前计时单元数据到A
DECR0;
指向前一地址
SWAPA;
A中数据高四位与低四位交换
ORLA,@R0;
前一地址中数据放入A中低四位
ADDA,#01H;
A加1操作
DAA;
十进制调整
MOVR3,A;
移入R3寄存器
ANLA,#0FH;
高四位变0
MOV@R0,A;
放回前一地址单元
取回R3中暂存数据
INCR0;
指向当前地址单元
MOV@R0,A;
数据放入当削地址单元中
RET;
子程序返回
4.2.6清零程序
对计时单元清零用
CLR0:
CLRA;
清累加器
清当前地址单元
前一地址单元清0
4.2.7时钟调整程序
当调时按键按下时进入此程序
SETMM:
CLRET0;
关定时器T0中断
CLRTR0;
LCALLDL1S;
调用1秒延时程序
JBP3.7,CLOSEDIS;
键按下时间小于1秒,关闭显示MOVR2,#06H;
进入调时状态,赋闪烁定时初值
SETBET1;
允许T1中断
SETBTR1;
开启定时器T1
SET2:
JNBP3.7,SET1;
P3.7口为0(键未释放),等待
SETB00H;
键释放,分调整闪烁标志置1
SET4:
JBP3.7,SET3;
等待键按下
LCALLDL05S;
有键按下,延时0.5秒
JNBP3.7,SETHH;
按下时间大于0.5秒转调小时状态
MOVR0,#77H;
按下时间小于0.5秒加1分钟操作
LCALLADD1;
调用加1子程序
MOVA,R3;
取调整单元数据
CJNEA,#60H,HHH;
调整单元数据与60比较
HHH:
JCSET4;
调整单元数据小于60转SET4循环
LCALLCLR0;
调整单元数据大于或等于60时清0
AJMPSET4;
跳转到SET4循环
CLOSEDIS:
SETBET0;
省电状态。
开T0中断
SETBTR0;
开启T0定时器(开时钟)
CLOSE:
JBP3.7,CLOSE;
无按键按下,等待。
有键按下,调显示子程序延时削抖
JB