📄 8255.asm
字号:
ORG 0000H
AJMP MAIN
ORG 0010H
MAIN:
MOV P2,#01H ;使全部的数码管处于被选择状态
MOV DPTR,#7FFFH ;初始数据指针(启动控制字)
MOV A,#89H ;A口方式0输出C口上半部输入下半部输出
MOVX @DPTR,A ;片外寻址
ROW1: MOV DPTR,#7CFFH ;初始数据指针(启动口A)
MOV A,#0FEH ;累加器送数据(扫描第一列)
MOVX @DPTR,A ;将数据输入到8255中
MOV DPTR,#7EFFH ;初始数据指针(启动口C)
RPT1: MOVX A,@DPTR ;将数据送到累加器中
L1:
CJNE A,#0FEH,L2 ;如果送来的数据和0FEH做比较
MOV P0,#0C0H ;如果相同 则数码管显示0
LCALL DELAY ;延时去抖
LCALL DELAY
LCALL DELAY
LCALL DELAY
L2:
CJNE A,#0FDH,L3 ;如果送来的数据和0FDH做比较
MOV P0,#0F9H ;如果相同 则数码管显示1
LCALL DELAY ;延时去抖
LCALL DELAY
LCALL DELAY
LCALL DELAY
L3:
CJNE A,#0FBH,L4 ;如果送来的数据和0FBH做比较
MOV P0,#0A4H ;如果相同 则数码管显示2
LCALL DELAY ;延时去抖
LCALL DELAY
L4:
CJNE A,#0F7H,ROW2 ;如果送来的数据和0F7H做比较
MOV P0,#0B0H ;如果相同 则数码管显示3
LCALL DELAY ;延时去抖
LCALL DELAY
ROW2: MOV DPTR,#7CFFH ;初始数据指针(启动口A)
MOV A,#0FDH ;累加器送数据(扫描第二列)
MOVX @DPTR,A ;将数据输入到8255中
MOV DPTR,#7EFFH ;初始数据指针(启动口C)
RPT2: MOVX A,@DPTR ;将数据送到累加器中
LL1:
CJNE A,#0FEH,LL2 ;如果送来的数据和0FEH做比较
MOV P0,#99H ;如果相同 则数码管显示4
LCALL DELAY ;延时去抖
LCALL DELAY
LL2:
CJNE A,#0FDH,LL3 ;如果送来的数据和0FDH做比较
MOV P0,#92H ;如果相同 则数码管显示5
LCALL DELAY ;延时去抖
LCALL DELAY
LL3:
CJNE A,#0FBH,LL4 ;如果送来的数据和0FBH做比较
MOV P0,#82H ;如果相同 则数码管显示6
LCALL DELAY ;延时去抖
LCALL DELAY
LL4:
CJNE A,#0F7H,ROW3 ;如果送来的数据和0F7H做比较
MOV P0,#0F8H ;如果相同 则数码管显示7
LCALL DELAY ;延时去抖
LCALL DELAY
ROW3: MOV DPTR,#7CFFH ;初始数据指针(启动口A)
MOV A,#0FBH ;累加器送数据(扫描第三列)
MOVX @DPTR,A ;将数据输入到8255中
MOV DPTR,#7EFFH ;初始数据指针(启动口C)
RPT3: MOVX A,@DPTR ;将数据送到累加器中
LLL1:
CJNE A,#0FEH,LLL2 ;如果送来的数据和0FEH做比较
MOV P0,#80H ;如果相同 则数码管显示8
LCALL DELAY ;延时去抖
LCALL DELAY
LLL2:
CJNE A,#0FDH,LLL3 ;如果送来的数据和0FDH做比较
MOV P0,#90H ;如果相同 则数码管显示9
LCALL DELAY ;延时去抖
LCALL DELAY
LLL3:
CJNE A,#0FBH,LLL4 ;如果送来的数据和0FBH做比较
MOV P0,#88H ;如果相同 则数码管显示A
LCALL DELAY ;延时去抖
LCALL DELAY
LLL4:
CJNE A,#0F7H,ROW4 ;如果送来的数据和0F7H做比较
MOV P0,#83H ;如果相同 则数码管显示B
LCALL DELAY ;延时去抖
LCALL DELAY
ROW4: MOV DPTR,#7CFFH ;初始数据指针(启动口A)
MOV A,#0F7H ;累加器送数据(扫描第四列)
MOVX @DPTR,A ;将数据输入到8255中
MOV DPTR,#7EFFH ;初始数据指针(启动口C)
RPT4: MOVX A,@DPTR ;将数据送到累加器中
LLLL1:
CJNE A,#0FEH,LLLL2 ;如果送来的数据和0FEH做比较
MOV P0,#0C6H ;如果相同 则数码管显示C
LCALL DELAY ;延时去抖
LCALL DELAY
LLLL2:
CJNE A,#0FDH,LLLL3 ;如果送来的数据和0FDH做比较
MOV P0,#0A1H ;如果相同 则数码管显示D
LCALL DELAY ;延时去抖
LCALL DELAY
LLLL3:
CJNE A,#0FBH,LLLL4 ;如果送来的数据和0FBH做比较
MOV P0,#86H ;如果相同 则数码管显示E
LCALL DELAY ;延时去抖
LCALL DELAY
LLLL4:
CJNE A,#0F7H,ROW5 ;如果送来的数据和0F7H做比较
MOV P0,#8EH ;如果相同 则数码管显示F
LCALL DELAY ;延时去抖
LCALL DELAY
ROW5: LJMP ROW1 ;从头扫描
DELAY: MOV R7,#250 ;延时500us去抖
DJNZ R7,$
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -