按键S4是下拉,S1、S2、S3为上拉。一定要等待按键释放,否则按一次S1可能会运行key_scan()函数好几次。
1 /******************************************************************************* 2 * Function Name : key_scan 3 * Description : 按键扫描.优先级S4>S0>S1>S2。一定要等待按键释放 4 * Input : None 5 * Output : None 6 * Return : 按键值 7 *******************************************************************************/ 8 u8 key_scan() 9 { 10 if( (S4==1) || (S1==0) || (S2==0) || (S3==0) ) 11 { 12 delay_ms(10); 13 if(S1==0) 14 { 15 while(S1==0); 16 return S1_Press; 17 } 18 if(S2==0) 19 { 20 while(S2==0); 21 return S2_Press; 22 } 23 if(S3==0) 24 { 25 while(S3==0); 26 return S3_Press; 27 } 28 if(S4==1) 29 { 30 while(S4==1); 31 return S4_Press; 32 } 33 } 34 return 0; 35 }
头文件定义
1 #define S4 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)//S4 PA.0 2 #define S1 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4)//S1 PE.4 3 #define S2 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3)//S2 PE.3 4 #define S3 GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)//S3 PE.2 5 6 #define S1_Press 1 7 #define S2_Press 2 8 #define S3_Press 3 9 #define S4_Press 4
时间: 2024-10-26 16:53:32