📄 8155-成功.asm
字号:
OUTBIT EQU 0E101H
CLK_DAT EQU 0E102H
IN_KEY EQU 0E103H
MOV R0,#79H
MOV R2,#00H ;暂存取得的字型码,它将在填充缓存子程序中使用
MOV R3,#00H ;用于取得键值后,键值暂存此中
MOV 70H,#10H ;70h放置速度系数
MOV 71H,#00H ;71h=00h,表示右移,01h表示左移
MOV 7AH,#0B0H
MOV DPTR,#0E100H ;初始化8155
MOV A,#03H
MOVX @DPTR,A
FILL: ACALL FILLFUL ;填充数据缓冲区
MOV A,70H
MOV 72H,A
DIS_CAL:ACALL KEY_SCAN ;检测是否有键按下
JNZ DEAL ;有键按下,则跳出程序主线,转去键处理
ACALL DISPLAY
DJNZ 72H,DIS_CAL ;速度系数循环完,则应改变字位
SJMP FILL
DEAL: ACALL DISPLAY
ACALL DISPLAY ;消抖动
ACALL KEY_SCAN ;确认有键按下吗?
JZ FILL ;无键按下则跳回主线,继续显示
ACALL GET_KEY ;取键值
ACALL GET_K_NUM ;计算键代码
MOV A,R3
CLR C
SUBB A,#10H
JNC FUN_KEY ;键码大于10h,则为功能键,转去功能键判断
KFREE_0:MOV A,R3
MOV R2,A ;把键码装入R2,以供填充缓冲使用
ACALL CORRECT ;字位修正,以免字位跳动不均匀
ACALL FILLFUL ;由于字型改变了 ,因而要重新装入字型
DIS_IT: ACALL DISPLAY ;;;;;;;;;;;
ACALL KEY_SCAN
JZ KILL_REMAIN
DJNZ 72H,DIS_IT
WAIT_FREE: ACALL FILLFUL
MOV A,70H
MOV 72H,A
WAIT_DIS:ACALL DISPLAY ;等待键释放,并且维持显示
ACALL KEY_SCAN
JZ KILL_REMAIN
DJNZ 72H,WAIT_DIS
SJMP WAIT_FREE
KILL_REMAIN:ACALL DISPLAY
ACALL KEY_SCAN
JNZ DEAL
DJNZ 72H,KILL_REMAIN
OUT_OT_0:SJMP FILL ;;;;;;;;;;;;;
FUN_KEY:CJNE R3,#15H,CON_COMP ;功能键判断,是右移键吗?
MOV B,#00H
MOV A,71H
CJNE A,B,COR_LR
SJMP KFREE
COR_LR: MOV 71H,#00H
ACALL CORRECT1
SJMP KFREE
CON_COMP:CJNE R3,#16H,NEXT2 ;是左移键吗?
MOV B,#01H
MOV A,71H
CJNE A,B,CO_LR2
SJMP KFREE
CO_LR2: MOV 71H,#01H
ACALL CORRECT2
SJMP KFREE
NEXT2: CJNE R3,#13H,NEXT3 ;是加速键吗?
MOV A,70H
JB ACC.0,KFREE
RR A ;把现在时间常数下降一个数量级
MOV 70H,A
MOV A,72H
JB ACC.0,KFREE
RR A
MOV 72H,A
SJMP KFREE
NEXT3: CJNE R3,#12H,SPEED ;是减速键吗?
MOV A,70H
JB ACC.7,KFREE
RL A
MOV 70H,A
SJMP KFREE
SPEED: ACALL COMPUTE ;是其余的功能键,则用于直接控制速度
KFREE: ACALL DISPLAY ;;;;;;;;;;;;;
ACALL KEY_SCAN
JZ OUT_OT
DJNZ 72H,KFREE
CON_FIL:ACALL FILLFUL
MOV A,70H
MOV 72H,A
DIS_F: ACALL DISPLAY ;等待键释放
ACALL KEY_SCAN
JZ OUT_OT
DJNZ 72H,DIS_F
SJMP CON_FIL
OUT_OT: ACALL DISPLAY
ACALL KEY_SCAN
JNZ DEAL_NEW
DJNZ 72H,OUT_OT
LJMP FILL
DEAL_NEW:LJMP DEAL ;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;填充缓冲子程序;;;;;;;;;;;;;;;
FILLFUL:MOV R1,#79H
GO_ON: MOV @R1,#10H
INC R1
CJNE R1,#7FH,GO_ON
MOV A,R2
MOV @R0,A
MOV A,71H
CJNE A,#00H,LEFT
INC R0
CJNE R0,#7FH,OUT
MOV R0,#79H
SJMP OUT
LEFT: DEC R0
CJNE R0,#78H,OUT
MOV R0,#7EH
OUT: RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;通用显示子程序;;;;;;;;;;;;;;;;;;;
DISPLAY:MOV R1,#79H
MOV R3,#20H
NEXT_XT:MOV DPTR,#0E101H
MOV A,#00H
MOVX @DPTR,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 74H,#08H
SEND_164:MOV R5,A
SEND_RE:MOV A,R5
RL A
MOV R5,A
ANL A,#0FDH
MOV DPTR,#0E102H
MOVX @DPTR,A
ORL A,#02H
MOVX @DPTR,A
ANL A,#0FDH
MOVX @DPTR,A
DJNZ 74H,SEND_RE
MOV DPTR,#0E101H
MOV A,R3
MOVX @DPTR,A
ACALL DELAYT
MOV DPTR,#0E101H
MOV A,#00H
MOVX @DPTR,A
MOV A,R3
RR A
MOV R3,A
INC R1
CJNE R1,#7FH,NEXT_XT
RET
;;;延时子程序在;;;
DELAYT:MOV R7,#02H
DLY1: MOV R6,#0
DLY2: DJNZ R6,DLY2
DJNZ R7,DLY1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;键扫描子程序、取键值子程序和计算键码子程序#
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -