矩阵键盘:

第一行的行控制线连接到p17,第二行的行控制线连接到p16,第三行的行控制线连接到p15,第四行的行控制线行连接到p14

第一列的列控制线连接到p13,第二列的列控制线连接到p12,第三列的列控制线连接到p11,第四列的列控制线色谱柱连接到p10
矩阵键盘的原理类似于独立键。此外,我们可以将矩阵键盘的任何行或列用作独立键盘。如果我们将第一行用作独立键盘,则只需要使P17输出为高即可。其余7个io端口可以输出低电平。如果我们按s1,则p13的电平将被拉低并变为低电平,因此我们可以找到低4位中的哪一个是低电平,可以知道按下了哪个按钮。

让我们谈谈矩阵键扫描的原理(即,当我们按下矩阵键盘的键时如何获取键的位置)
有两种方法,一种是逐行扫描,另一种是行列扫描。接下来,我将主要讨论行列扫描。

对于行和列扫描,首先,p1端口的高4位输出高电平,而低4位输出低电平。如果在这4行按钮中按下了一个按钮,则该行按钮的相应io级别将被拉低,我们可以知道该按钮的行坐标。获取按钮列坐标的方法类似,即在开始时,p1端口的高4位输出低电平,而低4位输出高电平。在这四列按钮中,如果按下一个按钮,则对应于该列按钮的io的水平将被下拉,我们可以知道按钮的列坐标。在获得行坐标x和列坐标y之后,为4 *(X-1)+ y是按钮的编号。
接下来,发布应用程序的代码,目的是分配16个键值,相应的键值从0到F.按一个键,第一个数字管将显示相应的键值

#include
sbit lsa=P2^2;
sbit lsb=P2^3;
sbit lsc=P2^4;
#define duanxuan P0
#define keyboard P1
int zxm[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
int x,y;
void delay(int i)
{
while(i--);
}
void keyproc()
{
int a=0;
P1=0x0f;//检测是哪一列有按键按下;
if(P1!=0x0f)
{
delay(1000);
if(P1!=0x0f)
{
P1=0x0f;
switch(P1)
{
case(0x07):y=1;break;
case(0x0b):y=2;break;
case(0x0d):y=3;break;
case(0x0e):y=4;break;
}
}
P1=0xf0;//检测是哪一行有按键按下
switch(P1)
{
case(0x70):x=1;break;
case(0xb0):x=2;break;
case(0xd0):x=3;break;
case(0xe0):x=4;break;
}
while(a<50&&P1!=0xf0)//当按键按下的时间超过了500ms或者按键松开了就退出while循环
{
delay(1000);
a++;
}
}
}
int main()
{
lsa=0;
lsb=0;
lsc=0;//位选选中第一个数码管
P0=0x00;//第一个数码管先什么都不显示
while(1)
{
keyproc();
P0=zxm[(x-1)*4+y-1];//送入段选信息
}
return 0;
} 数字电子管和138的:



例如,由138个控制位选择,p22的输出电平为1,p23的输出电平为0,p24的输出电平为0。p24构成一个三位数的二进制数001。 ,p23和p22。转换十进制为1,则138输出端子中的y1将向第二个数码管的com端子输出低电平,这等效于通过位选择来选择第二个数码管。
每个数字管的8段LED都有一个公共阴极。只要将低电平输入到相应数码管的com端子,数码管就可以变亮。至于哪些段是亮的,哪些段是不亮的,可以通过p0端口进行控制。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-346860-1.html
······总之
真的好想好想接近你桃子
瞪眼说瞎话