/******************************************************************************* * Function Name : modeCommon * Description : 系统公共模式. * Input : 事件 * Output : None * Return : None *******************************************************************************/ static void modeCommon(u8 evt) { switch(evt) { case evtRxReaddy: { u16 len; u8 rxbuf[usart1_rx_buf_Number]; len = USART1_GetRxBufDat(rxbuf); if(len) { #ifdef INCLUDE_BUZZER BuzzerBeep(4); #endif USART1_Putbuf(rxbuf,len); } } break; case evtTime1s: #ifndef INCLUDE_IIC_DRIVER printf("%02x\r\n", SMB_Read(VOLTAGE)); printf("%02x\r\n", SMB_Read(DESIGN_CAPACITY+1)); printf("%02x\r\n", SMB_Read(DESIGN_CAPACITY+2)); printf("%02x\r\n", SMB_Read(DESIGN_CAPACITY+3)); printf("%02x\r\n", SMB_Read(TEMPERATURE)); #else printf("0x%x\r\n", SMB_Read2Byte(DESIGN_CAPACITY+2)); #endif //USART1_Putchar(0X55); { static uint8_t flashFlag; if (flashFlag){ flashFlag = 0; GPIO_SetBits(GPIOA, GPIO_Pin_8); }else{ flashFlag = 1; GPIO_ResetBits(GPIOA, GPIO_Pin_8); } } break; default: break; } }
// 以下1-9每1秒执行一次 static void Pollint1Sec(void) { switch(r_pollint._100msCount) { case 1: #if 0 { uint8_t smbBuf[3]; uartWriteDebug("Test=", 5); SMB_Read(RELATIVE_SOC, smbBuf, 1); uartWriteDebug(smbBuf, 1); SMB_Read(ABSOLUTE_SOC, smbBuf, 1); uartWriteDebug(smbBuf, 1); SMB_Read(BATTERY_STATUS, smbBuf, 2); uartWriteDebug(smbBuf, 2); SMB_Read(BATTERY_MODE, smbBuf, 2); uartWriteDebug(smbBuf, 2); } #endif break; case 2: if (systemState.delayPowerOffTime) { if (--systemState.delayPowerOffTime == 0) { systemState.powerOffFlag = 0; //开启外部中断 KEY_EnableIRQ(); //关掉时钟 uartWriteDebug("tmout", 5); Util_stopClock(&periodicClock_10ms); } } else if (systemState.powerOffFlag!=1 || systemState.keyUpFlag==1) { /* 在长按关机时,还没松开前默认是关机的所以不能显示图标 在长按开机时,以为短按触发中断系统开启,但此时不是开机事件, 所以也不能显示图标 */ systemState.lowBatteryFlag = userAppShowCharge(); if (2 == systemState.lowBatteryFlag) { OLED_ShowString(40, 0, " "); OLED_ShowString(40, 0, "No battery "); } else if (1 == systemState.lowBatteryFlag) { // 没电 图标闪烁警告 } else { //正常显示 } //OLED_testShowGengeeRoll(3); } break; case 3: if(CHARGING == chargeStateRead()) { systemState.keyUpFlag=1; } break; default: break; } }
/******************************************************************************* * @fn userAppShowCharge * * @brief 电池图标和百分比的显示 * * @param void * * @return 0 有电,1 没电 */ uint8_t userAppShowCharge(void) { uint8_t smbBuf[4]; uint8_t charge; uint8_t chargeState = 6; uint8_t bmpMov = 0; SMB_Read(RELATIVE_SOC, &charge, 1); //uartWriteDebug(&charge, 1); OLED_ShowString(40,0, " "); // 清电池显示区域 if (charge >100) { return 2; } if (100 == charge) { uartWriteDebug("T", 1); bmpMov = 8; chargeState = 0; } else if (charge > 90) { chargeState = 0; } else if(charge > 76) { chargeState = 1; } else if(charge > 62) { chargeState = 2; } else if(charge > 48) { chargeState = 3; } else if(charge > 34) { chargeState = 4; } else if(charge > 10) { chargeState = 5; } else { sprintf((char *)smbBuf, "%02d%", charge); OLED_ShowString(104,0, smbBuf); return 1; } sprintf((char *)smbBuf, "%02d%", charge); if (0 == isChargePowerUp()) { OLED_showBatteryBmp(0, 88-bmpMov, chargeState); } else { if (charge == 100) { uartWriteDebug("I", 1); OLED_showBatteryBmp(0, 88-bmpMov, chargeState); //chargedLedState(); } else { uartWriteDebug("O", 1); OLED_showBatteryBmp(0, 88-bmpMov, 7); // 显示充电图标 } } OLED_ShowString(104-bmpMov, 0, smbBuf); return 0; }