7.3程序源代码
ORG 0000H LJMP MAIN ORG 000BH LJMP TIME ×××××主程序部分××××× ORG 0100H
MAIN:MOV SP,#50H MOV 20H,#00H MOV 21H,#00H MOV 22H,#00H MOV 23H,#01H MOV 24H,#01H MOV 25H,#00H MOV 30H,#00H MOV 31H,#00H MOV 32H,#00H MOV 33H,#00H MOV 34H,#00H MOV 35H,#00H MOV 36H,#01H MOV 37H,#00H MOV 38H,#01H MOV 39H,#00H
MOV TMOD,#01H ;16 位计数器
MOV TH0,#03CH ;赋计数初值
MOV TL0,#0B0H MOV IE,#10000111B
SETB TR0 ;T0 启动计数 MOV R2,#14H MOV P2,#0FFH
LOOP: LCALL TIMEPRO LCALL DISPLAY1 JB P1.0,M1
LCALL SETTIME ;调用设定时间程序 LJMP LOOP M1:JB P1.1,M2 LCALL SETATIME LJMP LOOP M2:JB P1.3,M4
LCALL LOOKA TIME M4:LJMP LOOP
DELAY:MOV R4,#030H DL00:MOV R5,#0FFH DL11:MOV R6,#9H DL12:DJNZ R6,DL12 DJNZ R5,DL11 DJNZ R4,DL00 RET ; ×××××设定时间程序××××× SETTIME:
L0:LCALL DISPLAY1 MM1: JB P1.1,L1 MOV C,P1.1 JC MM1
LCALL DELAY1 ;调用延时
JC MM1
MSTOP1: MOV C,P1.1 JNC MSTOP1 ;判断 P1.1 是否释放?释放则继续
LCALL DELAY1 ;调用延时
MOV C,P1.1 JNC MSTOP1 INC 22H MOV A,22H
CJNE A,#18H,GO12
12
MOV 22H,#00H MOV 34H,#00H MOV 35H,#00H LJMP L0
L1:JB P1.2,L2 MOV C,P1.2 JC L1
LCALL DELAY1 JC L1
MSTOP2: MOV C,P1.2 JNC MSTOP2;判断 P1.2 是否释放?释放则继续 LCALL DELAY1 ;调用延时
MOV C,P1.2 JNC MSTOP2 INC 21H MOV A,21H
CJNE A,#3CH,GO11 MOV 21H,#00H MOV 32H,#00H MOV 33H,#00H LJMP L0
GO11:MOV B,#0AH DIV AB
MOV 34H,B MOV 35H,A LJMP L0
L2:JB P1.3,L0 MOV C,P1.3 JC L2
LCALL DELAY1 MOV C,P1.3 JC L2
STOP1: MOV C,P1.3 JNC STOP1
LCALL DELAY1 MOV C,P1.3 JNC STOP1 LJMP LOOP ×××××设置闹钟时间×××××
SETATIME:LCALL DISPLAY2
N0:LCALL DISPLAY2 MM2: JB P1.2,N1;判断 P1.2 是否按下? MOV C,P1.2 JC MM2
LCALL DELAY1 JC MM2
MSTOP3: MOV C,P1.2 JNC MSTOP3 LCALL DELAY1
13
MOV C,P1.2 JNC MSTOP3 INC 24H MOV A,24H
CJNE A,#24,GO22 MOV 24H,#00H MOV 38H,#00H MOV 39H,#00H LJMP N0 N1:JB P1.0,N2 MOV C,P1.0 JC N1
LCALL DELAY1 JC N1
MSTOP4: MOV C,P1.0 JNC MSTOP4 LCALL DELAY1 MOV C,P1.0 JNC MSTOP4 INC 23H MOV A,23H
CJNE A,#60,GO21 MOV 23H,#00H MOV 36H,#00H MOV 37H,#00H LJMP N0 GO21:MOV DIV AB MOV 36H,B MOV 37H,A LJMP N0
GO22: MOV B,#0AH ;将A 中的内容分成高低两部分
DIV AB MOV 38H,B MOV 39H,A LJMPN0
N2:JB P1.3 ,N0 ;判断P1.3 是否按下? MOV C,P1.3 JC N2
LCALL DELAY1 MOV C,P1.3
JC N2
STOP2: MOV C,P1.3 ;判断 P1.3 是否释放? JNC STOP2 LCALL DELAY1 MOV C,P1.3 JNC STOP2 LJMP LOOP
TIMEPRO:MOV A,21H MOV B,23H CJNE A,B,BK MOV A,22H MOV B,24H CJNE A,B,BK SETB 25H.0 MOV C,25H.0 JC XX
XX: LCALL TIMEOUT ;调用时间闹钟响应程序 BK:RET TIMEOUT: X1:LCALL BZ LCALL DISPLAY2 CLR 25H.0
JB P1.3, X1 ;调用喇叭响应程序
LCALL DELAY CLR 25H.0
LJMP DISPLAY1 BZ: CLR P3.7 MOV R7,#250 T2: MOV R6,#124 T3: DJNZ R6,T3
DJNZ R7,T2 SETB P3.7 RET
LOOKATIME:LCALL DISPLAY2 MM: JB P1.3,LOOKATIME ;判断按键 P1.3 是否按下 MOV C,P1.3 JC MM
LCALL DELAY1 MOV C,P1.3
14
JC MM STOP3:
MOV C,P1.3 JNC STOP3 LCALL DELAY1 MOV C,P1.3 JNC STOP3 LJMP LOOP
DELAY1: MOV R4,#14H DL001: MOV R5,#0FFH DL111: DJNZ R5,DL111
DJNZ R4,DL001
RET ×××××时间运行程序×××××
TIME: PUSH ACC PUSH PSW
MOV TH0,#03CH MOV TL0,#0B0H DJNZ R2,RET0 MOV R2,#14H MOV A,20H CLR C
INC A ;秒钟自加 1
CJNE A,#3CH,GO1 ;判断秒钟是否到 60 秒?
MOV 20H,#0 ;到 60 秒复位
MOV 30H,#0 MOV 31H,#0 MOV A,21H
INC A ;分钟自加 1
CJNE A,#3CH,GO2 ;判断分钟是否到 60 分? MOV 21H,#0H ; 到 60 分复位
MOV 32H,#0 MOV 33H,#0 MOV A,22H
INC A ;时钟自加 1
CJNE A,#18H,GO3 ;判断时钟是否到 24 时?
MOV22H,#00H ;到 24 时复位
MOV 34H,#0 MOV 35H,#0 AJMP RET0
GO1: MOV 20H,A MOV B,#0AH DIV AB
MOV 31H,A MOV 30H,B AJMP RET0
GO2: MOV 21H,A MOV B,#0AH DIV AB
MOV 33H,A MOV 32H,B AJMP RET0
GO3: MOV 22H,A MOV B,#0AH MOV 35H,A MOV 34H,B AJMP RET0
RET0: POP PSW ;恢复现场
POP ACC RETI ×××××运行部分××××× DISPLAY1: MOV R0,#30H
MOV R3,#0FEH
MOV A,R3
PLAY1: MOV P2,A MOV A,@R0
MOV DPTR,#DSEG1 ;表首地址送 DPTR
MOVC A,@A+DPTR MOV P0,A LCALL DL1
MOV P2,#0FFH ;送高电平到 P2
MOV RL A,R3 RL A
JNB ACC.6,LD1 INC R0 MOVR3,A
LJMP PLAY1 ;调用查表程序
LD1: RET
DISPLAY2: PUSH ACC ;现场保护 PUSH PSW MOV R0,#36H MOV R3,#0FBH MOV A,R3
PLAY2: MOV P2,A MOV A,@R0
MOV DPTR,#DSEG1;表首地址送 DPTR
15
MOVC A,@A+DPTR ;查 ASCII 特码
MOV P0,A;查表结果送 A LCALL DL1
MOV P2,#0FFH ;送高电平到 P2
MOV A,R3 RL A
JNB ACC.6,LD2 INC R0 MOV R3, A LJMP PLAY2
LD2: POP PSW ;恢复现场 POP ACC RET ×××××延时时间××××× DL1: MOV R7,#02H ;延时时间
DL: MOV R6,#0200H DL6: R6,$ DJNZ R7,DL RET
DSEG1:DB
3FH,06H,5BH,4FH,66H DB
6DH,7DH,07H,7FH,6FH END
7.4元器件清单
名称 电阻(欧姆) 晶振 芯片 按钮 蜂鸣器 无极电容 有极电容 三极管 4位一体数码管 稳压集成电路 桥堆 波动开关 二极管
16
型号 470 10K 100 10K 12MHz AT89S51 5V 30P 10uF PNP 8550 7805 2W10 LED 数量 15 9 1 8 1 1 4 1 2 1 7 2 1 1 1 1
指导教师评语: 课程设计报告成绩: ,占总成绩比例: 30% 课程设计其它环节成绩: 环节名称: 考勤 ,成绩: ,占总成绩比例: 20% 环节名称: 综合 ,成绩: ,占总成绩比例: 50% 总 成 绩: 指导教师签字: 年 月 日 本次课程设计负责人意见: 负责人签字: 年 月 日
17