今天是除夕夜…
不想看春晚,不想看拜年祭,不想学习,但是又不得不学习…
唉~好难受
只能学习了…
孤独…
每天都在学AD、学STM32,看新概念模拟电路
希望未来能有个好收获把
另外今天我才开始去了解武汉的病情,好像还挺严重的,武汉加油!!
正题
GPIO每次使用前都要进行初始化,前面点灯环节已经介绍过大体流程,这次就简单一点。
第一步使能时钟
略
第二步配置引脚
本次实验我采用的是库函数版本。
区别在于Mode要根据按键情况选择上拉输入或者下拉输入。
另外不需要设置SPEED
接下来要用到一个函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
读取电平情况来判断按键是否按下。
下面就是老朋友了我也不想多说。
下面那段代码我写的其实并不好,应该默认return 0的。
然后注意点在于倒数第四行应该是&与操作,所有按键都松开才能重置标志位key_flag。
void delay_1ms(u32 time)
{
u32 i=8000*time;
while(i--);
}
int KEY_Scan(int mode)/0是单击模式 1是连按模式
{
static int key_flag=1;
if(mode==1)key_flag=1;
if((!KEY0||!KEY1||!KEY2||KEY_UP)&&key_flag)
delay_1ms(10);
if((!KEY0||!KEY1||!KEY2||KEY_UP)&&key_flag)
{
key_flag=0;
if(!KEY0)return KEY_R;
if(!KEY1)return KEY_M;
if(!KEY2)return KEY_L;
if(KEY_UP)return KEY_U;
}else if(KEY0&&KEY1&&KEY2&&!KEY_UP)
key_flag=1;
return 4;
}
大概就这样吧,完整代码详见正点原子。