目的:实现矩阵键盘的多位数据输入
思路:使用while循环来规避掉循环检测中键盘的重复输入。
注:键盘检测程序资源众多,此处不列举了。
参数:
key_back():键盘检测函数,返回值为key_val(键值),无摁键时返回no_ipt(无按键时的回传值,自订)
方法:
//进入while开始键盘检测,获得输入值后回传
u8 key_input_part(void)
{
while(1)
{
if( key_back()!= no_ipt)
{return key_back();}
}
}
//循环输入,将数据整合为多位并返回,函数传参为输入位数
u16 key_input(int a)
{
int key[a];
u16 aa=0;
//循环输入
for(int i=0;i<a;i++)
{
key[i]=key_input_part();
while(key[i]==key_back())
{;}
}
//数据整合
int bb=a-1;
for(int j=0;j<a;j++)
{
aa=aa+key[j]*MYS(bb);
bb--;
}
return aa;
}
//十进制幂运算,用于数据整合
static u16 MYS(int a)
{
int aa=1;
for(;a>0;a--)
{ aa=aa*10; }
return aa;
}
总结:调用函数后执行一次输入,然后进入while循环,松开按键之前不进行其他操作,以规避循环检测的重复输入,获得数据后将单个数据整合为多维数据,实现函数功能。
结果:执行temp=key_input(4),依次输入1、3、2、5,调用temp可得temp=1325,实现功能。
缺点:
1、需要设定输入位数
2、并不能避免循环输入检测对系统资源的占用
结语:做课设中遇到的问题,搜索到的方案比较有限,于是自己想了一个,本站第一篇博客,有什么错误欢迎指出_(:з)∠)_