?? shuzizhong.txt
字號:
ORG 0000H
sec EQU 30H ;秒各位
sect EQU 31H ;秒十位
min EQU 32H ;分個位
mint EQU 33H ;分十位
hour EQU 34H ;時各位
hourt EQU 35H ;時十位
LJMP START ;跳轉
ORG 0100H
START:
CLR sec ;對各位賦零
CLR sect
CLR min
CLR mint
CLR hour
CLR hourt
stloop: //;開始計時
ACALL DISP //2;調用顯示
INC sec //1;秒個位加1
MOV A, sec //1
CJNE A, #10, stloop //2;秒個位不為10,則繼續計時
MOV sec, #00H //1;秒個位為10,該位清零,并轉到秒十位計時
INC sect //1;秒十位加1
MOV A, sect //1
CJNE A, #6, stloop //2;秒十位不為6,則繼續計時
mov sect, #00H //1;秒十位為6,該位清零,并轉到分個位計時
INC min //1
MOV A, min //1
CJNE A, #10, stloop //2;分個位不為10,則繼續計時
mov min, #00H //1;分個位為10,該位清零,并轉到分十位計時
INC mint //1
MOV A, mint //1
CJNE A, #6, stloop //2;分十位不為6,則繼續計時
MOV mint, #00H //1;分十位為6,該位清零,并轉到時個位計時
/*下面是24進制的判斷和時的計時*/
MOV A, hourt //1
CJNE A, #2, h //2;判斷時十位是否為2,不為2就繼續計時
MOV A, hour //1
/*此處比較特殊,由于是顯示0~23,到22的時候就轉到h: ,就變成23了,
然后轉到stloop,延遲1秒,然后到下面這句,就清零了,即00~23計時*/
CJNE A, #3, h //2;
MOV hour, #00H //1,23顯示1秒后,就清零了
MOV hourt, #00H //1
AJMP stloop //2
h:
INC hour //1 若分的十位滿6,清零后時個位加1
MOV A, hour //1
CJNE A, #10, stloop //2 若時個位部滿10
MOV hour, #00H //1
INC hourt //1
AJMP stloop //2
/*下面是顯示程序*/
DISP:
MOV DPTR, #TABLE //2;TABLE的地址給DPTR指針
MOV R2, #6 //1;R2、R3后面DJNZ循環會用到.
D2:
MOV R3, #150 //1
loop:
MOV A, sec //1
MOVC A, @A+DPTR //2
MOV P1, A //1將秒個位數輸出到p1口
SETB P0.7 //1開秒個位的顯示
ACALL DELAY //2延時
CLR P0.7 //1關個位的顯示
MOV A, sect //1秒十位
MOVC A, @A+DPTR //2
MOV P1, A //1
SETB P0.6 //1
ACALL DELAY //2
CLR P0.6 //1
MOV P1, #0FDH //1顯示分隔符號
SETB P0.5 //1
ACALL DELAY //2
CLR P0.5 //1
MOV A, min //1分個位
MOVC A, @A+DPTR //2
MOV P1, A //1
SETB P0.4 //1
ACALL DELAY //2
CLR P0.4 //1
MOV A, mint //1分十位
MOVC A, @A+DPTR //2
MOV P1, A //1
SETB P0.3 //1
ACALL DELAY //2
CLR P0.3 //1
MOV P1, #0FDH //1分隔符
SETB P0.2 //1
ACALL DELAY //2
CLR P0.2 //1
MOV A, hour //1小時個位
MOVC A, @A+DPTR //2
MOV P1, A //1
SETB P0.1 //1
ACALL DELAY //2
CLR P0.1 //1
MOV A, hourt //1小時十位
MOVC A, @A+DPTR //2
MOV P1, A //1
SETB P0.0 //1
ACALL DELAY //2
CLR P0.0 //1
/*這里,和DELAY一起構成延時1s,另外還要將非延時指令
的指令周期算在內,以確保軟件上的最小誤差*/
DJNZ R3, loop //2不能DELAY太長時間,所以要各位循環顯示,看上去才不閃爍
DJNZ R2, D2 //2
RET
/*131個機器周期的DELAY*/
DELAY:
MOV R0, #10 //1
D1:
MOV R1, #5 //1
DJNZ R1, $ //2
DJNZ R0, D1 //2
RET
/*下面是共陽八位數碼管的0至9的段的數字表示*/
TABLE: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,1H,09H
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -