⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8255.asm

📁 利用单片机控制的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 + -