| void key_Service(void) {
 // 采用轮询方法每100ms扫描一次开关状态,如果不变计数器清零进入下一次轮询,
 if(glTime.Scan_Count >= 100)
 {
 CurrentFlag = Key_Scan();
 
 if( CurrentFlag != PreiousFlag )    // 检查当前的 CurrentFlag 是否与上一次相同
 {
 switch(CurrentFlag)
 {
 case 1:
 GPIO_Write(1,INA1);     /* INA1高电平保持100ms  */
 GPIO_Write(1,INB2);     /* INB2高电平保持100ms  */
 delay_Tim_ms(150);      /* 延时100ms            */
 GPIO_Write(0,INA1);     /* INA1低电平保持                */
 GPIO_Write(0,INB2);     /* INB2低电平保持                */
 break;
 case 0:
 GPIO_Write(1,INB1);     /* INB1高电平保持100ms  */
 GPIO_Write(1,INA2);     /* INA2高电平保持100ms  */
 delay_Tim_ms(150);      /* 延时100ms                */
 GPIO_Write(0,INB1);     /* INB1低电平保持                */
 GPIO_Write(0,INA2);     /* INA2低电平保持                */
 break;
 }
 PreiousFlag = CurrentFlag;
 }
 glTime.Scan_Count = 0;
 }
 
 }
 
 /*
 函 数 名 称 :Key_Scan()
 函 数 功 能 :按键扫描函数,返回值0或1 代表开关的大小电流两种状态
 返 回 值 :0 或 1
 
 */
 int Key_Scan(void)
 {
 int state = 0;
 
 if(PinRead_Key() == key_left)                  // 读IO口状态
 {
 
 delay_Tim_ms(30);                                 // 延时消抖
 
 if(PinRead_Key() == key_left)        // 再读一次IO状态
 {
 state = key_left;
 }
 }
 else if(PinRead_Key() == key_right)
 {
 delay_Tim_ms(30);
 if(PinRead_Key() == key_right)
 {
 state = key_right;
 }
 }
 return state;
 }
 
 这是部分控制程序
 
 |