本文共 852 字,大约阅读时间需要 2 分钟。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
测试平台是一个stm32f103zet6的ARM芯片,
我这里只是把它当作单片机来用,下面的程序是平台提供的,可以正常使用,有几个地方不能理解!
//mode为0是不支持连续按
//mode为1是支持连续按
//返回0表示无按键按下
//返回值在1~4内,则对应四个按键a,b,c,d
u8 key_a(u8 mode)
{
static u8 key_up=1;//按键按下标志
if(mode) key_up=1;//支持连按
if(key_up&&(a==0||b==0||c==0||d==1))
{
delay_ms(10);//消抖
key_up=0;
if(a==0) return=1;//a键按下
else if(b==0) return=2;//b键按下
rese if(c==0) return=3;//c键按下
rese if(d==1) return=4;//d键按下
if(key_up&&(a==1||b==1||c==1||d==0))
keu_up=1;//无按键按下
}
return 0;//无按键按下返回0
}
这是一个完整的按键判断程序,带返回值带一个参数!
当key_a(1);时支持连按(也就是按住按键不松手数值会一直往上加)
按键a,b,c是低电平触发,d按键是高电平触发!
这里有几个问题无法理解,
第一条语句static u8 key_up=1;中的static有什么用? 后面的u8. 是申明一个8位的无符号数据,同时初始值为1,
接着if(mode) key_up=1; 这里mode是1还是0好像没有什么用,因为key_up在上一条语句已经赋值为1了,
到了按键判断语句
if(key_up&&(a==0||b==0||c==0||d==1))
这里两个括号是不是先判断第二个括号里面的条件,然后再跟key_up判断如果为真就执行if里面的语句,
我不能理解的是怎么通过mode来判断支不支持连续按!
转载地址:http://sxqll.baihongyu.com/