单片机89S51,4×4矩阵键盘,控制16个发光二极管

用单片机89S51,4×4矩阵键盘,控制16个发光二极管,程序有点错误哪位高手给指点一下。
我所做的矩阵键盘控制的发光二极管只有8个亮8个不亮,和P2口连接的亮和P0口连接的不亮,高手给点意见。
悬赏分:15                     2010-7-20 20:02
===========================================================
回答:

下列程序已经经过了 PROTEUS 验证,可以满足题目要求。

;----------------------------------------------------------
       ORG  0000H
START:
       MOV  P0, #0        ;显示初始化
       MOV  P2, #0        ;全亮
;----------------------------------------------------------
M_LOOP:
       CALL KEY_SCAN
       JB   ACC.4, M_LOOP ;A=16, 就是没有按下键
       CALL DISPLAY
       SJMP M_LOOP
;----------------------------------------------------------
KEY_SCAN:                 ;用反转法扫描键盘
       PUSH B
       CLR  A             ;将用A保存按键信息
       MOV  P3, #0FH      ;列线置低电平,行线置高电平
       MOV  B, P3
       JNB  B.0, L_J0     ;逐行扫描
       JNB  B.1, L_J1
       JNB  B.2, L_J2
       JNB  B.3, L_J3
       MOV  A, #16        ;没有按键,A=16
       SJMP KEY_END
;------------------------------
L_J3:  INC  ACC           ;加行值
L_J2:  INC  ACC
L_J1:  INC  ACC
L_J0:  RL   A             ;行号×4
       RL   A
;------------------------------
       MOV  P3, #0F0H     ;行线列线电平互换
       MOV  B, P3
       JNB  B.4, R_J0     ;逐列扫描
       JNB  B.5, R_J1
       JNB  B.6, R_J2
       JNB  B.7, R_J3
       MOV  A, #16
       SJMP KEY_END
;------------------------------
R_J3:  INC  ACC           ;加列值
R_J2:  INC  ACC
R_J1:  INC  ACC
R_J0:                     ;A=0~F
KEY_END:
       POP B
       RET       
;----------------------------------------------------------
DISPLAY:
       MOV  P1, A         ;输出到数码显示器
       RL   A             ;乘以2,因为每个键值要显示两个字节
       MOV  B,  A         ;保存
       MOV  DPTR, #TABLE1 ;显示码表首地址
       MOVC A, @A+DPTR    ;根据键值查显示码
       MOV  P2, A         ;输出显示
       MOV  A, B
       INC  A             ;准备查第二字节
       MOVC A, @A+DPTR    ;根据键值查显示码
       MOV  P0, A
       RET
;----------------------------------------------------------
TABLE1:
       DB 00H, 01H, 00H, 02H, 00H, 04H, 00H, 08H
       DB 00H, 10H, 00H, 20H, 00H, 40H, 00H, 80H
       DB 01H, 00H, 02H, 00H, 04H, 00H, 08H, 00H
       DB 10H, 00H, 20H, 00H, 40H, 00H, 80H, 00H
END
;----------------------------------------------------------
用PROTEUS仿真图像如下:

单片机89S51,4×4矩阵键盘,控制16个发光二极管 - 非著名博主 - 电子信息角落

图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/88bfff32924082b91b4cff43.html

原题网址:http://zhidao.baidu.com/question/168457229.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值