51单片机汇编矩阵键盘与显示系统

代码部分:

ORG 0000H
SEG_MAIN: 
		ACALL LCD
		ACALL INIT
		ACALL WRITE
		ACALL SHOW1
		ACALL SHOW2
START:
		FIR BIT P1.0
		SEC BIT P1.1
		THI BIT P1.2
		FOU BIT P1.3
		MOV R1,#0
		MOV R2,#0
		MOV R3,#0
		MOV R4,#0
		MOV R5,#0
		AJMP START1
DISPLAY:
		MOV B,R3
		MOV R4,B
		MOV B,R2
		MOV R3,B
		MOV B,R1
		MOV R2,B
		MOV R1,A
		MOV DPTR ,#TAB
DIS1:	SETB FIR
		MOV A,R1
		MOVC A,@A+DPTR
		MOV P0,A
		ACALL DELAY
		CLR FIR
DIS2:	SETB SEC
		MOV A,R2			   
		MOVC A,@A+DPTR
		MOV P0,A
		ACALL DELAY
		CLR SEC
DIS3:	SETB THI
		MOV A,R3			   
		MOVC A,@A+DPTR
		MOV P0,A
		ACALL DELAY
		CLR THI
DIS4: 	SETB FOU
		MOV A,R4			   
		MOVC A,@A+DPTR
		MOV P0,A
		ACALL DELAY
		CLR FOU
		CJNE R5,#0,START2
		AJMP START1
DELAY:						
		MOV		R6, #02H		
	D1:						
		MOV		R7, #0FAH		
	D2:		
		DJNZ	R7, D2			
		DJNZ	R6, D1			
		RET
START1:	
		MOV P2,#0F0H
		MOV A,P2
		CJNE A,#0F0H,NEXT1
		AJMP DIS1
START2:
		MOV P2,#0F0H
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是51单片机矩阵键盘汇编代码的参考示例: ``` ; 4x4矩阵键盘扫描程序 ; 按键扫描程序,扫描4x4矩阵键盘 ; 输出按键的键值到P0口 ORG 0H ; 程序起始地址 START: MOV P0, #0FFH ; P0口初始化为高电平 MOV P1, #0FH ; P1口初始化为输出,设置为行扫描 MOV P2, #0FH ; P2口初始化为输入,设置为列扫描 LOOP: CLR C ; 清除进位标志 MOV A, P2 ; 将P2口的值读入A寄存器 ANL A, #0FH ; 将A寄存器的值与0FH进行按位与运算 MOV P1, A ; 将A寄存器的值输出到P1口 MOV A, P2 ; 再次将P2口的值读入A寄存器 ANL A, #0FH ; 再次将A寄存器的值与0FH进行按位与运算 CJNE A, #0FH, SCAN ; 如果A寄存器的值不是0FH,则跳转到SCAN进行键值扫描 JMP LOOP ; 如果A寄存器的值是0FH,则一直循环 SCAN: MOV R0, #0 ; R0寄存器清零 MOV A, P2 ; 将P2口的值读入A寄存器 ANL A, #0FH ; 将A寄存器的值与0FH进行按位与运算 MOV R1, A ; 将A寄存器的值存入R1寄存器 ORL A, #0F0H ; 将A寄存器的值与0F0H进行按位或运算 MOV P0, A ; 将A寄存器的值输出到P0口 MOV A, P2 ; 再次将P2口的值读入A寄存器 ANL A, #0FH ; 再次将A寄存器的值与0FH进行按位与运算 CLR C ; 清除进位标志 ADD A, R0 ; 将A寄存器的值与R0寄存器的值进行加法运算,结果存入A寄存器 MOV R0, A ; 将A寄存器的值存入R0寄存器 INC R1 ; R1寄存器自增1 CJNE R1, #4, SCAN ; 如果R1寄存器的值不等于4,则跳转到SCAN进行键值扫描 MOV A, R0 ; 将R0寄存器的值存入A寄存器 MOV P1, #0FH ; 将P1口的值初始化为输入 CPL A ; 对A寄存器的值进行按位取反运算 ANL A, #0FH ; 将A寄存器的值与0FH进行按位与运算 ORL A, #0F0H ; 将A寄存器的值与0F0H进行按位或运算 MOV P0, A ; 将A寄存器的值输出到P0口 JMP LOOP ; 跳转到LOOP进行下一轮扫描 ``` 这段代码实现了对4x4矩阵键盘的扫描,并将扫描结果输出到P0口。在程序中,先将P0口初始化为高电平,P1口初始化为输出,P2口初始化为输入。然后循环扫描P2口的值,如果P2口的值不是0FH,则跳转到SCAN进行键值扫描。在SCAN中,首先将R0寄存器清零,然后逐行扫描矩阵键盘,将扫描结果存入R0寄存器中。最后将R0寄存器的值输出到P0口,然后跳转回LOOP进行下一轮扫描。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值