简易数字钟的单片机课程设计Word格式.docx
《简易数字钟的单片机课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《简易数字钟的单片机课程设计Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
10uF/10V
复位电路
500Ω
8
4.7kΩ
蜂鸣器及其驱动电路
蜂鸣器
DC5V
电源
+5V/0.5A
提供+5V电源
三极管
9015
基于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
ORG001BH
LJMPINTT1
ORG0023H
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
I_TAB:
DLY1M:
MOVR6,#14H
DL_LOOP:
MOVR7,#19H
DL_LOOP1:
DJNZR7,DL_LOOP1
DJNZR6,DL_LOOP
RET
DLY20M:
CLRCALB
LCALLD_II_PLAY
SETBCALB
DL_LOOPS:
LCALLDL05S
LCALLDL05S
DL05S:
MOVR3,#20H
DL05S1:
DJNZR3,DL05S1
CTIME:
MOVA,#10H/整点报时
MOVB,79H
MULAB
ADDA,78H
MOVTIMCON,A
CLOOP:
LCALLDLY20M
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
JNBP1.2,DLY1
JNBP1.0,DLY3
JNBP1.3,DLY
AJMPMINCHG
CLRBELL:
CLR05H
CLRCALB
DLY:
LCALLDLY20M
JBP1.3,MINCHG
LJMPDLY8
T_SETSC:
LJMPR_SETTIM
DLY1:
JBP1.2,MINCHG
DLY2:
JNBP1.2,DLY2
CLREA
MOVR0,#53H
LCALLADD_1
MOVA,R3
CLRC
CJNEA,#60H,ADD_M
ADD_M:
JCMINCHG
ACALLCLR_H
DLY3:
JBP1.0,MINCHG
DLY4:
JNBP1.0,DLY4
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:
DLY6:
LCALLDLY20M/秒表暂停/清零功能程序,按P1.2暂停或清零,
JBP1.2,T_MLOOP11P1.1退出秒表,回到时钟计时
T_EST11:
JNBP1.2,T_EST11
T_EST22:
JNBP1.1,DLY5
JBP1.2,T_EST21
JBP1.2,T_EST22
T_EST55:
JNBP1.2,T_EST51
T_EST33:
JBP1.2,T_EST31
JBP1.2,T_EST33
T_EST44:
JNBP1.2,T_EST41
T_EST411:
LCALLD_II_PLAY/以下为键等待释放时显示不会熄灭用
AJMPT_EST11
T_EST21:
AJMPT_EST22
T_EST31:
AJMPT_EST33
T_EST41:
AJMPT_EST44
T_EST51:
AJMPT_EST55
INTT0:
PUSHACC/1S计时程序;
T0中断服务程序
PUSHPSW
CLRET0
CLRTR0
MOVA,#0B7H
ADDA,TL0
MOVTL0,A
MOVA,#3CH
ADDCA,TH0
MOVTH0,A
DJNZR4,I_INT0
A_DDS:
MOVR4,#14H
CPL07H
MOVR0,#71H
ACALLADD_1
CJNEA,#60H,A_DDM
A_DDM:
JCI_INT0
MOVR0,#77H
CJNEA,#60H,A_DDH
A_DDH:
SETB08H
MOVR0,#79H
CJNEA,#24H,RSTART
RSTART:
I_INT0:
MOV72H,76H
MOV73H,77H
MOV74H,78H
MOV75H,79H
LCALLBELL
POPPSW
POPACC
RETI
INTT1:
PUSHACC/闪动调试程序/秒表从能程序;
T1中断服务程序
PUSHPSW
JB03H,R_ADDS
DJNZR2,I_INT1
MOVR2,#06H
CPL02H
JB02H,FLASH0
MOV72H,76H
I_INT1:
POPPSW
FLASH0:
JB01H,FLASH1
MOV72H,7AH
MOV73H,7AH
AJMPI_INT1
FLASH1:
MOV74H,7AH
MOV75H,7AH
R_ADDS:
CLRTR1
MOVA,#0F7H
ADDA,TL1
MOVTL1,A
MOVA,#0D8H
ADDCA,TH1
MOVTH1,A
MOVR0,#61H
JZR_ADDM
AJMPI_INT01
R_ADDM:
ACALLCLR_H
MOVR0,#63H
CJNEA,#60H,R_ADDH
R_ADDH:
JCI_INT01
LCALLCLR_H
MOVR0,#65H
I_INT01:
ADD_1:
MOVA,@R0/加1子程序
DECR0
SWAPA
ORLA,@R0
ADDA,#01H
DAA
MOVR3,A
ANLA,#0FH
MOV@R0,A
SUB_M:
MOVA,@R0/分减1子程序
JZSUB_M1
DECA
SUB_M11:
MOVR3,A
SUBBA,#0AH
SUB_M111:
JCSUB_M110
MOV@R0,#09H
SUB_M10:
MOVA,R3
SUB_M1:
MOVA,#59H
AJMPSUB_M11
SUB_M110:
SUB_H:
MOVA,@R0/时减1子程序
JZSUB_H1
SUB_H11:
SUB_H111:
JCSUB_H110
SUB_H10:
SUB_H1:
MOVA,#23H
AJMPSUB_H11
SUB_H110:
CLR_H:
CLRA/清零程序;
对即使单元复零用
R_SETTIM:
CLRET0/时钟时间调整程序
JBP1.0,SLEEP
MOV70H,#00H
MOV71H,#00H
SET_2:
JNBP1.0,SET_1
SETB00H
SET_4:
JBP1.0,SET_3
JNBP1.0,R_SETHH
CJNEA,#60H,SET_LOOP
SET_LOOP:
JCSET_4
AJMPSET_4
SLEEP:
SETBET0
SET_LOOP1:
JBP1.0,SET_LOOP1
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
JNBP1.0,STOP
CJNEA,#24H,C_YHH
C_YHH:
JCSET_6
AJMPSET_6
STOP:
JNBP1.0,STOP1
CLR01H
CLR00H
CLR02H
SET_1:
AJMPSET_2
SET_3:
JNBP1.1,DLY7
SET_5:
AJMPSET_LOOP3
SET_7:
JNBP1.1,DLY7B
STOP1:
AJMPSTOP
DLY7:
LCALLDLY20M/分减1程序
JBP1.1,SET_41
DLY7_M:
JNBP1.1,DLY7_M
LJMPSET_4
SET_41:
LJMPSET_4
DLY7B:
LCALLDLY20M/时减1程序
JBP1.1,SET_61
DLY7_H:
JNBP1.1,DLY7_H
LCALLSUB_H
LJMPSET_6
SET_61:
LJMPSET_6
D_II_PLAY:
MOVR1,DISBEG/显示程序
MOVR5,#0FEH
PLAY:
MOVA,R5
MOVP2,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP0,A
MOVA,R5
JBACC.2,D_LOOP
CLRP0.7
D_LOOP:
JBACC.4,D_LOOP1
D_LOOP1:
LCALLDLY1M
INCR1
JNBACC.5,CLOSE
RLA
MOVR5,A
MOVP0,#0FFH
AJMPPLAY
CLOSE:
MOVP2,#0FFH
SD_II_PLAY:
MOVR1,DISBEG/上电显示子程序
I_PLAY:
MOVDPTR,#I_TAB
LCALLDLY1M
JNBACC.5,CLOSES
AJMPI_PLAY
CLOSES:
DLY8:
LCALLD_II_PLAY/闹铃时间设定程序中的时调整程序
JNBP1.3,DLY8
MOV50H,#0AH
MOV51H,#0CH
R_BTIM:
JNBP1.2,DLY12
JNBP1.0,DLY14
JNBP1.3,DLY9
JNBP1.1,DLY10
AJMPR_BTIM
DLY9:
JBP1.3,R_BTIM
DLY8M:
JNBP1.3,DLY8M
DLY10:
JBP1.1,R_BTIM
DLY11:
JNBP1.1,DLY11
CPL05H
JNB05H,R_BTIM11
MOV50H,#00H
R_BTIM11:
MOV50H,#0AH
DLY12:
JBP1.2,R_BTIM
DLY13:
JNBP1.2,DLY13
MOVR0,#55H
CJNEA,#24H,A_DDH33N
A_DDH33N:
JCR_BTIM
DLY14:
JBP1.0,R_BTIM
DLY15:
JNBP1.0,DLY15
LJMPR_BTIM
BELL:
JNB05H,BBELL/闹铃判断子程序
MOVA,79H
CJNEA,55H,BBELL
MOVA,78H
BELL_1:
CJNEA,54H,BBELL
MOVA,77H
CJNEA,53H,BBELL
MOVA,76H
BELL_2:
CJNEA,52H,BBELL
JNB07H,BBELL
BBELL:
SETBCALB
END
小结
为期两周的单片机数字钟课程设计结束了,在这两周里我和我的组员们运用单片机的知识完成了简易数字钟电路的设计,这使我对单片机这门课程有了更深一步的了解。
当我知道我要做数字钟这个课题时,起初感觉还是很有难度的,很怕自己做不好或者是做不出来。
在这两周的时间里,我去图书馆查阅大量资料,每当遇到不懂的问题或者困难时,我都会虚心向田老师请教。
就在这种不懈的努力下,我和我的组员终于完成了简易数字钟的单片机课程设计。
我们小组采用了单片机汇编语言完成了具有计时功能、秒表功能、整点报时功能以及分时调整功能的单片机简易数字钟课程设计.该设计的可靠性高,成本低,易操作,通用性强,通过键盘可以进行定时、校时。
总之,进一步加深了我对单片机这门学科的了解,,充分锻炼了我的个人能力,并培养了我的团队配合能力。
本次课程设计让我体会到了只有付出才会有收获,只有平日认真的学习,在关键的时刻才不会捉襟见肘,应用时的捉襟见肘让我认识到了自己学习知识基础上的不足,每一门专业基础课都是我们手中不可替代的武器,只有把他们有机联系起来才有可能实现一个完整的系统。
致谢
在这为期两周的单片机课程设计的时间里,在同学和老师的帮助下,我顺利完成了简易数字钟的单片机课程设计,这使我将理论知识付诸实践中,学到了许多课本上学不到的知识,更让我对单片机这门课程有了更深一步的了解。
通过这次课程设计,我懂得了理论与实际相结合是很重要的,光有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,把理论运用于实践,在实践中更好的理解与掌握理论,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到了一些问题,但经过自己的不懈努力及指导教师的指点,还是一一得到了解决,同时在设计的过程