要建网站,足球排名最新排名世界,新手网站建设教程图书,学校网站开发背景按键输入是人机对话不可缺少的一部分#xff0c;对于消抖设计#xff0c;一种是软件消抖#xff0c;一种是硬件消抖。但在单片机电路设计中#xff0c;采用电容消抖才是最佳的选择#xff0c;其次才是定时器消抖。 1、按键输入采用软件消抖
1)、通过定时器方式定时读取按… 按键输入是人机对话不可缺少的一部分对于消抖设计一种是软件消抖一种是硬件消抖。但在单片机电路设计中采用电容消抖才是最佳的选择其次才是定时器消抖。 1、按键输入采用软件消抖
1)、通过定时器方式定时读取按键输入
根据固定的采集周期通常为10ms需要读两次若前后两次均相同则认为按键被按下。需要占用CPU的定时器优点不占用CPU执行时间程序执行速度快。缺点需要一个全局变量Key来辅助完成。
定时器中断程序
Key(u8)(Key1);
if(KeyPin0) Key(u8)(Key|0x01); //将key的最低位置1
else Key(u8)(Key0xFE); //将key的最低位置0
按键读取程序
if( (key0x03) 0x03 ) 按键被按下
else 无按键被按下
2)、完全采用软件延时每隔10ms周期采集一次需要读两次若前后两次均相同则认为按键被按下。缺点占用CPU执行时间影响程序的执行速度当有中断发送时读取按键的时间变长不适合用于中断频繁的程序中。
if(KeyPin0)
{ delay_ms(10); if(KeyPin0)//确认有键按下 { }
}
2、按键输入采用硬件消抖
1)、电容消抖 注意KEY_UPKEY_LeftKEY_OK连接到CPU引脚。 采用定时器轮询读取
先置SetCOL10SetCOL20SetCOL30SetCOL40然后执行 读ReadROW1ReadROW2ReadROW3ReadROW4如果出现低电平则记录ROW的值为x没有出现低电平表示无按键按下。
当SetCOL11时然后执行 读ReadROW1ReadROW2ReadROW3ReadROW4如果出现高电平则记录COL的值为y1表示读到按键所在的列值
同理
当SetCOL11SetCOL21时然后执行 读ReadROW1ReadROW2ReadROW3ReadROW4如果出现高电平则记录COL的值为y2表示读到按键所在的列值
当SetCOL11SetCOL21SetCOL31时然后执行 读ReadROW1ReadROW2ReadROW3ReadROW4如果出现高电平则记录COL的值为y3表示读到按键所在的列值
当SetCOL11SetCOL21SetCOL31SetCOL41时然后执行 读ReadROW1ReadROW2ReadROW3ReadROW4如果出现高电平则记录COL的值为y4表示读到按键所在的列值 if(x1 y1) SW1被按下
if(x1 y2) SW2被按下
if(x1 y3) SW3被按下
if(x1 y4) SW4被按下
等等按照坐标去决定哪个按键被按下。 2)、专用芯片消抖
在有很多按钮输入的情况下使用专用芯片。缺点增加硬件成本。 3、总结
在单片机电路设计中采用电容消抖是最佳的选择其次才是定时器消抖。