单片机 简易电子时钟设计Word文件下载.docx
《单片机 简易电子时钟设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机 简易电子时钟设计Word文件下载.docx(10页珍藏版)》请在冰点文库上搜索。
4).计时稳定度高,可精确校正计时精度。
2总体方案设计
2.1实现时钟计时的基本方法
利用MCS-51系列单片机的可编程定时/计数器、中断系统来实现时钟计数。
(1)计数初值计算:
把定时器设为工作方式1,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒,而100次计数可用软件方法实现。
假设使用T/C0,方式1,50ms定时,fosc=12MHz。
则初值X满足(216-X)×
1/12MHz×
12μs=50000μs
X=15536→0011110010110000→3CB0H
(2)采用中断方式进行溢出次数累计,计满20次为秒计时(1秒);
(3)从秒到分和从分到时的计时是通过累加和数值比较实现。
2.2电子钟的时间显示
电子钟的时钟时间在六位数码管上进行显示,因此,在内部RAM中设置显示缓冲区共8个单元。
LED8
LED7
LED6
LED5
LED4
LED3
LED2
LED1
37H
36H
35H
34H
33H
32H
31H
30H
时十位
时个位
分隔
分十位
分个位
秒十位
秒个位
2.3电子钟的时间调整
电子钟设置3个按键通过程序控制来完成电子钟的时间调整。
A键调整时;
B键调整分;
C键复位
2.4总体方案介绍
2.4.1计时方案
利用AT89S51单片机内部的定时/计数器进行中断时,配合软件延时实现时、分、秒的计时。
该方案节省硬件成本,且能使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。
2.4.2控制方案
AT89S51的P0口和P2口外接由八个LED数码管(LED8~LED1)构成的显示器,用P0口作LED的段码输出口,P2口作八个LED数码管的位控输出线,P1口外接四个按键A、B、C构成键盘电路。
AT89S51是一种低功耗,高性能的CMOS8位微型计算机。
它带有8KFlash可编程和擦除的只读存储器(EPROM),该器件采用ATMEL的高密度非易失性存储器技术制造,与工业上标准的80C51和80C52的指令系统及引脚兼容,片内Flash集成在一个芯片上,可用与解决复杂的问题,且成本较低。
简易电子钟的功能不复杂,采用其现有的I/O便可完成,所以本设计中采用此的设计方案。
3系统硬件电路设计
根据以上的电子时钟的设计要求可以分为以下的几个硬件电路模块:
单片机模块、数码显示模块与按键模块,模块之间的关系图如下面得方框电路图1所示。
图1硬件电路方框图
图2硬件电路图
4、系统软件设计
4.1软件设计分析
在编程上,首先进行了初始化,定义程序的的入口地址以及中断的入口地址,在主程序开始定义了一组固定单元用来储存计数的时.分.秒,在显示初值之后,进入主循环。
在主程序中,对不同的按键进行扫描,实现秒表,时间调整,复位清零等功能,系统总流程图如下图7:
图7系统总体流程图
4.2源程序清单
ORG0000H
MOV30H,#1设置时钟的起始时间12.00.00,分配显示数据内存
MOV31H,#2
MOV32H,#0
MOV33H,#0
MOV34H,#0
MOV35H,#0
MOVTMOD,#01启动计数器
XS0:
SETBTR0使TRO位置1
MOVTH0,#00H计数器置零
MOVTL0,#00H
XS:
MOV40H,#0FEH扫描控制字初值
MOVDPTR,#TAB取段码表地址
MOVP2,40H从P2口输出
MOVA,30H取显示数据到A
MOVCA,@A+DPTR查显示数据对应段码
MOVP0,A段码放入P0中
LCALLYS1MS显示1MS
MOVP0,#0FFHPO端口清零
MOVA,40H取扫描控制字放入A中
RLAA中数据循环左移
MOV40H,A放回40H地址段内
MOVP2,40H
MOVA,31H
ADDA,#10进位显示
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#0FFH
MOVA,40H
RLA
MOV40H,A
MOVA,32H
MOVA,33H
ADDA,#10
MOVCA,@A+DPTR
MOVA,34H
MOVA,35H
JBTF0,JIA如果TF0为1时,则执行JIA,否则顺序执行
JNBP1.0,P100为0则转移到P100
JNBP1.1,P1000为0则转移到P1000
JNBP1.2,P10000为0则转移到P10000
AJMPXS跳转到XS
P100:
MOV30H,#0清零程序
MOV31H,#0
JIA:
CLRTF0TF0清零
MOVA,35H秒单位数据到A
CJNEA,#9,JIA1与9进行比较,大于9就转移到JIA1
MOV35H,0秒个位清零
MOVA,34H秒十位数据到A
CJNEA,#5,JIA10与5进行比较,大于5就转移到JIA10
MOV34H,#0秒十位清零
P10000:
MOVA,33H取分的个位到A
CJNEA,#9,JIA100与9进行比较,大于9就转移到JIA100
MOV33H,#0分的个位清零
MOVA,32H分十位数据到A
CJNEA,#5,JIA1000与5进行比较,大于5就转移到JIA1000
MOV32H,#0分的十位清零
P1000:
MOVA,31H时个位数据到A
CJNEA,#9,JIA10000与9进行比较,大于9就转移到JIA10000
MOV31H,#0时的个位清零
MOVA,30H时十位数据到A
CJNEA,#2,JIA100000与2进行比较,大于5就转移到JIA100000
MOV30H,#0时的十位清零
AJMPXS0转移到XSO
JIA100000:
INC30H加1
AJMPXS0跳转到XS0
JIA10000:
CJNEA,#3,JIAJIA与3进行比较,大于则转移到JIAJIA
MOVA,30H将时的十位放到A
CJNEA,#02,JIAJIA与2进行比较,大于则转移到JIAJIA
MOV30H,#0时段清零
AJMPXS0跳转到XSO
JIAJIA:
INC31H加一
AJMPXS0
JIA1000:
INC32H
AJMPXS0
JIA100:
INC33H
JIA10:
INC34H
JIA1:
INC35H
RET返回
YS1MS:
MOVR6,#9H延时程序
YL1:
MOVR7,#19H
DJNZR7,$
DJNZR6,YL1
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H共阳段码表
DB040H,079H,024H,030H,019H,012H,002H,078H,000H,010H
END
6心得体会