做了个触摸 IIC的按键扫描程序,芯片用的是韩国的ADS TS12 现在我用的是 每当要输入几个数字的时候,我就用5秒的时间去循环扫描输入,等待得到 几个数字,大神们说 这样太浪费5秒时间了,叫我用中断 我想不明白 ,我用的是STC的1T 51单片机,晶振 22.1184 中断最长2ms ,要是在中断做只能延时中断时间或用中断标志在主循环查询,因为我加了延时 ,况且IIC也需要一点时间, 按键扫描大概用了15m左右
我的主程序 有要求是这样, 按 井 再4位输入密码 执行a功能
按 米 再输入 6位密码 再按井 执行b功能
按 米 再按井 执行c功能
进入b功能后 按下 不同的2位 (注意输入2位指定的数字并没有按米或井 ) 再输入 n位 +井 (n小于9)执行 附加 a功能
由于2位的命令码 有10几种
进入b功能后 按下 不同的3位 (注意输入2位指定的数字并没有按米或井 ) 再输入 n位 +井 (n小于9)执行 附加 a功能
由于2位的命令码 有10几种
求大神给个更好的方法
不知道 有没更好的办法,比方说,要输入4密码 我目前就是用这个获取的
这个函数 是用来获取 4位密码,因为输入密码先按井 再按4位密码然后直接执行
unsigned char Get_KeyPass(unsigned char *pt)
{
unsigned char k,i=0;
unsigned int tm = 1000; //1000大概5秒
while(tm--)
{
WDT_CONTR=0x3f; //防止溢出
delay_1ms(5);
k = Get_TS12_Key();
if(k>0 && k<=12)
{
tm = 1000;
if(k!=10 && k!= 12)
{
if(k==11){k =0;}//把11化为0 因为按键返回是11
*(pt+i)= k;
i++;
if(i==4) return 1;
}
}
if(k ==10) return 0; //按米退出 返回0
if(k ==12)
{
if(i == 0) {continue; }//如果没有输入 重新输入
else return 0;
}
}
return 0;
}
这个是用来获取 多位密码的。成功获得指定位后返回1 没有输入直接按井返回井 按米返回0 长度不足返回2
unsigned char Get_Input(unsigned char *pt,unsigned char len)
{
unsigned char k,i=0;
unsigned int tim =800; //大概4秒?
while(tim--)
{
WDT_CONTR=0x3f;
delay_1ms(5);
k = Get_TS12_Key();
if(k>0 && k<=12)
{
tim =800;
if(k!=10 && k!= 12 && i<len)
{
if(k==11){k =0; }//把11化为0
*(pt+i)= k;
i++;
}
if(k ==10) return 0;//按米退出 返回0
if(k ==12)
{
if(i==len) return 1;//按井退出返回1
if(i== 0)return 12;
if(i==len-1)return 2;
else return 0;
}
}
}
}
|