1.电路结构

行线Row0~3接到P0.0~P0.3端口,通过4个1K上拉电阻接+5V,置“1”,作为输入状态;列线Col0~3接到P2.0~P2.3端口,作为输出状态。按键设在行、列交点上。

2.原理:扫描法---逐一送低电平

在某一时刻只让一条列线处于低电平,均其余列线处于高电平。则当这一列有按键按下时,该键所在的电平将会有电平变为电平,可判定该列相应的行有键按下。

/*流程:当第0列处于低电平时,逐行查找是否有行线变低,若有,则第0列与该行的交叉点按键按下;若无,则表示第0列无键按下,再让下一列处于低电平,依次循环。

键值 =行号*4+列号        //KeyNum =Row*4+Col

/*第0列送低电平:若第0列无按键按下,则P0=0xff,temp=0x00。//temp=P0;temp=~temp%0x0f

若第0列第0行按键按下P0不全高,temp=0x01,Row=0,Col=0,KeyNum=Row*4+Col =0----可知按键0按下。

若第1列第0行按键按下P0不全高,temp=0x01,Row=0,Col=1,KeyNum=Row*4+Col =1----可知按键1按下。

若第2列第0行按键按下P0不全高,temp=0x01,Row=0,Col=2,KeyNum=Row*4+Col =2----可知按键2按下。

若第3列第0行按键按下P0不全高,temp=0x01,Row=0,Col=3,KeyNum=Row*4+Col =3----可知按键3按下。

若第0列第1行按键按下P0不全高,temp=0x02,Row=1,Col=0,KeyNum=Row*4+Col =4----可知按键4按下。

若第0列第2行按键按下P0不全高,temp=0x04,Row=2,Col=0,KeyNum=Row*4+Col =8----可知按键8按下。

........

3.程序源码

//功能:矩阵键盘扫面程序
#include <reg51.h>
#define uchar unsigned char
#define uint  unsigned int
uchar code Table[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//LED码表void KeyScam();//键盘扫描函数
void main()
{uchar KeyNum;    //按键值变量while(1){KeyNum =KeyScam();    //调用扫描函数P3 =Table[KeyNum];    //显示按键值,显示数码管接到P3口}
}
//扫描子程序
//返回值:KeyNum
void KeyScam()
{uint Row,Col,KeyNum,j,temp;    //定义行、列、返回值、temp-临时变量存储P0状态P0 =0xff;        //P0初始状态 for(j =0;j<4;j++)      //分4次(列)扫描{P2 =0xfe<<j;       //扫描列扫描码P2口(低4位),每次扫描一次temp =P0;          //读回行值  temp =~temp&0x0f;  //读回行值取反,并去掉高4位 if(temp !=0x00)    //如果读回行值为0则没有按键按下{Delay(5);    //消抖延时temp =P0;    //读回行值temp =~temp&0x0f;   //读回行值取反,并去掉高4位(P0.4~0.7没有用到,故去掉)if(temp !=0x00)     //如果读回行值为0则没有按键按下{Col =j;         //保存列值switch(temp)    //确定被按下的键所在第几行{case 0x01:Row =0;break;    //读取值是0x01,说明按下的键在第0行,Row=0case 0x02:Row =1;break;    //读取值是0x02,说明按下的键在第1行,Row=1case 0x04:Row =2;break;    //读取值是0x04,说明按下的键在第2行,Row=2case 0x08:Row =3;break;    //读取值是0x08,说明按下的键在第3行,Row=3default:break;             //读取值是其他参数不处理}break;    //已经确定行列值,提前结束扫描}}}KeyNum =Row*4+Col;    //确定键值,公式计算return KeyNum;        //键值返回主函数
}

51单片机学习-矩阵式键盘的应用相关推荐

  1. 51单片机模拟数字键盘输入以及图像显示+Proteus仿真

    51单片机模拟数字键盘输入以及图像显示+Proteus仿真 关于取模 取模软件:pctolcd2002 文字取模方式:阴码–列行式,逆向 主程序代码 //*********************** ...

  2. 51单片机学习笔记-1简介及点灯

    51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...

  3. AutoLeaders控制组—51单片机学习笔记

    文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...

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

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

  5. 【51单片机】51单片机学习资料合集

    [51单片机]51单片机学习资料合集 资源文件架构 一次全部保存是保存不了的,超过了文件上限,需要分批保存,对于爱好学习和感兴趣学习51单片机的人来说是一波很不错的福利,希望大家多多支持. 51程序 ...

  6. 单片机c语言北航,【下载资料】《51单片机学习笔记》北航版

    原标题:[下载资料]<51单片机学习笔记>北航版 如果手机下载有问题,请移步至电脑端,链接:https://forum.mianbaoban.cn/t/topic/36906 内容简介 本 ...

  7. 51单片机学习日记 | LCD1602黑块和闪烁问题的处理

    51单片机学习日记 芯片:STM89C516RD+ 开发板:普中A4 学习:By 江科大自化协 LCD1602模块问题的处理办法: 第一行黑块 原因是初始化有问题:LCD1602如果没有初始化就会出现 ...

  8. 51单片机学习之智能小车(1)

    说明 这是我学习一段时间51之后自己动手做的,比较简陋.此篇作为总结和复习,如有问题,请评论指出. 下篇:51单片机学习之智能小车(2) 小车概述(功能,所用模块) (1)蓝牙控制 通过手机上蓝牙串口 ...

  9. 51单片机学习笔记2 仿真器的使用及STC89Cxx简介

    51单片机学习笔记2 仿真器的使用及STC89Cxx简介) 一.连接步骤 1. 硬件连接 2. 安装软件驱动 3. 检查是否安装成功 二.仿真步骤 1. 打开一个51工程 2. 选择仿真设备 3. S ...

最新文章

  1. 计算公式1!+2!+3!+...+10!的和
  2. linq 实现查询字符串拼接 : And 和 OR 两种方式
  3. 【Spark篇】---Spark初始
  4. python画方波_今天学会傅里叶画画,明天就是初音未来 - 如何用Python和Blender画任意图形...
  5. selinux关闭后mysql_centos下关闭selinux不重启的方法
  6. java mvc ef_一个简单MVC5 + EF6示例分享
  7. csv数据去重 python_python批量查询、汉字去重处理CSV文件
  8. 如何使用命令行编译运行java文件(一个或多个),找不到主类解决
  9. oracle 10g 更换ocr,Oracle10g RAC在线更换OCR votedisk
  10. 查看mysql 中建立的表空间_mysql 表空间及索引的查看
  11. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...
  12. Vue 进阶系列(一)之响应式原理及实现
  13. Network in Network 算法解析
  14. 中国地图经纬度json
  15. 摄像头 RTSP 以及远程管理
  16. python读取文件名存到list_python-read文件名并构建名称列表(python-read file names and build a namelist)...
  17. yolov4_u5版复现—3. 数据读入 dataset.py
  18. python几种矩阵重组降维方式对比
  19. 什么是 95计费方式
  20. php 处理png图片白色背景色改为透明色

热门文章

  1. 在线支付,出款和收款
  2. 多渠道推广场景下,如何实现 App 用户增长的精准归因?
  3. 如何将一个Python脚本加入Windows右键菜单?
  4. json转xml(附案例)
  5. js随机生成16进制的颜色
  6. 计算机视觉英文翻译,计算机视觉(机器视觉)系统,computer vision (machine vision)system,音标,读音,翻译,英文例句,英语词典...
  7. 图像频率、采样定理和抗混叠
  8. 曹操最出名的4首诗赏析
  9. 0.5mm的焊锡丝能吃多大电流_工程施工中怎样计算要用多大的电线电缆?
  10. python garch模型预测_用GARCH模型预测股票指数波动率