单片机课程设计-电脑时钟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档