/* ****************************************************************************** * * @file led.c * @brief led module * @ic TP3102 * * @version 1.0 * @date 2022/08/04 15:00:40 * @author Alex Xu * * Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd. * All Rights Reserved * * History: * Revision Date Author Desc * 1.0.0 2022/08/04 Alex build this file ******************************************************************************/ /*_____ I N C L U D E S ____________________________________________________*/ #include "led.h" #if 1 #ifdef LED_DISPLAY /******************************************************************************\ Macro definitions \******************************************************************************/ /******************************************************************************\ Variables definitions \******************************************************************************/ bit F_led_sleep; bit F_led_blink = 0; idata volatile uint8_t Display_RSta = 0; // 显示状态 idata volatile uint8_t Display_GSta = 0; // 显示状态 static idata TS_LED_INFO LED; /******************************************************************************\ Functions definitions \******************************************************************************/ /* * 函数名称 : LED_Init * 功能描述 : LED初始化 * 参 数 : NONE * 返回值 : NONE */ /******************************************************************************/ void LED_Init(void) /******************************************************************************/ { LED_1_CONFIG(); LED_2_CONFIG(); LED_3_CONFIG(); LEDR_OFF(); LEDG_OFF(); LEDB_OFF(); } /* * 函数名称 : LED_On * 功能描述 : 点亮LED * 参 数 : LED的ID * 返回值 : NONE */ /******************************************************************************/ static void LED_On(uint8_t LedId) /******************************************************************************/ { switch(LedId) { case LED_R: LEDR_ON(); break; case LED_G: LEDG_ON(); break; case LED_B: LEDB_ON(); break; break; default: break; } } /* * 函数名称 : LED_Off * 功能描述 : 熄灭LED * 参 数 : LED的ID * 返回值 : NONE */ /******************************************************************************/ static void LED_Off(uint8_t LedId) /******************************************************************************/ { switch(LedId) { case LED_R: LEDR_OFF(); break; case LED_G: LEDG_OFF(); break; case LED_B: LEDB_OFF(); break; default: break; } } /* * 函数名称 : LED_Clr * 功能描述 : 熄灭全部LED * 参 数 : NONE * 返回值 : NONE */ /******************************************************************************/ void LED_Clr(void) /******************************************************************************/ { uint8_t i; for(i=0;i= LED.Flash_Period[i])//LED.Timer[i]表示累加的时间 { LED.Timer[i] = 0; if(LED.Flash_Times[i] > 0) { LED.Flash_Times[i]--; } if(LED.Flash_Times[i] == 0) { LED.State[i] = LED_OFF; if (i == LED_R) { Display_RSta = LED_OFF; // LED_OFF == DISPLAY_OFF } else if (i == LED_G) { Display_GSta = LED_OFF; // LED_OFF == DISPLAY_OFF } } } break; case LED_KEEP_FLASHING: if(LED.Timer[i] <= LED.Flash_Duty[i]) { LED_On(i); } else { LED_Off(i); } if(LED.Timer[i] >= LED.Flash_Period[i]) { LED.Timer[i] = 0; } break; default: LED_Off(i); break; } } for(i=0;i 3) //LED 驱动电流不能大于4mA { Driver_Cur = 0x01; } #if 1 switch(LED_Chn) { case LED_CH0: SFRADDR = MFP_CTL2; SFRDATA &= ~0x30; SFRDATA |= 0x10; SFRADDR = P1_DRV0; SFRDATA |= (Driver_Cur<<4) & 0x30; break; case LED_CH1: SFRADDR = MFP_CTL2; SFRDATA &= ~0xC0; SFRDATA |= 0x40; SFRADDR = P1_DRV0; SFRDATA |= (Driver_Cur<<6) & 0xC0; break; case LED_CH2: SFRADDR = MFP_CTL3; SFRDATA &= ~0x03; SFRDATA |= 0x01; SFRADDR = P1_DRV1; SFRDATA |= Driver_Cur & 0x03; break; case LED_CH3: SFRADDR = MFP_CTL3; SFRDATA &= ~0x0C; SFRDATA |= 0x04; SFRADDR = P1_DRV1; SFRDATA |= Driver_Cur & 0x0C; break; default: break; } #else SFRADDR = MFP_CTL2 + LED_Chn/2; if(LED_Chn/2) { SFRDATA &= ~(0x03 << (LED_Chn%2)*2); SFRDATA |= 0x01 << (LED_Chn%2)*2; SFRADDR = P1_DRV1; SFRDATA |= Driver_Cur & (0x03 << (LED_Chn%2)*2); } else { SFRDATA &= ~(0x30 << (LED_Chn%2)*2); SFRDATA |= 0x10 << (LED_Chn%2)*2; SFRADDR = P1_DRV0; SFRDATA |= Driver_Cur << (4 + (LED_Chn%2)*2) & (0x30 << (LED_Chn%2)*2); } #endif LED_CTL |= 1< 3) //LED 驱动电流不能大于4mA { Driver_Cur = 0x01; } switch(LED_Chn) { case LED_CH0: SFRADDR = MFP_CTL2; SFRDATA &= ~0x30; SFRDATA |= 0x10; SFRADDR = P1_DRV0; SFRDATA |= (Driver_Cur<<4) & 0x30; break; case LED_CH1: SFRADDR = MFP_CTL2; SFRDATA &= ~0xC0; SFRDATA |= 0x40; SFRADDR = P1_DRV0; SFRDATA |= (Driver_Cur<<6) & 0xC0; break; case LED_CH2: SFRADDR = MFP_CTL3; SFRDATA &= ~0x03; SFRDATA |= 0x01; SFRADDR = P1_DRV1; SFRDATA |= Driver_Cur & 0x03; break; case LED_CH3: SFRADDR = MFP_CTL3; SFRDATA &= ~0x0C; SFRDATA |= 0x04; SFRADDR = P1_DRV1; SFRDATA |= Driver_Cur & 0x0C; break; default: break; } // LED_CTL |= 1< 188) { Num = 188; } Num_Hundred = Num / 100; //百位 Num_Decade = (Num % 100) / 10; //十位 Num_Uint = (Num % 100) % 10; //个位 Set_AllLed_Down(); //消影 nDisplay_Sram = 0; nDisplay_Sram = Segment[0][Num_Hundred] | Segment[1][Num_Decade] | Segment[2][Num_Uint]; //显示百位,十位,个位。 switch(Case_Cnt) { case 0: Display_Scan(0,nDisplay_Sram); Case_Cnt++; break; case 1: Display_Scan(1,nDisplay_Sram); Case_Cnt++; break; case 2: Display_Scan(2,nDisplay_Sram); Case_Cnt++; break; case 3: Display_Scan(3,nDisplay_Sram); Case_Cnt = 0; break; default: Case_Cnt = 0; break; } } #endif