单片机课程设计
RP1RESPACK-8123456789L1L2L3L4C130PFU1X119XTAL1CRYSTAL18XTAL2P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617L1L2L3L4L5L6L7L8C330PFR110k9RSTC210uF293031PSENALEEAS1S2S1S2S3S4R3R4R5R610k10k10k10k12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51R2100Q1BU208S3S4LS1SPEAKER 图4-2
L5L6L7L8
11
单片机课程设计
附录:
5.1汇编程序清单:
BEEP EQU P3.7 ;定义蜂鸣器(电铃)控制信号输出口
ORG
0000H ;程序入口地址
LJMP START
ORG 000BH ;定时器0中断入口地址 LJMP TIMER_0 ORG 0100H
;/*****程序开始,初始化*****/
START:
SETB BEEP ;关闭蜂鸣器(电铃)
SETB 48H ;使用一个bit位用于调时闪烁标志
SETB 47H ;使用一个bit位用于产生脉冲用于调时快进时基 CLR CLR
45H ;关闭响铃方式1标志 44H ;关闭响铃方式2标志
MOV R1,#0 ;调整选择键功能标志:0正常走时、1调时、2调分、3调秒 MOV 20H,#00H ;用于控制秒基准时钟源的产生 MOV 21H,#00H ;清零秒寄存器 MOV 22H,#00H ;清零分寄存器 MOV 23H,#00H ;清零时寄存器
MOV 24H,#00H ;用于控制调时闪烁的基准时钟的产生 MOV R2,#00H ;强制打铃标志 MOV R3,#00H ;强制打铃时长标志
MOV IP,#02H ;IP,IE初始化 MOV IE,#82H
MOV TMOD,#01H ;设定定时器0工作方式1 MOV TH0,#3CH
MOV TL0,#0B0H ;赋定时初值,定时50ms SETB TR0 ;启动定时器0 MOV SP,#40H ;重设堆栈指针
12
单片机课程设计
;/*****主程序*****/
MAIN:
CJNE R1,#00H,MAIN1 ;是否为正常走时状态 LCALL BIJIAO1 ;调用起床、熄灯打铃比较子程序 LCALL BIJIAO2 ;调用上、下课打铃比较子程序 LCALL DALING1 ;调用响铃方式1执行子程序 LCALL DALING2 ;调用响铃方式2执行子程序 LCALL DALING3
MAIN1:
LCALL DISPLAY ;调用显示子程序 LCALL KEY_SCAN ;调用按键检测子程序 JZ MAIN ;无键按下则返回重新循环 LCALL SET_KEY ;调用选择键处理子程序
JB 46H,MAIN ;如果已进行长按调整(调时快进),则不再执行下面的单步调整 LCALL ADD_KEY ;调用增加键处理子程序 LCALL DEC_KEY ;调用减少键处理子程序
LCALL DALING_KEY ;处理强制打铃/强制关闭铃声键 LJMP MAIN ;重新循环
;/*****定时中断服务程序*****/
TIMER_0:
PUSH ACC PUSH PSW ;保护现场 MOV TH0,#3CH
MOV TL0,#0B0H ;重新赋定时初值 CPL 47H ;产生脉冲用于调时快进时基 INC 24H
MOV A,24H
CJNE A,#10,ADD_TIME ;产生0.5秒基准时钟,用于调时闪烁 CPL 48H
;取反调时闪烁标志位
13
单片机课程设计
MOV 24H,#00H
ADD_TIME:
INC 20H MOV A,20H
CJNE A,#20,RETI1 ;产生1秒基准时钟 MOV 20H,#00H
;一秒钟时间到,清零20H
CJNE R2,#01H,ADD_M INC R3
ADD_M:
MOV A,21H ADD A,#01H DA A
;作十进制调整
MOV 21H,A
CJNE A,#60H,RETI1 MOV 21H,#00H MOV A,22H ADD A,#01H DA A MOV 22H,A
CJNE A,#60H,RETI1 MOV 22H,#00H MOV A,23H
;一分钟到
;一小时到
ADD A,#01H DA A MOV 23H,A CJNE A,#24H,RETI1
MOV 23H,#00H ;到24点,清零小时
RETI1:
POP PSW POP ACC ;恢复现场
14
单片机课程设计
RETI ;中断返回
;/*****显示处理*****/
DISPLAY:
MOV A,21H ;秒
ANL A,#0FH
MOV 2FH,A ;转换出秒个位,存入2FH
MOV A,21H
ANL A,#0F0H SWAP A
MOV 2EH,A ;转换出秒十位,存入2EH
JB 46H,MIN
;如果长按按键(调时快进),则跳过闪烁处理
;如果R1为3,闪烁秒位待调整
CJNE R1,#3,MIN JB 48H,MIN
MOV 2FH,#0AH ;使该位为10,查表得到使该位不显示的输出
MOV 2EH,#0AH
MIN:
MOV A,22H ;分
ANL A,#0FH
MOV 2DH,A ;转换出分个位,存入2DH
MOV A,22H
ANL A,#0F0H SWAP A
MOV 2CH,A ;转换出分十位,存入2CH
JB 46H,HOUR
;如果长按按键(调时快进),则跳过闪烁处理
;如果R1为2,闪烁分位待调整
CJNE R1,#2,HOUR JB 48H,HOUR
MOV 2DH,#0AH ;使该位为10,查表得到使该位不显示的输出
MOV 2CH,#0AH
HOUR:
MOV A,23H ;时
ANL A,#0FH
15