看看7290 按一个按键后读到的数据,有2个!采用下降沿边沿触发,中断置标志,主循环查询的方法!得到这样的数据,其中大于0为正常按键,可是也得出0键值!一般采用什么方法避免,只是用软件排除0? --------------------------------------- 01 00 02 00 03 00 04 00 05 00 06 00 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 00 08 08 08 08 08 10 10 10 10 0E 00 0E 00 0E 00 0E 00 0E 00 0E 00 0E 00 0E 00 0E 00 0E 00 0E 0E 00 0E 00 0E 00 0E 00 0E 00 0E 00 0E 00 0E 00 0E 0E 00 0E 00 0E 00 0E 00 0E 00 0E 00 0E 00 0E 00 0D 00 0D 00 0C 00 0B 00 0A 00 09 00 09 00 01 00 02 00 03 00 04 00 05 00 06 00 07 08 08 10 07 0F 0E 00 06 00 0D 00 0C 00 04 00 03 00 0B 00 0C 00 04 00 05 00 0E 00 07 08 10 0F 0E 00 06 00 0D 00 05 00 04 00 0C 00 0B 00 03 00 0A 00 02 00 03 00 04 00 05 00 06 00 ------------------- 我发现这个症状了,按下去的时候读出来是正确的数据,再放手弹起来时候,由于机械震动问题,有产生一个下降沿,引发中断,而在主程序中再查询时候,此时已经松开按键,所以读出为0.可是在中断中加了延时后再去读取键值,却不能减少这种情况的发生,反而丢失了一些键值!
void __irq IRQ_EX0(void) { key_flag=1; DelayNS(0x2); EXTINT=8; VICVectAddr = 0x00; // 中断处理结束 } ----------------- 可是当用低电平中断时候却更糟糕,读出来都是0值..... |