51单片机学习-矩阵式键盘的应用
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单片机学习-矩阵式键盘的应用相关推荐
- 51单片机模拟数字键盘输入以及图像显示+Proteus仿真
51单片机模拟数字键盘输入以及图像显示+Proteus仿真 关于取模 取模软件:pctolcd2002 文字取模方式:阴码–列行式,逆向 主程序代码 //*********************** ...
- 51单片机学习笔记-1简介及点灯
51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...
- AutoLeaders控制组—51单片机学习笔记
文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...
- 【51单片机】矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤
[51单片机]矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤 一.环境 二.硬件部分 1. Proteus新建工程 2. 添加元件 3.连接线路 4.硬件效果 三.软件部分 1 ...
- 【51单片机】51单片机学习资料合集
[51单片机]51单片机学习资料合集 资源文件架构 一次全部保存是保存不了的,超过了文件上限,需要分批保存,对于爱好学习和感兴趣学习51单片机的人来说是一波很不错的福利,希望大家多多支持. 51程序 ...
- 单片机c语言北航,【下载资料】《51单片机学习笔记》北航版
原标题:[下载资料]<51单片机学习笔记>北航版 如果手机下载有问题,请移步至电脑端,链接:https://forum.mianbaoban.cn/t/topic/36906 内容简介 本 ...
- 51单片机学习日记 | LCD1602黑块和闪烁问题的处理
51单片机学习日记 芯片:STM89C516RD+ 开发板:普中A4 学习:By 江科大自化协 LCD1602模块问题的处理办法: 第一行黑块 原因是初始化有问题:LCD1602如果没有初始化就会出现 ...
- 51单片机学习之智能小车(1)
说明 这是我学习一段时间51之后自己动手做的,比较简陋.此篇作为总结和复习,如有问题,请评论指出. 下篇:51单片机学习之智能小车(2) 小车概述(功能,所用模块) (1)蓝牙控制 通过手机上蓝牙串口 ...
- 51单片机学习笔记2 仿真器的使用及STC89Cxx简介
51单片机学习笔记2 仿真器的使用及STC89Cxx简介) 一.连接步骤 1. 硬件连接 2. 安装软件驱动 3. 检查是否安装成功 二.仿真步骤 1. 打开一个51工程 2. 选择仿真设备 3. S ...
最新文章
- 计算公式1!+2!+3!+...+10!的和
- linq 实现查询字符串拼接 : And 和 OR 两种方式
- 【Spark篇】---Spark初始
- python画方波_今天学会傅里叶画画,明天就是初音未来 - 如何用Python和Blender画任意图形...
- selinux关闭后mysql_centos下关闭selinux不重启的方法
- java mvc ef_一个简单MVC5 + EF6示例分享
- csv数据去重 python_python批量查询、汉字去重处理CSV文件
- 如何使用命令行编译运行java文件(一个或多个),找不到主类解决
- oracle 10g 更换ocr,Oracle10g RAC在线更换OCR votedisk
- 查看mysql 中建立的表空间_mysql 表空间及索引的查看
- 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...
- Vue 进阶系列(一)之响应式原理及实现
- Network in Network 算法解析
- 中国地图经纬度json
- 摄像头 RTSP 以及远程管理
- python读取文件名存到list_python-read文件名并构建名称列表(python-read file names and build a namelist)...
- yolov4_u5版复现—3. 数据读入 dataset.py
- python几种矩阵重组降维方式对比
- 什么是 95计费方式
- php 处理png图片白色背景色改为透明色
热门文章
- 在线支付,出款和收款
- 多渠道推广场景下,如何实现 App 用户增长的精准归因?
- 如何将一个Python脚本加入Windows右键菜单?
- json转xml(附案例)
- js随机生成16进制的颜色
- 计算机视觉英文翻译,计算机视觉(机器视觉)系统,computer vision (machine vision)system,音标,读音,翻译,英文例句,英语词典...
- 图像频率、采样定理和抗混叠
- 曹操最出名的4首诗赏析
- 0.5mm的焊锡丝能吃多大电流_工程施工中怎样计算要用多大的电线电缆?
- python garch模型预测_用GARCH模型预测股票指数波动率