单片机课程设计-电脑时钟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIM01 ;0.1s T0中断
ORG 0300H
MAIN: ACALL INIT ;调用初始化函数
LOOP: LCALL KEYIN ;键盘输入
AJMP LOOP
INIT: MOV 7FH,#7EH ;7FH存当前输入位置79-7EH
MOV 79H,#0 ;初始化显示
MOV 7AH,#0
MOV 7BH,#0
MOV 7CH,#0
MOV 7DH,#0
MOV 7EH,#0
MOV 70H,#0 ;初始化初始时间0h0m0s
MOV 71H,#0
MOV 72H,#0
MOV 73H,#0
SETB 20H.0 ;20H.0存储当前输入状态,闹钟输入,或初始值输入KEYIN: LCALL KEY ;键盘输入函数,循环对79-7EH输入,或是命令输入CLR C
PUSH ACC ;入栈,保存A值
SUBB A,#10 ;和10比较
JNC CONTRL ;大于等于10,命令键
POP ACC ;A出栈数字键,放到显示缓存
MOV R0,7FH ;A放到7FH内容指向地址处
MOV @R0,A
MOV A,7FH ;是否出了79H-7EH范围
CJNE A,#79H,RU ;出范围,循环到7EH
MOV 7FH,#7FH
RET
RU: DEC 7FH ;范围内自减1
RET
CONTRL: POP ACC ;控制键,执行相应控制操作
CJNE A,#0DH,N0C
LCALL KJUD ;D 控制计时开始,KJUD判断是否在有效时间范围内
JNC N0 ;控制操作完成退出
LCALL TIMINIT ;定时器及相关内容初始化
N0C: CJNE A,#0CH,N0B ;C 暂停开始键
CPL EA ;中断开关控制计时起止
N0B: CJNE A,#0BH,N0 ;B 选择输入是闹钟还是起始值
CPL 20H.0 ;20H.0为其标志0 起始1 闹钟
MOV C,20H.0 ;指示灯表示输入闹钟还是起始值
MOV P1.0,C
N0: RET
TIMINIT:MOV TH0,#03CH ;定时器及相关初始化
MOV TL0,#0B0H ;初值
SETB TR0 ;运行
SETB ET0 ;允许定时器中断
SETB EA ;总中断允许
MOV 70H,#0 ;载入计时初值
MOV 71H,74H
MOV 72H,75H
MOV 73H,76H
RET
DISP: MOV R0,#79H ;显示函数从右至左显示
MOV R3,#01H
MOV A,R3
DIO: MOV DPTR,#0FFDDH
MOVX @DPTR,A
MOV A,@R0
MOV DPTR,#TAB1
MOVC A,@A+DPTR ;得到键值
MOV DPTR,#0FFDCH
DIR1: MOVX @DPTR,A
LCALL DELAY1
INC R0
MOV A,R3
JB ACC.5,LD1
RL A
MOV R3,A
AJMP DIO
LD1: RET
TAB1: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ;显示表A灭B显示P(错误信号)
DB 080H,090H,0FFH,08CH,0C6H,0A1H,086H,08EH
TAB2: DB 07H,04H,08H,05H,09H,06H,0AH,0BH,01H,00H ;键值校正表DB 02H,0FH,03H,0EH,0CH,0DH
DELAY1: MOV R7,#02H ;延时函数12M时精确延时1ms
DE1: MOV R6,#0FFH
DE2: DJNZ R6,DE2
DJNZ R7,DE1
RET
JUDGE: MOV DPTR,#0FFDDH ;判断是否有效MOV A,#00H
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
CPL A
ANL A,#0FH
RET
KEY: LCALL JUDGE
JNZ LK1
LCALL DISP;
AJMP KEY
LK1: LCALL DISP;
LCALL JUDGE
JNZ LK2
LCALL DISP
AJMP KEY
LK2: MOV R2,#0FEH
MOV R4,#00H
LK3: MOV DPTR,#0FFDDH
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
LINE0: JB ACC.0,LINE1
MOV A,#00H
AJMP LKP
LINE1: JB ACC.1,LINE2
MOV A,#08H
AJMP LKP
LINE2: JB ACC.2,LINE3
MOV A,#10H
AJMP LKP
LINE3: JB ACC.3,NEXT
MOV A,#18H
LKP: ADD A,R4
PUSH ACC