导语 独立按键在系统中大量使用,会占用大量的io口,因此采用矩阵按键的设计。使用 8 个 io可实现了 16 个按键,与此对应的也可以设计更为复杂的电路,来实现更少的io,更多的按键,本质上都是通过io捕获电平上的变化。
矩阵按键 电路
通过行与列的扫描来检查那个io电平被按下,而当某一个按键按下时,改按键对应的行和列就会短接,当按键按下时,一个高电平和低电平短接会把高电平拉低。
逐行扫描:高4位p17-p14链接每一行,依次把每一行设置为低电平,把低4位设置未高电平,然后检测第四位是否全为1,如果不全为1,说明有按键按下,电平被拉低,也就是对应的按键被按下,如此循环检测每一行;其实根据原理可以看出来,除了逐行扫描,也可以逐列扫描,原理相同;
行列扫描:和逐行或逐列扫描不通的是行列扫描;扫描原理是先把高4位设置为低电平,把低4位设置为高电平,这样如果低4位中有电平变低,说明该列有按键按下,但不知道具体是哪一行的按键;接着反过来操作,把高4位设置为高电平,低四位设置为低电平,检测高4位哪一位被拉低,那么按键就在对应的行上,这样通过两次扫描就知道该按键在哪一行哪一列了, 也就知道具体是哪个按键被按下了。
程序 void keyscan()
{
//4*4矩阵键盘扫描
p3 = 0xf0;//列扫描
if(p3 != 0xf0)//判断按键是否被按下
{
delay(10);//软件消抖10ms
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);//软件消抖10ms
if(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);//松手检测
}
}
}
其他键盘 8个io控制64个io。
以SPCE061A单片机为核心的红外测温计设计
无线模拟量传输装置在消防用水系统的应用
Kali Linux和Parrot OS,哪个更适合安全
中国国际软件博览会开幕 助力工业APP实现全面创新
基于FPGA及RTOS操作系统的码流分析仪设计
基于51单片机的矩阵按键设计
产生FPGA所需低电压电路设计
人口老龄化促进医疗器械行业的发展
GC Smart(GC-2018)气相色谱仪
5G开始商用 网络安全需要更加受到重视
特斯拉拿下第二个新能源项目,推动澳大利亚新能源电池发展
一文详解数值比较器
如何为FPGA编写可综合的代码?
中软国际@HDC.Cloud 2023 精彩盘点|全面拥抱华为云盘古大模型,携手开发者共建创新未来
工控机开机慢如何解决
中国信通院正式启动了SD-WAN系列标准的制定工作
OPPO首发索尼旗舰传感器
超威电池质量出众,引领行业不负众望
千亿在手,苹果会怎么花?
NB-IoT将是5G时代LPWAN应用的第一选择