1:Key_GPIOConfig()函数分析
- void Key_GPIOConfig(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
- /* EXTI line gpio config(PC13 PC2) */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- }
配置PA-0.1.2.3四个独立按键引脚以及模式。
2: Read_Key_Port()读按键操作
- uint8_t Read_Key_Port(void)
- {
- if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0))
- {
- return KEY_1;
- }
- else if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))
- {
- return KEY_2;
- }
- else if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2))
- {
- return KEY_3;
- }
- else if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3))
- {
- return KEY_4;
- }
- return 0;
- }
采用直接读按键方式·根据返回值确定·那个按键被选中。
3:扫描方式读取按键的值
- uint8_t key_scan(void)
- {
- switch(Read_Key_Port())
- {
- case KEY_1:
- delay_ms(30);
- if(Read_Key_Port() == KEY_1)
- {
- while(!(Read_Key_Port() == 0));
- return KEY_1;
- }
- break;
- case KEY_2:
- delay_ms(30);
- if(Read_Key_Port() == KEY_2)
- {
- while(!(Read_Key_Port() == 0));
- return KEY_2;
- }
- break;
- case KEY_3:
- delay_ms(30);
- if(Read_Key_Port() == KEY_3)
- {
- while(!(Read_Key_Port() == 0));
- return KEY_3;
- }
- break;
- case KEY_4:
- delay_ms(30);
- if(Read_Key_Port() == KEY_4)
- {
- while(!(Read_Key_Port() == 0));
- return KEY_4;
- }
- break;
- default:
- break;
- }
-
- return NO_KEY;
- }
采用扫描读按键方式·根据返回值确定那个按键被选中。
4:主函数操作
- int main(void)
- {
- DHT11_Data_TypeDef DHT11_Data;
- System_init();
- Run_Start();
- LCD_P8x16Str(30,0,"FS-IOT32");
- printf("hello watcher!\r\n");
- while(1)
- {
- Run_Task();
- switch(key_scan())
- {
- //case KEY_1:
- case KEY_1:
- Beep_Contrl(BEEP_ON);
- break;
- //case KEY_2:
- case KEY_2:
- Beep_Contrl(BEEP_OFF);
- LCD_CLS();
- LCD_P8x16Str(20,4,"Setup Timer!!");
- delay_ms(1000);
- LCD_CLS();
- LCD_P8x16Str(30,0,"FS-IOT32");
- break;
- //case KEY_3:
- case KEY_3: //RTCAlarm Mode
- LCD_CLS();
- LCD_P8x16Str(20,4,"Setup Alarm!!");
- delay_ms(1000);
- LCD_CLS();
- LCD_P8x16Str(30,0,"FS-IOT32");
- break;
- //case KEY_4:
- case KEY_4:
- LCD_CLS();
- LCD_P8x16Str(30,0,"Alarm 1");
- LCD_CLS();
- LCD_P8x16Str(30,0,"FS-IOT32");
- break;
- }
- }
-
- }