}
/*******************************************************************************
* 函数名:KeyScan 说明:读取按键 返回:按键扫描码,KeyBuff=按键码
*******************************************************************************/
char KeyScan(void)
{
u16 Key_Status_Now=0, KeyCode=0;
//检测当前是否有按键被按下。
if((~GPIOC_IDR) & GPIO_Pin_4) Key_Status_Now |= 0x01;&nbs if((~GPIOE_IDR) & GPIO_Pin_5) Key_Status_Now |= 0x04;
if((~GPIOE_IDR) & GPIO_Pin_6) Key_Status_Now |= 0x08;
if((~GPIOE_IDR) & GPIO_Pin_3) Key_Status_Now |= 0x10;
if((~GPIOE_IDR) & GPIO_Pin_1) Key_Status_Now |= 0x20;
if((~GPIOE_IDR) & GPIO_Pin_4) Key_Status_Now |= 0x40;
if((~GPIOA_IDR) & GPIO_Pin_7) Key_Status_Now |= 0x80;
if((~GPIOB_IDR) & GPIO_Pin_9) Key_Status_Now |= 0x100;
if((~GPIOD_IDR) & GPIO_Pin_2) Key_Status_Now |= 0x200;
if(((~GPIOB_IDR) & GPIO_Pin_6)&&((~GPIOE_IDR) & GPIO_Pin_3)) Key_Status_Now |= 0x400;//KEYCODE_PWOFF;
if((~GPIOC_IDR) & GPIO_Pin_5) Key_Status_Now |= 0x800;
if(((~GPIOE_IDR) & GPIO_Pin_0)&&((~GPIOE_IDR) & GPIO_Pin_3)) Key_Status_Now |= 0x1000;//KEYCODE_ALLDEL
if(((~GPIOC_IDR) & GPIO_Pin_4)&&((~GPIOE_IDR) & GPIO_Pin_4)) Key_Status_Now |= 0x2000;//KEYCODE_ADJUST
if(((~GPIOE_IDR) & GPIO_Pin_3)&&((~GPIOE_IDR) & GPIO_Pin_1)) Key_Status_Now |= 0x4000;//KEYCODE_TIME
if(Key_Status_Now &(~Key_Status_Last))//某一个按键是第一次按下。
{
Key_Wait_Counter=25; /*持续按键500mS内,不启动自动重复功能*/
if(Key_Status_Now & 0x01) KeyCode=KEYCODE_ESC;
if(Key_Status_Now & 0x02) KeyCode=KEYCODE_BACKSPACE;
if(Key_Status_Now & 0x04) KeyCode=KEYCODE_UP;
if(Key_Status_Now & 0x08) KeyCode=KEYCODE_DOWN;
if(Key_Status_Now & 0x10) KeyCode=KEYCODE_LEFT;
if(Key_Status_Now & 0x20) KeyCode=KEYCODE_RIGHT;
if(Key_Status_Now & 0x40) KeyCode=KEYCODE_FN;
if(Key_Status_Now & 0x80) KeyCode=KEYCODE_SAVE;
if(Key_Status_Now & 0x100) KeyCode=KEYCODE_ENTER;
if(Key_Status_Now & 0x200) KeyCode=KEYCODE_HOLD;
if(Key_Status_Now & 0x400) KeyCode=KEYCODE_PWOFF;
if(Key_Status_Now & 0x800) KeyCode=KEYCODE_VIEW;
if(Key_Status_Now & 0x1000) KeyCode=KEYCODE_ALLDEL;
if(Key_Status_Now & 0x2000) KeyCode=KEYCODE_ADJUST;
if(Key_Status_Now & 0x4000) KeyCode=KEYCODE_TIME;
}
else
{
if(Key_Status_Now & Key_Status_Last)//某一个按键是在持续的按键的过程中。
{
if((Key_Wait_Counter | Key_Repeat_Counter)==0)
{
if(Key_Status_Now & 0x01) KeyCode=KEYCODE_ESC;
if(Key_Status_Now & 0x02) KeyCode=KEYCODE_BACKSPACE;
if(Key_Status_Now & 0x04) KeyCode=KEYCODE_UP;
if(Key_Status_Now & 0x08) KeyCode=KEYCODE_DOWN;
if(Key_Status_Now & 0x10) KeyCode=KEYCODE_LEFT;
if(Key_Status_Now & 0x20) KeyCode=KEYCODE_RIGHT;
if(Key_Status_Now & 0x40) KeyCode=KEYCODE_FN;
if(Key_Status_Now & 0x80) KeyCode=KEYCODE_SAVE;
if(Key_Status_Now & 0x100) KeyCode=KEYCODE_ENTER;
if(Key_Status_Now & 0x200) KeyCode=KEYCODE_HOLD;
if(Key_Status_Now & 0x400) KeyCode=KEYCODE_PWOFF;
if(Key_Status_Now & 0x800) KeyCode=KEYCODE_VIEW;
if(Key_Status_Now & 0x1000) KeyCode=KEYCODE_ALLDEL;
if(Key_Status_Now & 0x2000) KeyCode=KEYCODE_ADJUST;
if(Key_Status_Now & 0x4000) KeyCode=KEYCODE_TIME;
Key_Repeat_Counter = 3; //每60mS自动重复一次
}
}
else Key_Wait_Counter=25; //持续按键500mS内,不启动自动重复功能//什么按键都没有按下
}
Key_Status_Last = Key_Status_Now;
return KeyCode;
}
文章评论(0条评论)
登录后参与讨论