📄 课程设计.txt
字号:
JIA BIT 00H ;标志位
JIAN BIT 01H ;标志位
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INT
ORG 0023H
AJMP chuan
ORG 0100H
;*****************************主程序*******************************
MAIN:
MOV SP, #80H
MOV 70H, #0
MOV 71H, #0
MOV 72H, #0
MOV 73H, #0
CLR JIA
CLR JIAN
kaishi:
lcall disp
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
MOV 75H, #4
MM: ACALL keybord
CJNE A, #0AH, K1 ;按键A,加法
SETB JIA
CLR JIAN
SETB TR0
AJMP kaishi
K1:
CJNE A, #0BH, K2 ;按键B,减法
SETB JIAN
CLR JIA
SETB TR0
AJMP kaishi
K2:
CJNE A, #0CH, K3 ;按键C,清零
ACALL CLEAR
AJMP kaishi
K3:
CJNE A, #0DH, K4 ;按键D,暂停
ACALL ZANTING
AJMP kaishi
K4:
CJNE A, #0EH, K5 ;设E为串行口发送数据
clr es
acall sout
ajmp kaishi
k5:
CJNE A, #0FH, k6 ;设F为接受数据控制键
mov r1, #6fh
setb es
ajmp kaishi
k6:
lcall kong
lcall disp
ajmp kaishi
;启用r4,r5
;**************************键盘扫描********************************
keybord:
acall ks
jnz kM
lcall DISP
ljmp keybord
kM:
lcall DISP
acall ks
jz keybord
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 zhi
key1:
jb acc.5, key2 ;检测第二列
mov a, #1
ljmp zhi ;有键按下
key2:
jb acc.6, key3 ;检测第三列
mov a, #2
ljmp zhi ;有键按下
key3:
jb acc.7, next ;检测第四列
mov a, #3 ;有键按下
zhi:
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, keybord ;检测是否溢出
rl a
mov r4, a
ljmp key
ks:
mov p1, #0f0h ;检测是否有键按下
nop
mov a, p1
anl a, #0f0h
cpl a
anl a, #0f0h
ret
;启用r3
;****************************中断服务子程序****************************
INT:
DJNZ R3, S4
MOV R3, #20
ACALL JIAFA
ACALL JIANFA
S4: MOV TH0, #0B0H
MOV TL0, #3CH
JJ: RETI
;******************************清零*************************************
CLEAR:
MOV 70H, #0
MOV 71H, #0
MOV 72H, #0
MOV 73H, #0
CLR JIA
CLR JIAN
ACALL DISP
RET
;****************************自增子程序*********************************
JIAFA:
JNB JIA, JIA_OUT
MOV A, 73H ;个位
INC A
CJNE A, #10, S1
CLR A
INC 72H
S1:
MOV 73H, A
MOV A, 72H ;十位
CJNE A, #10, S2
CLR A
INC 71H
S2:
MOV 72H, A
MOV A, 71H ;百位
CJNE A, #10, S3
CLR A
INC 70H
S3: MOV 71H, A
MOV A, 70H ;千位
CJNE A, #10, S4
CLR A
MOV 70H, A
CLR P3.4 ;报警
JIA_OUT:
RET
;*****************************自减子程序*****************************
JIANFA:
JNB JIAN, JIAN_OUT
MOV A, 73H ;个位
DEC A
CJNE A, #255, L1
MOV A, #9
DEC 72H
L1:
MOV 73H, A
MOV A, 72H ;十位
CJNE A, #255, L2
MOV A, #9
DEC 71H
L2:
MOV 72H, A
MOV A, 71H ;百位
CJNE A, #255, L3
MOV A, #9
DEC 70H
L3:
MOV 71H, A
MOV A, 70H ;千位
CJNE A, #255, S4
MOV A, #9
MOV 70H, A
CLR P3.4 ;报警
JIAN_OUT:
RET
;*************************串行通讯中断服务程序*******************************
chuan:
inc r1
mov @r1, sbuf
clr ri
cjne r1, #73h, aa
clr es
aa:
reti
sout:
mov r0, #6fh
bb:
inc r0
mov sbuf, @r0
jnb ti, $
clr ti
cjne r0, #73h, bb
ret
;*********************** 暂停程序 ***************************
ZANTING:
CLR JIA
CLR JIAN
ACALL DISP
RET
;*************控制输出***************
kong:
mov r0, #73h
mov 70h, 71h
mov 71h, 72h
mov 72h, 73h
mov @r0, a
ret
;R0,R2,R5显示
;*************************显示子程序*****************************
DISP:
MOV R0, #70H
MOV R2, #7FH
MOV R5, #4
MOV DPTR, #TAB
TT: MOV A, @R0
MOVC A, @A+DPTR
MOV P0, A
MOV P2, R2
INC R0
MOV A, R2
RR A
MOV R2, A
ACALL DELAY1
DJNZ R5, TT
RET
;R6,R7延时
;************************延时20ms*********************************
DELAY: MOV R6, #20
LOOP1: MOV R7, #250
DJNZ R7, $
DJNZ R6, LOOP1
RET
;************************延时2ms*********************************
DELAY1: MOV R6, #4
LOOP2: MOV R7, #250
DJNZ R7, $
DJNZ R6, LOOP2
RET
;***********************共阳段码表*******************************
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H,88H
DB 83H,0C6H,0A1H,86H,08EH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -