51单片机矩阵键盘——数码管显示
1.前言
当我们熟悉了数码管的位选与段选,并了解的矩阵键盘的扫描之后就可以编写程序了。
1.1实验现象
按下矩阵键盘S1并松开,数码管第一位(LED8)显示0;按下矩阵键盘S2并松开,数码管第一位显示1;...按下矩阵键盘S16并松开,数码管第一位显示F;
1.2工作原理
矩阵键盘扫描(输入扫描)
原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果
https://blog.csdn.net/YLG_lin/article/details/126429384?utm_source=app&app_version=5.3.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
数码管的显示(位选,段选)
https://blog.csdn.net/YLG_lin/article/details/126406076?utm_source=app&app_version=5.3.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
2.源码
#include<regx52.h>
//数码管段码表,123456789AbcdEF;unsigned char Table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void Delay(unsigned int xms)//延时函数
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
} unsigned char MatrixKey()//按键扫描(逐列扫描)
{ unsigned char KeyNumber=0;P1=0xFF;P1_3=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}P1=0xFF;P1_2=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}P1=0xFF;P1_1=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}P1=0xFF;P1_0=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}return KeyNumber;
}void Xian_Shi(KeyNum)
{P2_4=1;P2_3=1;P2_2=1;//选中第一位(LED8)P0=Table[KeyNum-1]; //数字的首元素为Table[0];Delay(1);
}void main()
{while(1){unsigned char KeyNum=MatrixKey();//不断循环扫描if(KeyNum) //判断是否有按键按下,如果有就显示 {Xian_Shi(KeyNum); } }
}
51单片机矩阵键盘——数码管显示相关推荐
- 矩阵键盘数 码管显示多位数 c语言,4×4矩阵键盘数码管显示按键值程序
4×4矩阵键盘数码管显示按键值程序本文引用地址:http://www.eepw.com.cn/article/201607/294422.htm //电路说明如下. //单片机:使用51系列兼容的即可 ...
- 【51单片机】七段数码管显示实验+详细讲解
[51单片机]七段数码管显示实验 前言 一.兵马未动,粮草先行--认识七段数码管 1.关于显示器 2.七段数码管 3.七段数码管的结构 4.数码管显示方法 二.数码管显示程序 1.静态显示 效果 2. ...
- 51单片机双机串口数码管显示排队叫号仿真设计( proteus仿真+程序+报告+讲解视频)
51单片机双机串口数码管显示排队叫号仿真设计 1.主要功能: 2.仿真 3.程序 4.设计报告 1.1 设计背景与意义 1.2 设计目的 1.3 设计要求及内容 1.4 本文结构安排 2 总体设计方案 ...
- 51单片机入门——动态数码管显示详解
51单片机:动态数码管显示 - 模块图 - 显示原理 – 消抖 静态数码管技术 + 人眼视觉停留 显示原理类似于以前的 胶片机放影视,也就是只要我切换的速度足够快你就看不出来其实我是一次次显示的(滑稽 ...
- 单片机学习笔记————51单片机实现带数码管显示的象棋比赛专用计时器
一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...
- 51单片机静态动态数码管显示
51单片机静态动态数码管显示 通过此实训了解动态数码管的显示原理,掌握编码方法.共阴极和其阴极数码管的不同之处及常用设计方法. 实训设备 这里使用的377锁存器模块控制的数码管下面就是电路图 显示内容 ...
- 单片机学习笔记————51单片机实现带数码管显示的加法简易计算器
一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...
- 51单片机矩阵键盘——LCD1602显示
1.前言 本次的实验需要用到LCD1602液晶屏,需要用到LCD1602.c 与LCD1602.h文件链接: https://download.csdn.net/download/YLG_lin/86 ...
- 51单片机矩阵键盘的控制原理-扫描及使用方式
矩阵键盘 矩阵键盘一般和之前学的LCD1602液晶屏一起控制,建议先看一下之前的博客学习一下液晶屏的使用. 当然矩阵键盘也可以和数码管和LED等一起操作,但是数码管需要扫描,很费CPU,LED又不能直 ...
最新文章
- 计算两个日期之间的工作日
- 【 Vivado 】输入延迟约束实例
- python_面向对象进阶之元类
- 三种方法删除有序表中s和t直接的元素(包含s和t)
- 【暑假训练 7.10】 codevs 2492 上帝造题的七分钟2
- Java之品优购课程讲义_day17(2)
- python代码评测结果tle_TLE计算列表中指定范围内的元素数 - python
- 互联网为什么需要“黑客”?
- c语言中rm无法删除文件夹,rm:无法删除'-rf':没有这样的文件或目录
- 右键没有WinRAR压缩的解决方法
- GDOI2021自闭记
- 初识中央处理器CPU
- 上下五千年历史朝代歌
- mysql 客户端简单搭建
- latex从入门到精通
- 【JavaSe】面向对象篇(五) 三大特征之二继承
- Excel数据透视表不显示汇总行
- 最新HR月报总结PPT模板资料包
- MUMPS入门+Caché学习记录
- Windows10资源管理器占用CPU过高解决办法