简易数字钟单片机课程方案.docx
《简易数字钟单片机课程方案.docx》由会员分享,可在线阅读,更多相关《简易数字钟单片机课程方案.docx(20页珍藏版)》请在冰豆网上搜索。
简易数字钟单片机课程方案
1系统设计
1.1框图设计
基于AT89S51单片机数字钟由电源电路、单片机主控电路、按键控制电路和蜂鸣器等几部分组成,系统框图如下:
1.2知识点
本工程需要通过学习和查阅资料,了解和掌握以下知识。
1.+5V电源原理及设计。
2.单片机复位电路工作原理及设计。
3.单片机晶振电路工作原理及设计。
4.按键电路的设计。
5.驱动电路74LS04的特性及使用。
6.蜂鸣器及其驱动电路的设计。
7.数码管的特性及其使用。
8.AT89S51单片机引脚。
9.单片机汇编语言及程序设计。
2硬件设计
2.1电路原理
基于AT89S51单片机数字钟电路原理图如附录所示。
按下P1.0口按键,若按下时间小于1S,则进入省电状态<数码管不亮,时钟不停);否则进入调分状态,等待操作,此时计时器停止走动。
当再按下P1.0口按键时,若按键时间小于0.5S,则时间加1min;若按下时间大于0.5S,则进入小时调整状态。
按下P1.1按键时,可进行减1调整。
在小时调整状态下,当按键按下的时间大于0.5S时,退出时间调整状态,时钟从0S开始计时。
在正常时钟状态下,若按下P1.1口按键,则进行时钟/秒表功能的转换,秒表中断计时程序启动,显示地址改为60H,LED将显示秒表计时单元60H-65H中的数据。
按下P1.2口的按键开关,可实现秒表清零、秒表启动、秒表暂停功能;当再按下P1.1口按键时,关闭T1秒表中断计时,显示首址又改为70H,恢复正常时间的显示功能。
2.2元件清单
元件名称
型号
数量
用途
元件名称
型号
数量
用途
单片机
AT89S51
1
控制核心
电阻
10kΩ
4
按键电路
晶振
12MHz
1
晶振电路
按键
4
电容
30pF
2
数码管
8段6位
1
显示电路
电解电容
10uF/10V
1
复位电路
电阻
500Ω
8
电阻
10kΩ
1
电阻
4.7kΩ
1
蜂鸣器及其驱动电路
按键
1
蜂鸣器
DC5V
1
电源
+5V/0.5A
1
提供+5V电源
三极管
9015
1
基于AT89S51单片机数字钟的元件清单如下表。
3软件设计
3.1程序流程图
1.主程序流程图如图1-1所示。
2.秒计时程序。
秒计时由定时器T0完成,流程图如图1-2所示。
3.秒表、调时指示程序。
秒表、调时由定时器T1完成,其流程图如图1-3所示。
3.2程序清单
DISBEGEQU30H
CALBEQUP1.7
TIMCONEQU2FH
ORG0000H
LJMPMAIN
ORG0003H
RETI
ORG000BH
LJMPINTT0
ORG0013H
RETI
ORG001BH
LJMPINTT1
ORG0023H
RETI
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
I_TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DLY1M:
MOVR6,#14H
DL_LOOP:
MOVR7,#19H
DL_LOOP1:
DJNZR7,DL_LOOP1
DJNZR6,DL_LOOP
RET
DLY20M:
CLRCALB
LCALLD_II_PLAY
LCALLD_II_PLAY
LCALLD_II_PLAY
SETBCALB
RET
DL_LOOPS:
LCALLDL05S
LCALLDL05S
RET
DL05S:
MOVR3,#20H
DL05S1:
LCALLD_II_PLAY
DJNZR3,DL05S1
RET
CTIME:
MOVA,#10H/整点报时
MOVB,79H
MULAB
ADDA,78H
MOVTIMCON,A
CLOOP:
LCALLDLY20M
LCALLDL_LOOPS
LCALLDL_LOOPS
LCALLDL_LOOPS
DJNZTIMCON,CLOOP
CLR08H
MAIN:
MOVR0,#00H/主程序
MOVR7,#80H
MLOOP:
MOV@R0,#00H
INCR0
DJNZR7,MLOOP
MOV20H,#00H
MOV7AH,#0AH
MOVTMOD,#11H
MOVTL0,#0B0H
MOVTH0,#3CH
MOVTL1,#0B0H
MOVTH1,#3CH
SETBEA
SETBET0
SETBTR0
MOVR4,#14H
MOVDISBEG,#70H
MLOOP1:
LCALLD_II_PLAY
JNBP1.0,T_SETSC
JNBP1.1,DLY5
JNBP1.2,FUNBT
JNBP1.3,TSET
JB08H,CTIME
AJMPMLOOP1
FUNBT:
LJMPDLY6
TSET:
LCALLDLY20M/闹铃时间设定程序,按P1.3进入设定
JBP1.3,MLOOP1
TS_LOOP:
JNBP1.3,TS_LOOP
JB05H,CLRBELL
MOVDISBEG,#50H
MOV50H,#0CH
MOV51H,#0AH
MINCHG:
SETBEA
LCALLD_II_PLAY
JNBP1.2,DLY1
JNBP1.0,DLY3
JNBP1.3,DLY
AJMPMINCHG
CLRBELL:
CLR05H
CLRCALB
AJMPMLOOP1
DLY:
LCALLDLY20M
JBP1.3,MINCHG
LJMPDLY8
T_SETSC:
LJMPR_SETTIM
DLY1:
LCALLDLY20M
JBP1.2,MINCHG
DLY2:
LCALLD_II_PLAY
JNBP1.2,DLY2
CLREA
MOVR0,#53H
LCALLADD_1
MOVA,R3
CLRC
CJNEA,#60H,ADD_M
ADD_M:
JCMINCHG
ACALLCLR_H
AJMPMINCHG
DLY3:
LCALLDLY20M
JBP1.0,MINCHG
DLY4:
LCALLD_II_PLAY
JNBP1.0,DLY4
CLREA
MOVR0,#53H
LCALLSUB_M
LJMPMINCHG
DLY5:
LCALLDLY20M/秒表功能/时钟转换程序,按P1.1进行功能转换
JBP1.1,T_MLOOP1
JNBP1.1,$
CPL03H
JNB03H,DIS_SET
MOVDISBEG,#60H
MOV60H,#00H
MOV61H,#00H
MOV62H,#00H
MOV63H,#00H
MOV64H,#00H
MOV65H,#00H
MOVTL1,#0F0H
MOVTH1,#0D8H
SETBTR1
SETBET1
T_MLOOP1:
LJMPMLOOP1
DIS_SET:
MOVDISBEG,#70H
CLRET1
CLRTR1
T_MLOOP11:
LJMPMLOOP1
DLY6:
LCALLDLY20M/秒表暂停/清零功能程序,按P1.2暂停或清零,
JBP1.2,T_MLOOP11P1.1退出秒表,回到时钟计时
T_EST11:
JNBP1.2,T_EST11
CLRET1
CLRTR1
T_EST22:
JNBP1.1,DLY5
JBP1.2,T_EST21
LCALLDLY20M
JBP1.2,T_EST22
T_EST55:
JNBP1.2,T_EST51
MOV60H,#00H
MOV61H,#00H
MOV62H,#00H
MOV63H,#00H
MOV64H,#00H
MOV65H,#00H
T_EST33:
JNBP1.1,DLY5
JBP1.2,T_EST31
LCALLDLY20M
JBP1.2,T_EST33
T_EST44:
JNBP1.2,T_EST41
SETBET1
SETBTR1
AJMPMLOOP1
T_EST411:
LCALLD_II_PLAY/以下为键等待释放时显示不会熄灭用
AJMPT_EST11
T_EST21:
LCALLD_II_PLAY
AJMPT_EST22
T_EST31:
LCALLD_II_PLAY
AJMPT_EST33
T_EST41:
LCALLD_II_PLAY
AJMPT_EST44
T_EST51:
LCALLD_II_PLAY
AJMPT_EST55
INTT0:
PUSHACC/1S计时程序。
T0中断服务程序
PUSHPSW
CLRET0
CLRTR0
MOVA,#0B7H
ADDA,TL0
MOVTL0,A
MOVA,#3CH
ADDCA,TH0
MOVTH0,A
SETBTR0
DJNZR4,I_INT0
A_DDS:
MOVR4,#14H
CPL07H
MOVR0,#71H
ACALLADD_1
MOVA,R3
CLRC
CJNEA,#60H,A_DDM
A_DDM:
JCI_INT0
ACALLCLR_H
MOVR0,#77H
ACALLADD_1
MOVA,R3
CLRC
CJNEA,#60H,A_DDH
A_DDH:
JCI_INT0
ACALLCLR_H
LCALLDLY20M
SETB08H
MOVR0,#79H
ACALLADD_1
MOVA,R3
CLRC
CJNEA,#24H,RSTART
RSTART:
JCI_INT0
ACALLCLR_H
I_INT0:
MOV72H,76H
MOV73H,77H
MOV74H,78H
MOV75H,79H
LCALLBELL
POPPSW
POPACC
SETBET0
RETI
INTT1:
PUSHACC/闪动调试程序/秒表从能程序;T1中断服务程序
PUSHPSW
JB03H,R_ADDS
MOVTL1,#0B0H
MOVTH1,#3CH
DJNZR2,I_INT1
MOVR2,#06H
CPL02H
JB02H,FLASH0
MOV72H,76H
MOV73H,77H
MOV74H,78H
MOV75H,79H
I_INT1:
POPPSW
POPACC
RETI
FLASH0:
JB01H,FLASH1
MOV72H,7AH
MOV73H,7AH
MOV74H,78H
MOV75H,79H
AJMPI_INT1
FLASH1:
MOV72H,76H
MOV73H,77H
MOV74H,7AH
MOV75H,7AH
AJMPI_INT1
R_ADDS:
CLRTR1
MOVA,#0F7H
ADDA,TL1
MOVTL1,A
MOVA,#0D8H
ADDCA,TH1
MOVTH1,A
SETBTR1
MOVR0,#61H
ACALLADD_1
CLRC
MOVA,R3
JZR_ADDM
AJMPI_INT01
R_ADDM:
ACALLCLR_H
MOVR0,#63H
ACALLADD_1
MOVA,R3
CLRC
CJNEA,#60H,R_ADDH
R_ADDH:
JCI_INT01
LCALLCLR_H
MOVR0,#65H
ACALLADD_1
I_INT01:
POPPSW
POPACC
RETI
ADD_1:
MOVA,@R0/加1子程序
DECR0
SWAPA
ORLA,@R0
ADDA,#01H
DAA
MOVR3,A
ANLA,#0FH
MOV@R0,A
MOVA,R3
INCR0
SWAPA
ANLA,#0FH
MOV@R0,A
RET
SUB_M:
MOVA,@R0/分减1子程序
DECR0
SWAPA
ORLA,@R0
JZSUB_M1
DECA
SUB_M11:
MOVR3,A
ANLA,#0FH
CLRC
SUBBA,#0AH
SUB_M111:
JCSUB_M110
MOV@R0,#09H
SUB_M10:
MOVA,R3
INCR0
SWAPA
ANLA,#0FH
MOV@R0,A
RET
SUB_M1:
MOVA,#59H
AJMPSUB_M11
SUB_M110:
MOVA,R3
SUB_H:
MOVA,@R0/时减1子程序
DECR0
SWAPA
ORLA,@R0
JZSUB_H1
DECA
SUB_H11:
MOVR3,A
ANLA,#0FH
CLRC
SUBBA,#0AH
SUB_H111:
JCSUB_H110
MOV@R0,#09H
SUB_H10:
MOVA,R3
INCR0
SWAPA
ANLA,#0FH
MOV@R0,A
RET
SUB_H1:
MOVA,#23H
AJMPSUB_H11
SUB_H110:
MOVA,R3
CLR_H:
CLRA/清零程序;对即使单元复零用
MOV@R0,A
DECR0
MOV@R0,A
RET
R_SETTIM:
CLRET0/时钟时间调整程序
CLRTR0
LCALLDL_LOOPS
LCALLDLY20M
JBP1.0,SLEEP
MOVR2,#06H
MOV70H,#00H
MOV71H,#00H
SETBET1
SETBTR1
SET_2:
JNBP1.0,SET_1
SETB00H
SET_4:
JBP1.0,SET_3
LCALLDL05S
LCALLDLY20M
JNBP1.0,R_SETHH
MOVR0,#77H
LCALLADD_1
MOVA,R3
CLRC
CJNEA,#60H,SET_LOOP
SET_LOOP:
JCSET_4
LCALLCLR_H
CLRC
AJMPSET_4
SLEEP:
SETBET0
SETBTR0
SET_LOOP1:
JBP1.0,SET_LOOP1
LCALLDLY20M
JBP1.0,SET_LOOP1
SET_LOOP2:
JNBP1.0,SET_LOOP2
LJMPMLOOP1
R_SETHH:
CLR00H
SETB01H
SET_LOOP3:
JNBP1.0,SET_5
SET_6:
JBP1.0,SET_7
LCALLDL05S
LCALLDLY20M
JNBP1.0,STOP
MOVR0,#79H
LCALLADD_1
MOVA,R3
CLRC
CJNEA,#24H,C_YHH
C_YHH:
JCSET_6
LCALLCLR_H
AJMPSET_6
STOP:
JNBP1.0,STOP1
LCALLDLY20M
JNBP1.0,STOP
CLR01H
CLR00H
CLR02H
CLRTR1
CLRET1
SETBTR0
SETBET0
LJMPMLOOP1
SET_1:
LCALLD_II_PLAY
AJMPSET_2
SET_3:
LCALLD_II_PLAY
JNBP1.1,DLY7
AJMPSET_4
SET_5:
LCALLD_II_PLAY
AJMPSET_LOOP3
SET_7:
LCALLD_II_PLAY
JNBP1.1,DLY7B
AJMPSET_6
STOP1:
LCALLD_II_PLAY
AJMPSTOP
DLY7:
LCALLDLY20M/分减1程序
JBP1.1,SET_41
DLY7_M:
JNBP1.1,DLY7_M