单片机课程设计电子时钟2968502658Word文档下载推荐.docx
《单片机课程设计电子时钟2968502658Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子时钟2968502658Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。
2.1系统的电路原理
(1)系统以STC89C52单片机为本电路的核心元件,通过单片机的P0.0~P0.7引脚和A102J排阻加上拉电压来驱动七段显示器段显示数字。
(2)通过单片机的P2.2~P2.7引脚连接A103J排阻拉升电压信号,控制共阴极七段显示器连通接地来循环点亮6位七段显示器。
(3)在七段显示器供电的同时由P0脚驱动显示不同数字。
根据人眼的视觉暂留特点,调整延迟时间使所观察到时间数字是稳定的数字。
(4)系统使用了YXDZ蜂鸣器,通过单片机P3.0引脚连接8550PNP三极管推动发声。
(5)电路通过4个按键连接单片机P1.0~P1.3引脚低电平控制系统功能设置。
(6)单片机的复位电路,采用传统上电复位,通过Reset按键控制。
(7)系统通过一个发光二极管指示电路供电是或正常。
2.2电原理图
图1控制电路
2.3各控制按钮控制功能说明
系统接通电源后指示灯LED亮,程序执行后工作,蜂鸣器发出两声响声,七段显示器显示“000000”,表示程序开始执行,然后显示现在时间,按下操作键K1~K4动作如下:
(1)按操作键K1,进入“设置现在时间”模式后,操作键功能如下:
Ø
操作键K1:
当前区域加1。
操作键K2:
当前区域减1。
操作键K3:
分、时区域切换。
操作键K4:
设置完成,退出。
(2)按操作键K2,进入“显示、设置闹铃时间”模式后,操作键功能如下:
当前闹铃区域加1。
当前闹铃区域减1。
分、时区域切换
第一次进入第二组,第二次为退出。
(3)按操作键K3:
进入“秒表”模式后,操作键功能如下:
启动秒表。
停止秒表。
清零。
退出。
(4)按操作键K4:
在响铃时关闭闹钟自动退出,不是响铃则进入“设置闹铃的开关”模式后,操作键功能如下:
启动当前闹铃。
停止当前闹铃。
切换闹铃组。
(5)按操作键Reset:
复位键,系统重启。
3.软件设计
3.1资源分配表和程序流程图
表一程序内存资源分配表
内存地址
变量名称
作用说明
20H
存放50毫秒计时
21H
存放0.5秒计时
22H
SECON
存放1秒计时
23H
MIN
存放1分计时
24H
HOUR
存放1小时计时
25H
用于中断1(#6H)
26H
用于显示中的闪烁
27H.0
闹钟标志位
27H.1
允许响铃
27H.2
用于标志分、秒(1为秒),闹钟功能时也一样
27H.3
闹钟总开关(1为开)
27H.4
用于闪烁标志
27H.5
用于闪烁
27H.6
秒表标志
27H.7
两组闹钟的标志位,默认值为0
28H-29H
用于保存闪烁时的调时区地址
30H-35H
存放调时区地址
36H
DISP
用于存放要显示的首字(例如秒)
37H-39H
第一组闹钟的时分
40H
SP
栈底
50H-52H
秒表
53H-55H
第二组闹钟的时分
56H
存放闹钟调分地址
57H
存放闹钟调时地址
2AH.0
闹钟组的切换标志(默认值为0)
2AH.1
切换(默认值为0)
2AH.2
闹钟第二组开关(默认值为0)
表二芯片端口资源分配表
芯片端口
P1.0
K1
操作键K1
P1.1
K2
操作键K2
P1.2
K3
操作键K3
P1.3
K4
操作键K4
P1.7
SPK
压电喇叭控制信号
P0
七段显示器数数字形状控制
P2.2
控制时间小时的十位七段显示器亮灭
P2.3
控制时间小时的个位七段显示器亮灭
P2.4
控制时间分钟的十位七段显示器亮灭
P2.5
控制时间分钟的个位七段显示器亮灭
P2.6
控制时间秒钟的十位七段显示器亮灭
P2.7
控制时间秒钟的个位七段显示器亮灭
P3.0
BELL
蜂鸣器
P3.1
LED半秒闪烁
P3.2
LED显示第一组闹钟是否开启
P3.3
LED显示第二组闹钟是否开启
表三寄存器资源分配表
组
寄存器
第
R0
存放秒显示地址
R1
显示首址
R2
#06H
R3
#0FEH
R4
#3H
R6、R7
延时初始值
1
用于keyB、C
R5
用于中断
图2主程序控制流程图
①
②
③
④
中断程序T0
中断程序T1
3.2源程序清单
本系统程序清单如下:
;
---------------------------------------------------------------
8052CLOCKWITHSEGX6CLOCK+2ALARM+TIMER+SW
时钟+2闹钟+响铃+秒表
89C52ASMUSE:
Keil
----------------------------------------------程序功能说明---
-->
K1:
设置现在时间
-->
当前单元加1
K2:
当前单元减1
K3:
切换单元区
K4:
OK
显示和设置闹铃时间,2个闹铃
切换闹铃组,第二次为OK
设置秒表
秒表启动
秒表暂停
秒表清零
设置闹铃开关(当真正闹铃时停掉闹钟并退出)
当前闹铃组开
当前闹铃组关
切换闹组
KEY1EQUP1.0;
调时间调分再调时
KEY2EQUP1.1
KEY3EQUP1.2
KEY4EQUP1.3
SECONEQU22H;
时钟的秒
MINEQU23H
HOUREQU24H
DISPEQU36H;
显示的首地址存放
BELLBITP3.0
ORG0000H
LJMPSTART
ORG000BH
LJMPT0_INT
ORG001BH
LJMPT1_INT
ORG0100H
START:
MOV20H,#00H
MOV21H,#00H;
0.5秒计时
MOV22H,#00H;
1秒计时
MOV23H,#00H;
1分计时
MOV24H,#00H;
1h计时
MOV38H,#01H;
闹钟分
MOV39H,#00H;
闹钟时
MOV37H,#101;
第一组闹钟的首字节显示"
-1"
MOV53H,#102;
第二组闹铃的首字节显示”-2“
MOV25H,#6H;
中断1,50ms*6=0.3s闪烁一次
MOVTMOD,#11H
MOVTL1,#0B0H
MOVTH1,#3CH
MOVTL0,#0B0H
MOVTH0,#3CH
SETBET0
SETBET1
SETBEA
SETBTR0
MOVSP,#40H
*********主程序*********
MAIN:
MOVDISP,#SECON
LCALLDISPLAY
LCALLKEYA
LCALLKEYB
LCALLKEYC
LCALLKEYD
SJMPMAIN
/*数码管显示*/
DISPLAY:
PUSHPSW
MOVPSW,#08H;
用第二组寄存器
MOVR0,DISP
MOVR1,#30H
MOVR4,#03H;
秒分时
LOOP0:
MOVA,@R0
MOVB,#10
DIVAB
MOV@R1,B
INCR1
MOV@R1,A
INCR0
DJNZR4,LOOP0
DISKEY:
MOVR1,#30H;
显示缓冲区首址
MOVR2,#06H
MOVR3,#0FEH
CLR27H.5
MOV29H,28H
PLAY:
MOVA,@R1
MOVDPTR,#TABLE
MOVCA,@A+DPTR
;
***********闪烁用
JNB27H.4,WEN;
在调时时用作熄灭,1为开
MOV26H,A
MOVA,R1
CJNEA,29H,WEN1
JB27H.5,LPPC1
INC29H
SETB27H.5
LPPC1:
CLRA
SJMPWEN
WEN1:
MOVA,26H
***********
WEN:
MOVP0,A
MOVP2,R3
LCALLDELAY
MOVA,R3
RLA
MOVR3,A
DJNZR2,PLAY
POPPSW
RET
DELAY:
MOVR6,#4
D1:
MOVR7,#250
D0:
DJNZR7,D0
DJNZR6,D1
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H
/*中断T0处理*/
T0_INT:
PUSHACC
INC20H
MOVA,20H
CJNEA,#10,EXIT
JNB27H.3,LQQ1
SJMPL