文章目录

  • 小介绍
  • 矩阵键盘电路分析
  • 一丢丢的C语言基础
  • 编写程序
  • 总结

小介绍


在上一课中我学到了独立键盘的工作原理和编写代码的技巧(如何软件消抖和按下松手检测),并且在上一节中介绍了独立键盘和矩阵键盘的特点和区别,这一节就主要学习矩阵键盘。

矩阵键盘电路分析


矩阵键盘相对于独立键盘的电路较为复杂,但是依然有迹可循,电路中将P3组所有IO口分为两组,可以将其视为四乘四的网格,十六个按键就分布在网格上。
采用列扫描和行扫描可以确定矩阵键盘上哪一个按键被按下。具体来说,列扫描时先把接在列上面的所有IO口拉高,接在行上的所有IO置低。当其中有一列内任何一个按键按下那么整条列线都会被拉低。这样,就可以确认是那一条列线被触发,并得到当时P3口的十六进制值。紧接着进行行扫描,将行的IO拉高,列的置底,再次检测到P3口的数值,由于十六进制表现为0x**,进行列扫描时获得了第一个*的值,行扫描时获取了第二个*的值,两者叠加就会产生十六种独一无二的值,这样我们得以判断是那个按键被触发。

一丢丢的C语言基础


C语言三大结构分别为分支,顺序,选择。要想判断十六个值,仅用if语句十分麻烦,因此我们采用switch语句

switch (表达式)
{case 常量表达式1: 语句1break;case 常量表达式2: 语句2break;
······
······}

语句执行的过程是:将switch后面的表达式的值与case后面的各个常量表达式的值逐个进行比较,在遇到匹配时,就执行case后面相应的语句,然后执行break返回。

编写程序


太长了,,,懒得解释了,看注释吧

#include <reg52.h>
#include <intrins.h>#define uint unsigned int
#define uchar unsigned charsbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选
uchar num;//数码管显示
uchar keyvalue = 20;//按键的值//共阴数码管段选表
uchar  code tabel[]= {
//0     1    2     3     4     5     6     7     8
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,
//9     A     B    C     D     E     F      H    L
0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x76, 0x38,
//n    u      -   熄灭
0x37, 0x3E, 0x40, 0x00 };void delay(uint z)
{uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--);
} void keyscan()
{//4*4矩阵键盘扫描P3 = 0xf0;//列扫描if(P3 != 0xf0){delay(10);if(P3 != 0xf0)   {switch(P3){case 0xe0:keyvalue = 0;//第一列按下break;case 0xd0:keyvalue = 1;break;case 0xb0:keyvalue = 2;break;case 0x70:keyvalue = 3;//第四列按下break;}P3 = 0x0f;//行扫描switch(P3){case 0x0e:keyvalue = keyvalue;//第一行按下break;case 0x0d:keyvalue = keyvalue+4;break;case 0x0b:keyvalue = keyvalue+8;break;case 0x07:keyvalue = keyvalue+12;//第四行按下break;}while(P3 != 0x0f);} }P3 = 0XFF;//独立按键扫描if(P3 != 0XFF){delay(10);//软件消抖10msif(P3 != 0XFF){switch(P3) //判断那一行被按下{case 0xfe:    keyvalue = 16; break;//S2被按下case 0xfd: keyvalue = 17; break;//S3被按下case 0xfb: keyvalue = 18; break;//S4被按下case 0xf7: keyvalue = 19; break;//S5被按下 }while(P3 != 0XFF);//松手检测            }   }
}void main()//main函数自身会循环
{WE = 1;//打开位选锁存器P0 = 0XFE; //1111 1110 选通第一位数码管WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = 0X06;//0000 0110 显示“1”DU = 0;//锁存段选数据while(1){DU = 1;//打开段选锁存器P0 = tabel[keyvalue];//0000 0110 显示“1”DU = 0;//锁存段选数据keyscan();}
}

总结

非编码键盘真是麻烦啊,虽然我明白了大概原理,但是他这个目前只是顺序排列,要是想调整成常用计算器的左下角为数字,右侧为符号,那也太麻烦了,,,,,脑阔疼

51单片机入学第七课——矩阵键盘相关推荐

  1. 51单片机(三十)—— 矩阵键盘计算器

    在<51单片机(二十九)-- 矩阵键盘输入实验>中,我们对矩阵键盘的原理及使用方法进行了介绍.在本文中,我们采用矩阵键盘设计一个计算器,实现简单的计算器功能. 这个实验的代码的主函数如下所 ...

  2. 二、51单片机 使用Proteus仿真掌握矩阵键盘(仿真及代码)

    学习内容:通过proteus实现对51单片机矩阵的掌握 1.键盘接口设计.键盘--向单片机输入数据.命令等功能,是人机对话的主要手段.由若干按键按照一定规则组成.每一个按键实质上是一个按键开关,按构造 ...

  3. 51单片机入学第五课——蜂鸣器的原理与应用

    文章目录 三极管 三极管的应用 三极管工作原理 PNP型 NPN型 蜂鸣器工作原理 电路分析 编程实践 总结 三极管 三极管两种封装方式: 三极管的应用 三极管,全称应为半导体三极管,也称双极型晶体管 ...

  4. 51单片机入学第四课——使用在线仿真(以流水灯程序为模板)

    文章目录 Debug(软件仿真)和在线仿真的区别 KEIL中的Debug(软件仿真) 在线仿真 仿真器介绍 在线仿真器的安装 在线仿真软件环境的配置 在STC-CIP中添加配置文件 KEIL的配置 开 ...

  5. 《蓝桥杯CT107D单片机竞赛板》:矩阵键盘模块

    矩阵键盘模块 实验简介 实验原理图 实验原理 实验程序 显示对应的按键值 2 * 2变式矩阵按键实现独立按键 2 * 2变式矩阵键盘控制蜂鸣器 2 * 2变式矩阵按键控制数码管做加减操作 另一种易理解 ...

  6. 利用c51进行数模转换并在液晶屏上显示_基于C51单片机的智能计算器、矩阵键盘、lcd1602...

    目录 1绪论.............................................................................................. ...

  7. Protues 基于51单片机的DS18B20温度采集:键盘输入温度上下限_超出设定温度范围报警_8数码管显示

    功能实现: 1.设计单片机与16按键的矩阵式键盘接口以及8数码管的接口电路,测试显示和按键功能. 2.设计单片机与DS18B20的接口电路,实现数字温度信息的采集,然后编程处理采集到的数据,得到温度值 ...

  8. 跟着吴坚鸿学单片机——第16天:矩阵键盘的组合按键触发

    原文链接:第十六节:矩阵键盘的组合按键触发. 文章目录 原文 读后感 自我练习 原文 第十六节:矩阵键盘的组合按键触发. 开场白: 上一节讲了矩阵键盘单个触发的压缩代码编程.这节讲矩阵键盘的组合按键触 ...

  9. 郭天祥的10天学会51单片机_第七节

    串行通信:从D0位一位一位发发到D7位 十个位为一帧如:0101000100,表示一个字符 起始位低电平有效,停止位高电平有效,单片机是异步通信 宽带网线是八根线,组成两队差分信号,分别是TXD1(发 ...

  10. 【单片机基础】按键与矩阵键盘识别

    文章目录 1.单片机按键识别方法 2.按键消抖的方法 3.矩形键盘原理 1.单片机按键识别方法 单片机硬件按键有接电源和接地两种接发,我们通过程序判断当前引脚电平的高低来判断按键按下/放开. 程序略- ...

最新文章

  1. IPython4_Notebook
  2. python基础常用语句-python爬虫之python一条语句分析几个常用函数和概念
  3. Java 开发Web Service的几种方式
  4. java web junit_如何使用junit测试javaweb工程
  5. python如何仿写文章_python,python3.x_求助,用python仿写以下代码,python,python3.x,java - phpStudy...
  6. 405 宝塔钩子_点击数据库管理,nginx提示出现405 Not Allowed错误,是怎么回事?
  7. windows 2008 ftp配置及用户权限管理
  8. 洛谷 P2486 [SDOI2011]染色 树链剖分
  9. 分享:Python使用cookielib和urllib2模拟登陆新浪微博并抓取数据
  10. was supplied but isn‘t a known config
  11. Capture One Pro 22 for Mac(RAW图像处理软件)
  12. 人工智能、区块链、算法...这30个大数据热词你知道吗?
  13. 证券类私募主要需求及核心服务商
  14. Latex同时添加中英文摘要
  15. 一次性发布20个音频IP,看喜马拉雅FM解锁品牌营销新姿势
  16. [OOAD]面向对象分析与设计之人机交互界面设计学习总结
  17. Ubuntu14.04 Firefox无法播放视频
  18. 关于链接出现 unauthenticated user 用户问题研究
  19. CSS -- 实现DIV层背景颜色渐变 (兼容IE 火狐 谷歌浏览器)
  20. wamp实现外网访问本地

热门文章

  1. 2022高教社杯数学建模思路 - 案例:Apriori-关联规则挖掘算法
  2. 宏杉MacroSan存储开局指导-流程
  3. RayData大数据可视化教程(1)——软件使用和材质渲染基础
  4. JavaScript读取JSON文件
  5. Nginx常见面试题整理---40题
  6. Adobe公司和谷歌公司共同开发的字体-思源黑体提供下载
  7. 第三章 PCB 封装库绘制
  8. Android Studio重启adb
  9. 微信小程序问答论坛+后台管理系统
  10. c# 多线程单例模式_线程安全C#单例模式