?? text1.asm
字號:
org 0000h
ljmp main
org 000bh
ljmp int
org 0023h
ljmp sint
org 0100h
main: ;初始LED顯示零
mov 70h, #00
mov 71h, #00
mov 72h, #00
mov 73h, #00
mov r0, # 5
kaishi: ;初始化
acall display
acall display
mov r4, #20
mov tmod, #21h
mov tl0, #0b0h
mov th0, #3ch
mov tl1, #0f3h
mov th1, #0f3h
mov scon, #50h
setb tr1
setb et0
setb ea
panduan:lcall keyboard
mov 76h, a
pana:
clr c
subb a, #10 ;設A為定時加
jnz panb
mov r4, #20
mov 30h, #1
mov 31h, #0
acall dingshi
ajmp panduan
panb:
mov a, 76h
clr c
subb a, #11 ;設B為定時減
jnz panc
mov r4, #20
mov 31h, #1
mov 30h, #0
acall dingshi
ajmp panduan
panc: mov a, 76h
clr c
subb a, #12 ;設C為串行口發送數據
jnz pand
acall chuanxing
ajmp kaishi
pand: mov a, 76h
clr c
subb a, #13 ;設D為接受數據控制鍵
jnz panf
mov r0, #74h
setb es
ajmp kaishi
panf: mov a, 76h
clr c
subb a, #15 ;設F為暫停鍵
jnz pane
acall zanting
acall panduan
pane: mov a, 76h
clr c
subb a, #14 ;設E為清零鍵
jnz hui
acall clear
acall panduan
hui: mov a, 76h
lcall siwei
lcall display
ajmp kaishi
keyboard:
acall ks ;判斷有無鍵按下
jnz k_1
lcall display
ljmp keyboard
k_1:
lcall display ;消抖
acall ks
jz keyboard
k_2:
mov r5, #00h
mov r4, #0feh
key:
mov p1, r4
mov a, p1
anl a, #0f0h
key0:
jb acc.4, key1
mov a, #0
ljmp knum
key1:
jb acc.5, key2
mov a, #1
ljmp knum
key2:
jb acc.6, key3
mov a, #2
ljmp knum
key3:
jb acc.7, next
mov a, #3
knum:
add a, r5
push acc
halt:
acall delay
acall ks
jnz halt
pop acc
ret
next:
mov a, r5
add a, #4
mov r5, a
mov a, r4
jnb acc.3, keyboard
rl a
mov r4, a
ljmp key
ks: ;有無閉合鍵判斷子程序
mov p1, #0f0h
nop
mov a, p1
cpl a
anl a, #0f0h
ret
delay: mov r6, #4h ;延時子程序
mov r7, #250
loop: djnz r7, $
djnz r6, loop
ret
display:
mov dptr, #table ;查表顯示
mov r1, #70h
MOV R2, #0EFH ;取最右邊一個
MOV R3, #4
play:
mov a, @r1
movc a , @a+dptr
mov p0, a
mov p2, r2
acall delay
inc r1
mov a, r2
rl a
mov r2, a
djnz r3, play
acall ks
jz display
ret
siwei: ;輸入夠四位循環
djnz r0, shuchuan
mov r0, #4
mov 73h, #16
mov 72h, #16
mov 71h, #16
mov 70h, a
ret
shuchuan:
mov 73h, 72h
mov 72h, 71h
mov 71h, 70h
mov 70h, a
ret
;=======================================================功能實現
dingshi:
setb tr0
lcall display
lcall ks
jz dingshi
clr tr0
setb p3.4
ret
djnz r4, outz
mov r4, #20
mov a, 30h
jnz zeng
mov a, 31h
jnz jian
;**************定時加********************
zeng:
inc 70h
mov a, 70h
cjne a, #10, outz
setb p3.4
zz0: inc 71h
mov 70h, #00h
mov a, 71h
cjne a, #10, outz
clr p3.4
zz1:
inc 72h
mov 71h, #00h
mov a, 72h
cjne a, #10, outz
zz2:
inc 73h
mov 72h, #00h
mov a, 72h
cjne a, #10, outz
;*******************定時減******************
jian:
mov a, 70h
cjne a,#0,PP
mov 70h,#9
mov a,71h
cjne a,#0,QQ
mov 71h,#9
mov a,72h
cjne a,#0,JJ
mov 72h,#9
mov a,73h
cjne a,#0,YY
mov 73h,#9
ajmp outz
PP: dec 70h
ajmp outz
QQ: dec 71h
ajmp outz
JJ: dec 71h
ajmp outz
YY: dec 73h
outz:
mov tl0, #0b0h
mov th0, #3ch
reti
;***************串行通信********************
chuanxing:
clr es
mov r0, #74h
sout:
dec r0
mov sbuf, @r0
jnb ti, $
clr ti
cjne r0, #70h, sout
ret
sint:
dec r0
mov @r0, sbuf
clr ri
cjne r0, #70h, bbbb
clr es
bbbb:
reti
;***************暫停****************************
zanting:
clr ea
acall kaishi
ret
;***************清零*****************************
clear:
MOV 70H, #0
MOV 71H, #0
MOV 72H, #0
MOV 73H, #0
ret
;===========================LED段碼表
table:
db 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h, 80h, 90h
db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -