本帖最后由 虾军师 于 2009-8-8 14:34 编辑
匠人手记有写关于这样的按键检测 :lol
事先设好50MS定时器中断服务,为中断次数自加指令,先不开计数器;
检查IO口电平,无变化退出;有变化?消抖;
消抖后再检查,无变化退出;
开计数器开关TR;检查IO口电平;
若电平回到无键状态时;
记录中断次数的值;
反复消抖检查;
若电平一直为有键转态电平,则更新放置中断次数的地址的值;
直到IO口电平为无键状态;
关闭计数器开关TR;
记录读取中断次数;
根据中断次数来断定键值;//5S刚好对应100次
短按最多1S吧?那就小于20为短按;
大于20小于100为长按;
大于100为长长按;
如果愿意,还可以再多几个长长···长长按;
//你的中断次数变量别设为unsigned char;
|