?? clock.txt
字號:
ORG 0000H
LJMP main
ORG 000BH
LJMP ICT0
MAIN: mov a,#0ffh ;誰備讀p0口
mov p0,a
mov r1,#00h ;閃動位置
mov r2,#00h ;
mov r3,#00h ;500ms定時
mov r4,#00h
mov r5,#00h
mov r6,#00h ;閃動標志
mov r7,#00h ;1s閃動標志
mov 46h,#00h
mov 49h,#00h
mov a,70h ;判第一次加電
cjne a,#05h,main1 ;51h,50h,第一次加電標志
mov a,71h
cjne a,#10h,main1
ljmp start
main1: MOV 30H,#01H ;小時十分位
mov 70h,#05h
mov 71h,#10h
MOV 31H,#02H ;小時個位
mov 32h,#00h ;分鐘十分位
MOV 33H,#00H ;分鐘個位
MOV 34H,#00H ;秒十分位
MOV 35H,#00H ;秒個位
MOV 36H,#00H ;月定時
MOV 37H,#00H ;顯示延時計數器
MOV 38H,#00H ;月誤差存儲器
MOV 39H,#00H ;62.5MS計數器
mov 50h,#0b0h ;定時器低位數單元
mov 51h,#0bh ;定時器高位數單元
MOV R0,#00H ;顯示位數碼管計數單元
mov r7,#00h ;秒閃狀態單元
MOV R1,#00H ;
MOV P1,#0FFH ;位輸出口
MOV P2,#00H ;段輸出口
start: mov tmod,#01h ;定時器工作方式2
mov tl0,50h ;置初值
mov th0,51h ;
setb TR0 ;啟動T0
setb ET0 ;開T0中斷
setb EA ;開cpu中斷
setb px0
setb it0
setb it1
SETB EX0
SETB EX1
ljmp award
ICT0: mov tl0,50h ;重裝初值
mov th0,51h
inc 39h ;1/16s計時+1
reti
award: lcall replay ;調1ms延時
inc 37h
inc r3
cjne r3,#0ffh,awarda ;500ms定時
mov r3,#00h
mov a,r6
cpl a
mov r6,a
awarda: mov A,37H ;
cjne a,#03h,award1 ;;判顯示延時等3,等清0不等轉
mov 37h,#00h
lcall disp
inc r0 ;顯示位加1
set: cjne r1,#00h,key111 ;判設置標志不為0轉設置
set1: jb p0.0,award1 ;判設置鍵有無按下
clr ea
lcall key1
key111: lcall key
award1: mov a,39h ;0.5s置閃爍定時
cjne a,#08h,award2
mov r7,#0ffh
award2:cjne a,#10h,award3 ;到1S進位
mov 39h,#00h ;
mov r7,#00h ;清閃爍標志
inc 35h
award3: mov A,35H
cjne a,#0ah,award9 ;;判秒個位
mov 35h,#00h
inc 34h
award4: mov A,34H
cjne a,#06h,award9 ;;判秒十位
mov 34h,#00h
inc 33h
award5: mov a,33h
cjne a,#0ah,award9 ;;判分個位
mov 33h,#00h
inc 32h
award6: mov a,32h
cjne a,#06h,award9 ;;判分十位
mov 32h,#00h
inc 31h
award7: mov a,31h
cjne a,#0ah,award8 ;;小時個位夠10,10位+1
mov 31h,#00h
inc 30h
award8: mov a,30h
cjne a,#02h,award9
nop
nop
nop
mov a,31h
cjne a,#04h,award9 ;判小時個位等4判十位等2送01數到小時兩位
mov 31h,#00h
mov 30h,#00h
inc 36h ;月計時加1
mov a,36h
cjne a,#1eh,award9 ;判月到30
mov 36h,#00h ;清月計數器
mov a,38h ;移月差到A
mov b,#10h ;移16到B
div ab ;A/B
mov 3ch,a ;商送3CH
mov 3dh,b ;余數送3DH
mov a,34h ;
subb a,3ch ;秒十位減誤差高位
mov 34h,a ;
mov a,35h ;
subb a,3dh ;秒低位減誤差低位
mov 35h,a ;
award9: ljmp award ;;循環判斷
DISP: cjne r0,#07h,dis ;顯示小時十分位
MOV R0,#00H
dis: cjne r1,#00h,dis12 ;判閃位計數器
lcall disa
dis12: cjne r1,#07h,disa ;判閃位計數器滿轉閃動顯示方式
mov r1,#00h
setb ea ;開中斷
lcall disa
ret
DISa: CJNE R0,#00H,DISa1 ;
cjne r1,#06h,disb1
cjne r6,#00h,disb1
mov p1,#00000000b
acall disp1
ret
disb1: mov p1,#00000001b
acall disp1
ret
disa1: cjne r0,#01h,disa2 ;顯示小時個分位
cjne r1,#05h,disb2
cjne r6,#00h,disb2
mov p1,#00000000b
acall disp2
ret
disb2: mov p1,#00000010b
acall disp2
ret
disa2: cjne r0,#02h,disa3 ;顯示分個分位
cjne r1,#04h,disb3
cjne r6,#00h,disb3
mov p1,#00000000b
acall disp3
ret
disb3: mov p1,#00000100b
acall disp3
ret
disa3: cjne r0,#03h,disa4 ;顯示分個分位
cjne r1,#03h,disb4
ljmp disb42
disb41: cjne r1,#09h,disb4
disb42: cjne r6,#00h,disb4
mov p1,#00000000b
acall disp4
ret
disb4: mov p1,#00001000b
acall disp4
ret
disa4: cjne r0,#04h,disa5 ;顯示秒個分位
cjne r1,#02h,disb51
ljmp disb52
disb51: cjne r1,#08h,disb5
disb52: cjne r6,#00h,disb5
mov p1,#00000000b
acall disp4
ret
disb5: mov p1,#00010000b
acall disp5
ret
disa5: cjne r0,#05h,disa6 ;顯示秒個分位
cjne r1,#01h,disb61
ljmp disb63
disb61: cjne r1,#07h,disb62
ljmp disb63
disb62: cjne r1,#0ah,disb6
disb63: cjne r6,#00h,disb6
mov p1,#00000000b
acall disp6
ret
disb6: mov p1,#00100000b
acall disp6
disa6: ret
dispb2: cjne a,#00h,play1a
mov p2,#01000000b
ret
play1a: cjne A,#01h,play2a ;判時間數1
mov p2,#01111001b
ret
play2a: cjne A,#02h,play3a ;2
mov p2,#00100100b
ret
play3a: cjne A,#03h,play4a ;3
mov p2,#00110000b
ret
play4a: cjne A,#04h,play5a ;4
mov p2,#00011001b
ret
play5a: cjne A,#05h,play6a ;5
mov p2,#00010010b
ret
play6a: cjne A,#06h,play7a ;6
mov p2,#00000010b
ret
play7a: cjne A,#07h,play8a ;7
mov p2,#01111000b
ret
play8a: cjne A,#08h,play9a ;8
mov p2,#00000000b
ret
play9a: cjne A,#09h,play10a ;9
mov p2,#00010000b
ret
play10a:cjne A,#0ah,play11a ;a
mov p2,#00000000b
ret
play11a:cjne A,#0bh,play12a ;b
mov p2,#00000000b
ret
play12a:cjne A,#0ch,play13a ;c
mov p2,#00000000b
ret
play13a:cjne A,#0dh,play14a ;d
mov p2,#00000000b
ret
play14a:cjne A,#0eh,play15a ;e
mov p2,#00000000b
ret
play15a:cjne A,#0fh,dispba ;f
mov p2,#00000000b
dispba: ret
disp1: mov a,30h
cjne r7,#00h,dispb1
lcall dispb
ret
disp2: mov a,31h
cjne r7,#00h,dispb1
lcall dispb
ret
disp3: mov a,32h
cjne r7,#00h,dispb1
lcall dispb
ret
disp4: mov a,33h
cjne r7,#00h,dispb1
lcall dispb
ret
disp5: mov a,34h
cjne r7,#00h,dispb1
lcall dispb
ret
disp6: mov a,35h
cjne r7,#00h,dispb1
lcall dispb
ret
dispb1: lcall dispb2
ret
dispb: cjne a,#00h,play1
mov p2,#11000000b
ret
play1: cjne A,#01h,play2 ;判時間數
mov p2,#11111001b
ret
play2: cjne A,#02h,play3 ;
mov p2,#10100100b
ret
play3: cjne A,#03h,play4 ;
mov p2,#10110000b
ret
play4: cjne A,#04h,play5 ;
mov p2,#10011001b
ret
play5: cjne A,#05h,play6 ;
mov p2,#10010010b
ret
play6: cjne A,#06h,play7 ;
mov p2,#10000010b
ret
play7: cjne A,#07h,play8 ;
mov p2,#11111000b
ret
play8: cjne A,#08h,play9 ;
mov p2,#10000000b
ret
play9: cjne A,#09h,play10 ;
mov p2,#10010000b
ret
play10: cjne A,#0ah,play11 ;a
mov p2,#00000000b
ret
play11: cjne A,#0bh,play12 ;b
mov p2,#00000000b
ret
play12: cjne A,#0ch,play13 ;c
mov p2,#00000000b
ret
play13: cjne A,#0dh,play14 ;d
mov p2,#00000000b
ret
play14: cjne A,#0eh,play15 ;e
mov p2,#00000000b
ret
play15: cjne A,#0fh,play16 ;f
mov p2,#00000000b
play16: ret
replay: mov 3ah,#34h ;1ms延時
rep: mov 3bh,#0ah
rep1: djnz 3bh,rep1
djnz 3ah,rep
ret
yan10m: mov 3ah,#34h ;10M延時
repa: mov 3bh,#34h
repa1: djnz 3bh,repa1
djnz 3ah,repa
ret
PASS: LJMP AWARD1 ;無鍵按下返回時間循環
INT0: RETI
INT1: RETI
key1: lcall replay ;
jb p0.0,pass
KEY: clr ea ;
JB P0.0,KEYA ;
lCALL replay ;
JB P0.0,KEYA ;
key2: jnb p0.0,key2 ;
lCALL YAN10M ;
JnB P0.0,key2 ;
inc r1 ;
;inc r2 ;
KEYa: JB P0.1,KEYb ;
lCALL replay ;
JB P0.1,KEYb ;
keya1: jnb p0.1,keya1 ;
lCALL replay ;
JnB P0.1,keya1 ;
cjne r1,#01h,seta1 ;轉秒低位加1程序
lcall setb1 ;
ret ;
seta1: cjne r1,#02h,seta2 ;轉秒高位加1程序
lcall setb2
ret
seta2: cjne r1,#03h,seta3 ;轉分低位加1程序
lcall setb3
ret
seta3: cjne r1,#04h,seta4 ;轉分高位加1程序
lcall setb4
ret
seta4: cjne r1,#05h,seta5 ;轉小時低位加1程序
lcall setb5
ret
seta5: cjne r1,#06h,seta6 ;轉小時高位加1程序
lcall setb6
ret
seta6: cjne r1,#07h,seta7 ;轉定時器修正值低位
lcall setb7
ret
;seta7: cjne r1,#08h,seta8 ;轉定時器修正值高位
; lcall setb8
; ret
;seta8: cjne r1,#09h,keyb ;
; lcall setb9
; ret
;seta9: cjne r1,#010h,keyb ;
; lcall setb10
; ret
setb7: ret
seta7: ret
KEYb: ret
setb1: inc 35h
mov a,35h
cjne a,#0ah,setc1
mov 35h,#00h
setc1: ret
setb2: inc 34h
mov a,34h
cjne a,#06h,setc2
mov 34h,#00h
setc2: ret
setb3: inc 33h
mov a,33h
cjne a,#0ah,setc3
mov 33h,#00h
setc3: ret
setb4: inc 32h
mov a,32h
cjne a,#06h,setc4
mov 32h,#00h
setc4: ret
setb5: inc 31h
mov a,31h
mov a,30h
cjne a,#02h,setc51
mov a,31h
cjne a,#04h,setc5
mov 31h,#00h
ret
setc51: mov a,31h
cjne a,#0ah,setc5
mov 31h,#00h
setc5: ret
setb6: inc 30h
mov a,30h
cjne a,#03h,setc6
mov 30h,#00h
setc6: ret
;setb7: mov a,46h
; cjne a,#00h,setc7
; mov 40h,30h ;40h-45h暫存時間位
; mov 41h,31h
; mov 42h,32h
; mov 43h,33h
; mov 44h,34h
; mov 45h,35h
; mov 32h,#03h ;前3位送3表示處在定時器校準狀態
; mov 31h,#03h
; mov 30h,#03h
; mov 33h,51h
; mov a,50h
; mov b,#10
; div ab
; mov 34h,a
; mov 35h,b
; mov 46h,#feh
;setc7: inc 35h
; mov a,35h
; cjne a,#10h,setc71
; mov 35h,#00h
;setc71: ret
;setb8: inc 34h
; mov a,34h
; cjne a,#10h,setc8
; mov 34h,#00h
;setc8: ret
;setb9: inc 33h
; mov a,33h
; cjne a,#10h,setc9
; mov 33h,#00h
;setc9: ret
;setb10:mov a,49h;
; cjne a,#00h,setc10;
; mov 51h,33h
; mov a,34h
; mov b,#10h
; mul ab
; mov a,b
; add a,35h
; mov 50h,a
; mov 30h,#04h
; mov 31h,#04h
; mov 32h,#04h
; mov 46h,#00h
; mov 49h,#efh
;setc10: inc 38h
; mov a,38h
; cjne a,#3eh,setc101
; mov 38h,#00h
;setc101:mov b,#10h
; div ab
; mov 34h,a
; mov 35h,b
; ret
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -