初级会员

- 积分
- 77
- 金钱
- 77
- 注册时间
- 2014-8-3
- 在线时间
- 0 小时
|

楼主 |
发表于 2015-5-8 22:53:07
|
显示全部楼层
另外原子哥 我想用systick 来扫描键盘 但是要判断countflag是否置一 不知从何处下手啦 请给予指点 我把程序附上
void Key_Scan(void)
{
if(temp&0x01&&!(temp&(1<<16)))//查询COUNTFLAG标志位,等待时间到达
{
temp=SysTick->CTRL;
}
else
{
/* 读取IO电平 */
KeyPortStatus = GPIO_ReadInputData(GPIOA) & 0x2000;
/* 进入状态机流程 */
switch(KeyScanState)
{
/* 状态1:判断有否按键按下 0代表按下 1 代表没按 */
case KeyScanState_0:
{
if(KeyPortStatus != 0x2000)
{
/* 有按键按下,更新状态标志 */
KeyScanState = KeyScanState_1;
}
break;
}
/* 状态2:判断是否抖动 */
case KeyScanState_1:
{
if(KeyPortStatus)
{
/* 非抖动,确认按键按下,执行相应操作 */
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_13) == 0)
{
GPIO_WriteBit(GPIOA, GPIO_Pin_8, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_8)));
}
/* 更新状态标志 */
KeyScanState = KeyScanState_2;
}
else
{
/* 抖动,确认按键未按下,更新状态标志*/
KeyScanState = KeyScanState_0;
}
break;
}
/* 状态3:松手检测 */
case KeyScanState_2:
{
if(KeyPortStatus == 0x2000)
{
/* 松手,更新状态标志 */
KeyScanState = KeyScanState_0;
}
break;
}
}
}
} |
|