初学者必须经历的一个实验是4*4矩阵键盘的代码编写,如上图:
本文首先研究了如何用51单片机点亮发光二极管,以及基于CPLD-EPF10K10LC84-4的交通灯设计。首先,矩阵键盘的动态扫描有点复杂。不可能读取一个端口的数据,然后立即得到结果。这就需要依次扫描判断每一行的按键,然后得出结果。如上图所示,首先扫描第一行,即四个键的状态S1、S2、S3和S4。在PA端口输入0XFE。
0XFE变成二进制1111 1110。为了方便起见,请记住在每四个数字之间添加一个空空格。1111 1110这个数据放在PA端口,假设此时按下S1,会发生什么?PA0处于低电平,按下S1后打开S1,导致PA4的电平从1降到0,所以PA端口的数据变成1110 1110,十六进制为0XEE。所以我们知道S1受到了压力。
假设S3被压,会发生什么?PA6的电平下拉,PA的端口数据变成1011 1110,即0XBE。这样我们就知道,每一行的每一个键按下,都会有一个对应的唯一值。
这就是矩阵键盘的扫描原理!发个源码。
void matrixkeyscan
{
uchar temp,key
P3 = 0x Fe;
temp = P3;
temp = temp & amp0xf0
if
{
delay ms;
temp = P3;
temp = temp & amp0xf0
if
{
temp = P3;
开关
{
案例0xe:
key = 0;
打破;
案例0xde:
key = 1;
打破;
案例0xbe:
key = 2;
打破;
案例0x7e:
key = 3;
打破;
}
while
{
temp = P3;
temp = temp & amp0xf0
}
显示器;
}
}
P3 = 0 xfd;
temp = P3;
temp = temp & amp0xf0
if
{
delay ms;
temp = P3;
temp = temp & amp0xf0
if
{
temp = P3;
开关
{
案例0xed:
key = 4;
打破;
案例0xdd:
key = 5;
打破;
案例0xbd:
key = 6;
打破;
案例0x7d:
key = 7;
打破;
}
while
{
temp = P3;
temp = temp & amp0xf0
}
显示器;
}
}
P3 = 0 xfb;
temp = P3;
temp = temp & amp0xf0
if
{
delay ms;
temp = P3;
temp = temp & amp0xf0
if
{
temp = P3;
开关
{
案例0xeb:
key = 8;
打破;
案例0xdb:
key = 9;
打破;
案例0xbb:
key = 10
打破;
案例0x7b:
key = 11
打破;
}
while
{
temp = P3;
temp = temp & amp0xf0
}
显示器;
}
}
P3 = 0xf7;
temp = P3;
temp = temp & amp0xf0
if
{
delay ms;
temp = P3;
temp = temp & amp0xf0
if
{
temp = P3;
开关
{
案例0xe7:
key = 12
打破;
案例0xd7:
key = 13
打破;
案例0xb7:
key = 14
打破;
案例0x77:
key = 15
打破;
}
while
{
temp = P3;
temp = temp & amp0xf0
}
显示器;
}
}
}
以上所有信息仅用于学习和交流,不作为任何学习和业务标准。如果您对本文中的任何信息有任何异议,请随时提出。谢谢!
1.《键盘扫描原理 【硬件小百科】4*4矩阵键盘的扫描原理》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《键盘扫描原理 【硬件小百科】4*4矩阵键盘的扫描原理》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/1740543.html