|
发表于 2014-4-9 08:22:30
|
显示全部楼层
- unsigned char read_key_n(void)
- {
- static unsigned char key_state = 0, key_time = 0;
- unsigned char key_press, key_return = 0;
- key_press = key_input; // 读按键I/O电平
- switch (key_state)
- {
- case key_state_0: // 按键初始态
- if (!key_press) key_state = key_state_1; // 键被按下,状态转换到键确认态
- break;
- case key_state_1: // 按键确认态
- if (!key_press)
- {
- key_state = key_state_2; // 按键仍按下,状态转换到计时1
- key_time = 0; // 清另按键时间计数器
- }
- else
- key_state = key_state_0; // 按键已抬起,转换到按键初始态
- break;
- case key_state_2:
- if (key_press)
- {
- key_state = key_state_0; // 按键已释放,转换到按键初始态
- key_return = 1; // 输出"1"
- }
- else if (++key_time >= 200) // 按键时间计数
- {
- key_state = key_state_3; // 按下时间>1s,状态转换到计时2
- key_time = 0; // 清按键计数器
- key_return = 2; // 输出"2"
- }
- break;
- case key_state_3:
- if (key_press)
- {
- key_state = key_state_0; //按键已释放,转换到按键初始态
- }
- break;
- }
- return key_return;
- }
复制代码
嘿嘿,按也试试代码是怎么弄进去的 |
|