矩阵按键可以说是51单片机一个比较典型的输入型的外设。它可以让人与单片机更好的进行交互。

这一小节打算写一个4X4的矩阵按键。至于2X8 , 3X4 ,3X3 这些类型的其实他们的原理都是一样的。可以仿4X4的来写。

矩阵按键扫描原理

这里使用的是8个IO口控制16个按键。

其实原理也很简单,就是对每一行一次进行扫描。比如在图中标号0处(第一行)给一个低电平,如果第一行有按键被按下,那么通过读取标号4、5、6、7处的电平就可以知道是第一行的哪一个按键被按下。其他行也是一样。

先对第一行进行扫描。

KEY_SCAN:
START:MOV P1,#0FFH//1、先扫描第一行MOV R2,#0            ;用来记录行号(第0行)MOV P1, #0FEH        ;1111 1110 P1.0为低电平。MOV A,P1                 ;读取P1口的电平状态ANL A,#0F0H           ;通过逻辑与读取P1口的高四位的电平状态CJNE A,#0F0H,ON       /*判断读取的电平状态经过逻辑与后是否等于1111 0000,如果等于1111 0000说明没有按键按下,反之有按键按下。如果没有按键按下就继续扫描第二行。*/

对第二行的扫描

//2、扫描第二行MOV R2,#1            ;记录行号MOV P1, #0FDH        ;1111 1101   P1.1为低电平MOV A,P1     ANL A,#0F0H            ;读取电平状态并进行逻辑与CJNE A,#0F0H,ON

以此类推

对第三行和第四行的扫描

//3、扫描第三行MOV R2,#2MOV P1, #0FBH        ;1111 1011MOV A,P1     ANL A,#0F0HCJNE A,#0F0H,ON//4、扫描第四行MOV R2,#3MOV P1, #0F7H        ;1111 0111MOV A,P1     ANL A,#0F0HCJNE A,#0F0H,ONJMP CHU

值得注意的是这一句

CJNE A,#0F0H,ON

如果如果不等于1111 0000说明有按键按下,程序跳转到 ON处。

ON:  MOV R1,A   ;将读取到的值存放在R1中待用。

在对第三行和第四行的扫描结束后如果都没有按键按下会到这一句:  JMP CHU

CHU:RET

直接结束扫描函数。

至此当有按键按下时我们会得到两个数据 行号、读取到(经过逻辑与后)的P1口数据分别放在R2,R1寄存器中。

现在我们要做的就是把这两个数据转换成0~F对应的要显示的数据。

CHANGE:  MOV A,R2                    ;读取行号MOV B,#4                        MUL AB                       ;让A=行号*4=对应行的第一个按键所对应的显示值;(因为这里是4X4矩阵键盘); 行号:0   乘后的结果:0; 行号:1   乘后的结果:4; 行号:2   乘后的结果:8; 行号:3   乘后的结果:CMOV R2,A                    ;将乘后的结果重新赋值给R2MOV A,R1                    SWAP A                        ;半字节就交换。E0:         CJNE A,#0EH,D0            ;如果半字节交换后等于 0000 1110说明是该行的第一 MOV R1,#0                ;个按键被按下,对R1赋值0 ,如果不等于则跳到下一个D0:       CJNE A,#0DH,B0            MOV R1,#1
B0:       CJNE A,#0BH,LASTMOV R1,#2
LAST:       CJNE A,#07H,ERMOV R1,#3ER:          MOV A,R2        ADD A,R1                    ;最后将重新赋好的值相加就得到了对应的显示值。MOV R0,A                     

把转换好的数据放在R0寄存器中。

然后就是显示的控制了

DISPLAY:MOV DPTR ,#TAB            MOV A,R0              MOVC A,@A+DPTR            ;变址寻址MOV P2,A                CLR ARET;共阴数码管的编码 输入3FH时显示数字0,以此类推  ,分别显示0~FTAB: DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH,77H,7cH,39H,5eH,79H,71H

这里给一个完整的程序

 ORG 0000HLJMP MAINDISPLAY:MOV DPTR ,#TABMOV A,R0               MOVC A,@A+DPTRMOV P2,ACLR ARET
KEY_SCAN:
START:MOV P1,#0FFH//1、先扫描第一行MOV R2,#0MOV P1, #0FEHMOV A,P1   ANL A,#0F0HCJNE A,#0F0H,ON//2、扫描第二行MOV R2,#1MOV P1, #0FDHMOV A,P1   ANL A,#0F0HCJNE A,#0F0H,ON//3、扫描第三行MOV R2,#2MOV P1, #0FBHMOV A,P1   ANL A,#0F0HCJNE A,#0F0H,ON//4、扫描第四行MOV R2,#3MOV P1, #0F7HMOV A,P1   ANL A,#0F0HCJNE A,#0F0H,ONJMP CHU
ON:  MOV R1,A
CHANGE:  MOV A,R2MOV B,#4MUL ABMOV R2,A//E D B 7MOV A,R1SWAP A
E0:       CJNE A,#0EH,D0MOV R1,#0
D0:       CJNE A,#0DH,B0MOV R1,#1
B0:       CJNE A,#0BH,LASTMOV R1,#2
LAST:       CJNE A,#07H,ERMOV R1,#3
ER:         MOV A,R2        ADD A,R1MOV R0,A
CHU:RETMAIN:
F1:     ACALL  KEY_SCANACALL  DISPLAYJMP F1TAB: DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH,77H,7cH,39H,5eH,79H,71HEND

仿真电路图:

矩阵键盘的程序+仿真 度盘自取

链接:https://pan.baidu.com/s/1jH5wYGY-kki2SB957ex29Q 
提取码:sg6j


最后在给一个之前为期末准备的2*8矩阵键盘+IO口扩展+流水灯的实例。

度盘自取

链接:https://pan.baidu.com/s/1dQtBQqXKwYiBS8UReP6Pvg 
提取码:3bjy

----------------------------------------------------------结束-----------------------------------------------------------------

51汇编——矩阵键盘相关推荐

  1. c51单片机矩阵键盘1602计算器_基于51单片机矩阵键盘的简易计算器制作

    1. 运算过程.符号公式实时显示在显示屏上(I2C 1602). 2. 自带三角函数.开根号.平方运算. 3. 计算得出的结果可设置保存并用以下一次计算. 4. 所有运算结果精确到至少小数点后两位. ...

  2. 51单片机矩阵键盘的控制原理-扫描及使用方式

    矩阵键盘 矩阵键盘一般和之前学的LCD1602液晶屏一起控制,建议先看一下之前的博客学习一下液晶屏的使用. 当然矩阵键盘也可以和数码管和LED等一起操作,但是数码管需要扫描,很费CPU,LED又不能直 ...

  3. 51单片机矩阵键盘——数码管显示

    1.前言 当我们熟悉了数码管的位选与段选,并了解的矩阵键盘的扫描之后就可以编写程序了. 1.1实验现象 按下矩阵键盘S1并松开,数码管第一位(LED8)显示0:按下矩阵键盘S2并松开,数码管第一位显示 ...

  4. 51单片机矩阵键盘——LCD1602显示

    1.前言 本次的实验需要用到LCD1602液晶屏,需要用到LCD1602.c 与LCD1602.h文件链接: https://download.csdn.net/download/YLG_lin/86 ...

  5. 51单片机矩阵键盘扫描及使用方法

    一.矩阵键盘简介 矩阵键盘,也称矩阵按键,是为了节约单片机IO口占用所引入的一种外设. (图片截取至普中A2开发板原理图) (图片截取至普中A2开发板实物图) 我们知道,一个独立按键需要1个IO口.但 ...

  6. 51的矩阵键盘(4*4)的原理与实现

    个人感觉,这个矩阵键盘的出现,就是为了减少串行口的使用,像这个4*4的矩阵键盘,8个串行口就可以控制16键,而如果是普通的则需要16个串行口,同样的效果,串行口的使用减少了一般,对于串行口资源紧张的情 ...

  7. 51单片机矩阵键盘C程序

    飞哥语录:别高估关系,别低估人心. 主程序1: void main() {uchar i,j,ki=0;j=0;while(1){i=key();//键盘循环扫描,其值赋给变量数组tableif(i! ...

  8. 按键(独立按键、矩阵键盘)——附带程序

    按键 一.独立按键: 简介: 消抖: 代码: 二.矩阵键盘 : 行列反转扫描法: 按键对照表: 三.矩阵键盘实验 效果展示: 仿真电路图: 代码: 一.独立按键: 简介: 接触式按键,又叫轻触开关 接 ...

  9. c51单片机矩阵键盘1602计算器_51单片机矩阵键盘计算器.doc

    51单片机矩阵键盘计算器 51单片机矩阵键盘计算器 /**********413暑假作品*********12864液晶显示屏,结合4*4矩阵键盘,简易计算器*,存储地址:STC-hex2 , LCD ...

  10. 【51单片机】矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤

    [51单片机]矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤 一.环境 二.硬件部分 1. Proteus新建工程 2. 添加元件 3.连接线路 4.硬件效果 三.软件部分 1 ...

最新文章

  1. 105_键盘事件对象
  2. 计算机删除qq用户信息吗,电脑中删除qq资料生日性别的方法
  3. FutureTask的使用
  4. 我的10年富士康故事
  5. 优化Java序列化– Java,XML,JSON,Kryo,POF
  6. 迷宫搜索问题最短路_【算法常用模板】总结(更新中)
  7. Python GUI设计 PythonWx
  8. c 获得java数据,获得jar中数据,获得jar数据,// example c
  9. 更改VMware硬盘大小
  10. python学起来很蛋疼_一个初学者的辛酸路程-了解Python-2
  11. Webuploader 出坑记
  12. 烽火服务器安装系统,烽火服务器进入bios配置
  13. 期望收益率、方差、协方差、相关系数的计算公式
  14. REST,以及RESTful的讲解
  15. 使用 Convex 进行状态管理的指南
  16. 组织行为学笔记(3)——情绪和心情
  17. 《数学史概论》读后感
  18. CAD中样条曲线Spline怎样才能分解成多段弧arc?
  19. Excel用函数把时间戳格式和日期格式相互转换
  20. 如何做华为云服务器迁移?

热门文章

  1. 使用VsCode搭建Vue开发环境
  2. Win10/Win11:恢复Win7照片查看器
  3. 系统分析与设计:笔记整理
  4. [Excel函数]--intercept函数
  5. Oracle批量导出Hive建表语句
  6. jmeter录制 过滤_jmeter脚本录制方法:
  7. 二路归并排序Python实现-II
  8. 简单计算器代码(含加减乘除取余5个操作)
  9. 大话设计模式 设计模式书籍 编程书籍
  10. HIVE Sql 笛卡尔积关联导致查询过慢问题优化