1. 51单片机如何把矩阵键盘控制数码管和独立键盘控制蜂鸣器共同实现
我们先了解矩阵键盘的工作原理,掌握编码方法并能够编写出扫描程序,使用矩阵键盘控制数码管输出矩阵键值。
显示内容
在显示备橘祥模块的八位 LED 数码的个位显示当前使用矩阵键盘所按下的值。
键阵键盘多用于键伍李数目较多的时候。这样可以更多的节省IO口的占用量,
对于矩阵键盘常用的扫描方法为线反转查询法。具体的思路是:首先使行作为输入,使用单片机内部仿搏电阻上拉为高电平,列输出低电平,读行的状态。如果行有一个IO口是低,说明有键按下,进行下一步,否则退出扫描。如果有键按下,置列为输入,行输出低电平,读列的状态。最后根据
行列的状态查表就可以知道是那个按键按下。
2. 单片机中如何通过矩阵键盘对数码管进行两位数的置数,并且能显示在数码管上
首先定义一个数组,要把显示的断码存入数组中,然后数码管断码定义一个变量,当按下按键的时候,让这个数码管的变量发生变化,当然这需要数组 举个例子:
uchar code tab[]={//这里写数码管的断码}
uint i;
{
P0=0xfe;//位码
P2=tab[i];//断码
}
当按键按下的时候,让i发生变化,比如 i++;
纯手打,望采纳
3. 单片机4*4矩阵键盘与数码管连用问题(将某行某列的键盘显示在数码管上)
你用的是静态显示,按下某一銉后,只有列数信号被锁存,因你的行和列数码管共用P0口和同一个锁存器,所以先显示的行数被后面的列数代替,且中间还没有任何延时,所以行数只是一闪而过
即使按住按键不丢,虽行数信号可以被反复显示,但由于按銉识别时有10MS的延时,这期间行数信号是不显示的,所以行数码管看起来还只是微微闪亮
假设按键按住不放其工作过程是这样的
显示行数(可能只有1-2us)--显示列数--延时10ms(列数仍显示)--显示行数....
解决办法,在P0=table_hang[hang];
la=0;之后加延时,
并且在WHILE
(1)大循环未尾加display(hang,lie);
但也带来另外一个问题,即使不按任何按键,也会显示0行0列
可采用给行列赋初值的方法解决(给行和列赋一个不能显示的初值,例如44,然后改table_hang[]={0x06,0x5b,0x4f,0x66,0xff}及table_lie[]={0x06,0x5b,0x4f,0x66,0xff};
另一种方法,将display(hang,lie);改成
for(i=0;i<200;i++)
{
display(hang,lie);
}
在显示程序内部最好还有毫秒级延时,
将两处P0=0xff全换成延时
4. 51单片机怎样用键盘控制数码管显示
51单片机怎样用键盘控制数码管显示的方法。
如下参考:
1.首先,编写代码并点亮数码管。