按键初始化过程和LED初始化过程大同小异,只需要参照电路图把按键的输入模式配置成上拉输入还是下拉输入就行。
根据我的开发板原理图需要将KEY0~KEY2的GPIO_Mode配置成上拉输入,将KEY_UP的GPIO_Mode配置成下拉输入。
按键初始化
写一个传递按键的函数,确认是哪个按键按下。将其模块化也更好移植代码
if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1) //读取GPIOA端口0的电平
这里判断GPIOA端口0的电平恒为1是因为在原理图上KEY_UP是接VCC所以按键按下的时候GPIOA_Pin0读到的电平为高电平。
主函数程序
在第七行定义的Key是为了接收从按键传递函数传递的返回值,在while循环里面通过if判断来实现相应按键按下进行的的操作点亮相应的LED灯。
定义M值是为了在while循环里面再套一个可控循环,注释掉的if(Key == 4)里面就是可控循环但需要一个按键来让其退出可控循环。
不管是在大循环里判断哪个按键是否按下还是可控循环里,利用按键退出循环,都面临着在代码多的时候响应不及时的情况。为此,通过外部中断来响应使得响应更快,在下一章将使用外部中断来控制蜂鸣器。