实验内容:单片机外接10个按键,编号为0-9,编程实现任意按键则LED显示对应数字
一、硬件电路原理图?
1.共阴共阳两种不同的方式
2.数码管显示表
3.矩阵键盘介绍
矩阵键盘是 单片机 外部设备中所使用的排布类似于矩阵的键盘组。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。 中文名 矩阵键盘 外文名 Matrix keyboard 本 质 类似于矩阵的键盘组 适 用 单片机外部设备中所使用 识别方法 矩阵 的 键盘 比直接法要复杂一些 作 用 切换中控式HDMI矩阵信号源 目录 1 组成结构 2 识别方法 3 矩阵键盘实验 组成结构 编辑 播报 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成 矩阵 形式。 在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接
工作原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果。就以逐行扫描为例: 当给P17,P16,P15,P14赋值0111时P17被选中,读取P13,P12,P11,P10的值判断哪个按键被按下。如果S1按下了那么P13就等于0,如果S2按下了那么P12就等于0...
逐列扫描:当给P13,P12,P11,P10赋值0111时P13被选中,读取P17,P16,P15,P14的值判断哪个按键被按下。如果P17,P16,P15,P14为0111 则P17选中S1按下,如果P17,P16,P15,P14为1011,则S5按下.
文章来源地址https://www.toymoban.com/news/detail-473600.html
二、程序代码
#include<regx52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
//数码管段码表 0123456789;
unsigned char Table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void Delay(unsigned int x)//延时函数
{
unsigned char i,j;
for(i=x;i>0;i--) ;
for(j=114;j>0;j--);
}
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;} //显示数字0,keynumber是指段码表table对应的序号
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}//显示数字4
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}//显示数字8
P1=0xFF;P1_2=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}//显示数字2
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}//显示数字5
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}//显示数字9
P1=0xFF;P1_1=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}//显示数字2
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}//显示数字6
P1=0xFF;P1_0=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}//显示数字3
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}//显示数字7
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);
}
}
}
硬件连接方式
文章来源:https://www.toymoban.com/news/detail-473600.html
到了这里,关于51单片机按键识别与LED显示(显示0-9的数字)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!