📄 led.c
字号:
#include "includes.h"
volatile unsigned char RF_SIGNAL_LED_Val;
volatile unsigned char SYS_POWER_LED_Val;
volatile unsigned char SENSOR_STATUS_LED_Val;
volatile unsigned char SYS_STATUS_LED_Val;
ISR(TIMER0_OVF_vect) //灯闪烁服务
{
if(RF_SIGNAL_LED_Val&LED_FLASH_OPERA_START)
{
switch(RF_SIGNAL_LED_Val&LED_FLASH_OPREA_TOGGLE_TIME_MASK)
{
case LED_FLASH_OPREA_TOGGLE_PER_256MS:
switch(RF_SIGNAL_LED_Val&LED_FLASH_TOGGLE_TIME_COUNTER_MASK)
{
case 7:
LED_Toggle(RF_SIGNAL_LED);
RF_SIGNAL_LED_Val++;
break;
case 15:
LED_Toggle(RF_SIGNAL_LED);
if(RF_SIGNAL_LED_Val&LED_FLASH_OPREA_TOGGLE_FOREVER)
{
RF_SIGNAL_LED_Val&=~LED_FLASH_TOGGLE_TIME_COUNTER_MASK;
}
else
{
RF_SIGNAL_LED_Val=LED_FLASH_OPERA_STOP;
}
break;
default:
RF_SIGNAL_LED_Val++;
break;
}
break;
case LED_FLASH_OPREA_TOGGLE_PER_32MS:
switch(RF_SIGNAL_LED_Val&LED_FLASH_TOGGLE_TIME_COUNTER_MASK)
{
case 0:
LED_Toggle(RF_SIGNAL_LED);
RF_SIGNAL_LED_Val++;
break;
case 1:
LED_Toggle(RF_SIGNAL_LED);
if(RF_SIGNAL_LED_Val&LED_FLASH_OPREA_TOGGLE_FOREVER)
{
RF_SIGNAL_LED_Val&=~LED_FLASH_TOGGLE_TIME_COUNTER_MASK;
}
else
{
RF_SIGNAL_LED_Val=LED_FLASH_OPERA_STOP;
}
break;
default:
RF_SIGNAL_LED_Val++;
break;
}
break;
default:
break;
}
}
if(SYS_POWER_LED_Val&LED_FLASH_OPERA_START)
{
switch(SYS_POWER_LED_Val&LED_FLASH_OPREA_TOGGLE_TIME_MASK)
{
case LED_FLASH_OPREA_TOGGLE_PER_256MS:
switch(SYS_POWER_LED_Val&LED_FLASH_TOGGLE_TIME_COUNTER_MASK)
{
case 7:
LED_Toggle(SYS_POWER_LED);
SYS_POWER_LED_Val++;
break;
case 15:
LED_Toggle(SYS_POWER_LED);
if(SYS_POWER_LED_Val&LED_FLASH_OPREA_TOGGLE_FOREVER)
{
SYS_POWER_LED_Val&=~LED_FLASH_TOGGLE_TIME_COUNTER_MASK;
}
else
{
SYS_POWER_LED_Val=LED_FLASH_OPERA_STOP;
}
break;
default:
SYS_POWER_LED_Val++;
break;
}
break;
case LED_FLASH_OPREA_TOGGLE_PER_32MS:
switch(SYS_POWER_LED_Val&LED_FLASH_TOGGLE_TIME_COUNTER_MASK)
{
case 0:
LED_Toggle(SYS_POWER_LED);
SYS_POWER_LED_Val++;
break;
case 1:
LED_Toggle(SYS_POWER_LED);
if(SYS_POWER_LED_Val&LED_FLASH_OPREA_TOGGLE_FOREVER)
{
SYS_POWER_LED_Val&=~LED_FLASH_TOGGLE_TIME_COUNTER_MASK;
}
else
{
SYS_POWER_LED_Val=LED_FLASH_OPERA_STOP;
}
break;
default:
SYS_POWER_LED_Val++;
break;
}
break;
default:
break;
}
}
if(SENSOR_STATUS_LED_Val&LED_FLASH_OPERA_START)
{
switch(SENSOR_STATUS_LED_Val&LED_FLASH_OPREA_TOGGLE_TIME_MASK)
{
case LED_FLASH_OPREA_TOGGLE_PER_256MS:
switch(SENSOR_STATUS_LED_Val&LED_FLASH_TOGGLE_TIME_COUNTER_MASK)
{
case 7:
LED_Toggle(SENSOR_STATUS_LED);
SENSOR_STATUS_LED_Val++;
break;
case 15:
LED_Toggle(SENSOR_STATUS_LED);
if(SENSOR_STATUS_LED_Val&LED_FLASH_OPREA_TOGGLE_FOREVER)
{
SENSOR_STATUS_LED_Val&=~LED_FLASH_TOGGLE_TIME_COUNTER_MASK;
}
else
{
SENSOR_STATUS_LED_Val=LED_FLASH_OPERA_STOP;
}
break;
default:
SENSOR_STATUS_LED_Val++;
break;
}
break;
case LED_FLASH_OPREA_TOGGLE_PER_32MS:
switch(SENSOR_STATUS_LED_Val&LED_FLASH_TOGGLE_TIME_COUNTER_MASK)
{
case 0:
LED_Toggle(SENSOR_STATUS_LED);
SENSOR_STATUS_LED_Val++;
break;
case 1:
LED_Toggle(SENSOR_STATUS_LED);
if(SENSOR_STATUS_LED_Val&LED_FLASH_OPREA_TOGGLE_FOREVER)
{
SENSOR_STATUS_LED_Val&=~LED_FLASH_TOGGLE_TIME_COUNTER_MASK;
}
else
{
SENSOR_STATUS_LED_Val=LED_FLASH_OPERA_STOP;
}
break;
default:
SENSOR_STATUS_LED_Val++;
break;
}
break;
default:
break;
}
}
if(SYS_STATUS_LED_Val&LED_FLASH_OPERA_START)
{
switch(SYS_STATUS_LED_Val&LED_FLASH_OPREA_TOGGLE_TIME_MASK)
{
case LED_FLASH_OPREA_TOGGLE_PER_256MS:
switch(SYS_STATUS_LED_Val&LED_FLASH_TOGGLE_TIME_COUNTER_MASK)
{
case 7:
LED_Toggle(SYS_STATUS_LED);
SYS_STATUS_LED_Val++;
break;
case 15:
LED_Toggle(SYS_STATUS_LED);
if(SYS_STATUS_LED_Val&LED_FLASH_OPREA_TOGGLE_FOREVER)
{
SYS_STATUS_LED_Val&=~LED_FLASH_TOGGLE_TIME_COUNTER_MASK;
}
else
{
SYS_STATUS_LED_Val=LED_FLASH_OPERA_STOP;
}
break;
default:
SYS_STATUS_LED_Val++;
break;
}
break;
case LED_FLASH_OPREA_TOGGLE_PER_32MS:
switch(SYS_STATUS_LED_Val&LED_FLASH_TOGGLE_TIME_COUNTER_MASK)
{
case 0:
LED_Toggle(SYS_STATUS_LED);
SYS_STATUS_LED_Val++;
break;
case 1:
LED_Toggle(SYS_STATUS_LED);
if(SYS_STATUS_LED_Val&LED_FLASH_OPREA_TOGGLE_FOREVER)
{
SYS_STATUS_LED_Val&=~LED_FLASH_TOGGLE_TIME_COUNTER_MASK;
}
else
{
SYS_STATUS_LED_Val=LED_FLASH_OPERA_STOP;
}
break;
default:
SYS_STATUS_LED_Val++;
break;
}
break;
default:
break;
}
}
}
/***************************************************************************************************
功能:初始化指定的LED
参数:ucLED是LED名称,取值下列值之一或者它们之间的“或运算”组合形式
返回:无
***************************************************************************************************/
void LED_Init(unsigned char ucLED)
{
if ( ucLED & RF_SIGNAL_LED )
{
DDRC|=_BV(P1);
LED_Off(RF_SIGNAL_LED);
}
if ( ucLED & SYS_POWER_LED )
{
DDRB|=_BV(P2);
LED_Off(SYS_POWER_LED);
}
if ( ucLED & SENSOR_STATUS_LED )
{
DDRC|=_BV(P0);
LED_Off(SENSOR_STATUS_LED);
}
if ( ucLED & SYS_STATUS_LED )
{
DDRC|=_BV(P2);
LED_Off(SYS_STATUS_LED);
}
//初始化灯闪烁功能
TCCR0|=_BV(CS02)|_BV(CS00); //预分频 1024 8M 下溢出中断可获得 32MS的延时
TIMSK|=_BV(TOIE0); //开启溢出中断
}
/***************************************************************************************************
功能:点亮指定的LED
参数:ucLED是LED名称,取值下列值之一或者它们之间的“或运算”组合形式
返回:无
***************************************************************************************************/
void LED_On(unsigned char ucLED)
{
if ( ucLED & RF_SIGNAL_LED )
{
PORTC|=_BV(P1);
}
if ( ucLED & SYS_POWER_LED )
{
PORTB|=_BV(P2);
}
if ( ucLED & SENSOR_STATUS_LED )
{
PORTC|=_BV(P0);
}
if ( ucLED & SYS_STATUS_LED )
{
PORTC|=_BV(P2);
}
}
/***************************************************************************************************
功能:熄灭指定的LED
参数:ucLED是LED名称,取值下列值之一或者它们之间的“或运算”组合形式
返回:无
***************************************************************************************************/
void LED_Off(unsigned char ucLED)
{
if ( ucLED & RF_SIGNAL_LED )
{
PORTC&=~_BV(P1);
}
if ( ucLED & SYS_POWER_LED )
{
PORTB&=~_BV(P2);
}
if ( ucLED & SENSOR_STATUS_LED )
{
PORTC&=~_BV(P0);
}
if ( ucLED & SYS_STATUS_LED )
{
PORTC&=~_BV(P2);
}
}
/***************************************************************************************************
功能:反转指定的LED
参数:ucLED是LED名称,取值下列值之一或者它们之间的“或运算”组合形式
返回:无
***************************************************************************************************/
void LED_Toggle(unsigned char ucLED)
{
unsigned char ucVal;
if ( ucLED & RF_SIGNAL_LED )
{
ucVal=PINC&_BV(P1);
if(ucVal)
LED_Off(RF_SIGNAL_LED);
else
LED_On(RF_SIGNAL_LED);
}
if ( ucLED & SYS_POWER_LED )
{
ucVal=PINB&_BV(P2);
if(ucVal)
LED_Off(SYS_POWER_LED);
else
LED_On(SYS_POWER_LED);
}
if ( ucLED & SENSOR_STATUS_LED )
{
ucVal=PINC&_BV(P0);
if(ucVal)
LED_Off(SENSOR_STATUS_LED);
else
LED_On(SENSOR_STATUS_LED);
}
if ( ucLED & SYS_STATUS_LED )
{
ucVal=PINC&_BV(P2);
if(ucVal)
LED_Off(SYS_STATUS_LED);
else
LED_On(SYS_STATUS_LED);
}
}
void LED_Flash(unsigned char ucLED,unsigned char Opera)
{
if(ucLED&RF_SIGNAL_LED)
{
RF_SIGNAL_LED_Val=Opera;
}
if(ucLED&SYS_POWER_LED)
{
SYS_POWER_LED_Val=Opera;
}
if(ucLED&SENSOR_STATUS_LED)
{
SENSOR_STATUS_LED_Val=Opera;
}
if(ucLED&SYS_STATUS_LED)
{
SYS_STATUS_LED_Val=Opera;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -