蓝桥杯赛前准备(三)LED&BUTTON配置
流水灯程序相信大家也是十分熟悉的了,在CE117E开发板中要注意的一点就是它连接了一个AT24C02,我们要拉高PD2,才能控制LED的亮灭。
首先,要添加结构体
GPIO_InitTypeDef GPIO_InitStruct;
然后,我们得使能GPIOD,还要GPIOC的时钟,RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE);
然后就要开始配置,
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_2MHz;
然后开始拉高PD2,再拉高PC0-15,再拉低PD2,
GPIO_SetBits(GPIOD, GPIO_Pin_2);
GPIO_SetBits(GPIOC, GPIO_Pin_All); //LED1-8全灭
GPIO_ResetBits(GPIOD, GPIO_Pin_2);
要注意顺序,因为你要先拉高PD2才能控制LED0-8。
代码整合下来为
void LED_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_2MHz;
GPIO_SetBits(GPIOD, GPIO_Pin_2);
GPIO_SetBits(GPIOC, GPIO_Pin_All);
GPIO_ResetBits(GPIOD, GPIO_Pin_2);
}
这是LED的配置已经好了,只要先执行GPIO_SetBits(GPIOD, GPIO_Pin_2);
然后控制LED的亮灭,再执行GPIO_ResetBits(GPIOD, GPIO_Pin_2);
通过把PD2拉低即可。
那么接下来就是BUTTON 的配置
首先第一步先观察是按键连接了哪个引脚,四个按键分别对应为PA0,PA8,PB1,PB2这四个引脚。
所以要使能GPIOA还有GPIOB的时钟。
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);
接下来就是配置四个IO口
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOB, &GPIO_InitStruct);
这样就配置好四个IO口了
写按键的扫描函数之前,建议先设定四个宏定义
#define KEY1 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) #define KEY2 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) #define KEY3 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) #define KEY4 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_2)
添加这四个宏定义,之后写按键的扫描函数会方便一些。
void KEY_scan(void)
{
if(KEY1 == 0) { Delay_Ms(5); //消抖 if(KEY1 == 0) { LCD_DisplayStringLine(Line1, "11111111111111111111111");//屏幕显示“1111111111111” } while(KEY1 == 0); //判断按键有没有松开 } else if(KEY2 == 0) { Delay_Ms(5); if(KEY2 == 0) { LCD_DisplayStringLine(Line1, "22222222222222222222222");//屏幕显示“22222222222” } while(KEY2 == 0); } else if(KEY3 == 0) { Delay_Ms(5); if(KEY3 == 0) { LCD_DisplayStringLine(Line1, "33333333333333333333");//屏幕显示“3333333333” } while(KEY3 == 0); } else if(KEY4 == 0) { Delay_Ms(5); if(KEY4 == 0) { LCD_DisplayStringLine(Line1, "4444444444444444444");//屏幕显示“44444444444444” } while(KEY4 == 0); }
}
LCD_DisplayStringLine();这个函数是用来检测按键是否配置好的,发现配置好之后,就可以改写语句来达到你想要的效果。
把按键跟LED的配置在一起。