📄 led.c
字号:
LED_DISPLAY_V3=--LED_DISPLAY_V3;
}
else
LED_DISPLAY_V4=--LED_DISPLAY_V4;
}
////////////LED_DISPLAY_SCAN/////////////////////////////////////////////////////////////////////////////////////
void LED_SCAN()
{
JS_001=++JS_001;
if (JS_001<=10)
{
HC573_CLK_PORTC|=HC573_CLK; // PC4 =1
LED_SCAN_PORTB|=0xff;
LED_SCAN_PORTB&=~LED_V1; //PB0=0
LED_DATA_PORTA&=0X00; //OUT LED_DATA
LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V1];
if (JS_001>=3)
HC573_CLK_PORTC&=~HC573_CLK; // PC4 =0
else
HC573_CLK_PORTC|=HC573_CLK; // PC4 =1
}
else if (JS_001>10,JS_001<=20)
{
HC573_CLK_PORTC|=HC573_CLK; // PC4 =0
LED_SCAN_PORTB|=0xff;
LED_SCAN_PORTB&=~LED_V2; //PB1=0
LED_DATA_PORTA&=0X00;
LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V2];
if (JS_001>=13)
HC573_CLK_PORTC&=~HC573_CLK; // PC4 =0
else
HC573_CLK_PORTC|=HC573_CLK; // PC4 =1
}
else if (JS_001>20,JS_001<=30)
{
HC573_CLK_PORTC|=HC573_CLK; // PC4 =1
LED_SCAN_PORTB=0xff;
LED_DATA_PORTA&=0X00;
LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V3];
LED_SCAN_PORTB&=~LED_V3; //PB2=0
if (JS_001>=23)
HC573_CLK_PORTC&=~HC573_CLK; // PC4 =0
else
HC573_CLK_PORTC|=HC573_CLK; // PC4 =1
}
else if (JS_001>30,JS_001<=40)
{
HC573_CLK_PORTC|=HC573_CLK; // PC4 =1
LED_SCAN_PORTB=0xff;
LED_DATA_PORTA&=0X00;
LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V4];
LED_SCAN_PORTB&=~LED_V4; //PB3=0
if (JS_001>=33)
HC573_CLK_PORTC&=~HC573_CLK; // PC4 =0
else
HC573_CLK_PORTC|=HC573_CLK; // PC4 =1
}
else if (JS_001>40,JS_001<=50)
{
HC573_CLK_PORTC|=HC573_CLK; // PC4 =1
LED_SCAN_PORTB=0xff;
LED_DATA_PORTA|=0Xff;
LED_DATA_PORTA&=LED_DATA[LED_DISPLAY_V5];
LED_SCAN_PORTB&=~LED_V5; //PB4=0
if (JS_001>=43)
HC573_CLK_PORTC&=~HC573_CLK; // PC4 =0
else
HC573_CLK_PORTC|=HC573_CLK; // PC4 =1
if (JS_001==50)
JS_001&=0;
}
}
/*
////////////////////////////TIMER1///////////////////////////////////////////////////////////////////////////
//TIMER1 initialize - prescale:Falling edge
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 0Hz
// actual value: Out of range
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0x00 ; //setup
TCNT1L = 0x00 ;
OCR1AH = 0x00 ;
OCR1AL = 0x00 ;
OCR1BH = 0x00 ;
OCR1BL = 0x00 ;
// OCR1CH = $OCR1CH$;
// OCR1CL = $OCR1CL$;
ICR1H = 0x00 ;
ICR1L = 0x00 ;
TCCR1A = 0x00;
TCCR1B = 0x87; //start Timer 详见p173 ICP 选上升沿触发 47 87
}
/*
///////////////////////ICP_INPUT//////////////////////////////////////////////
#pragma interrupt_handler timer1_capt_isr:6
void timer1_capt_isr(void)
{
//timer 1 input capture event, read (int)value in ICR1 using;
// value=ICR1L; //Read low byte first (important)
// value|=(int)ICR1H << 8; //Read high byte and shift into top byte
//LED_DISPLAY_V4=8; //TEST OK
JS_TIMER1_ICP_INPUT=++JS_TIMER1_ICP_INPUT; //8 bit IR INT/TIMES ++
ICP_INT_SN=1; //ICP 产生中断标志位
OUT_22_LOW=JS_TIMER1_ICP_INPUT; // 记数 二进制显示 test use
LED_DISPLAY_V1=(OUT_22_LOW>>3)&0X01;
OUT_22_LOW=JS_TIMER1_ICP_INPUT;
LED_DISPLAY_V2=(OUT_22_LOW>>2)&0X01;
OUT_22_LOW=JS_TIMER1_ICP_INPUT;
LED_DISPLAY_V3=(OUT_22_LOW>>1)&0X01;
OUT_22_LOW=JS_TIMER1_ICP_INPUT;
LED_DISPLAY_V4=OUT_22_LOW&0X01;
LED_DISPLAY_V5=15;
}
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
//TIMER1 has overflowed
TCNT1H = 0x00; //reload counter high value
TCNT1L = 0x00; //reload counter low value
}
*/
////////////////////////////UART0//////////////////////////////////////////////////////////////////////
//UART0 initialize
// desired baud rate: 250000
// actual: baud rate:250000 (0.0%)
// char size: 9 bit
// parity: Odd
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x03;
UCSRC = BIT(URSEL) | 0x36;
UBRRL = 0x07; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0xFC;
}
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
//uart has received a character in UDR
}
#pragma interrupt_handler uart0_udre_isr:13
void uart0_udre_isr(void)
{
//character transferred to shift register so UDR is now empty
}
#pragma interrupt_handler uart0_tx_isr:14
void uart0_tx_isr(void)
{
//character has been transmitted
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
//watchdog_init();
timer0_init();
uart0_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x25; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
////////////////////////MAIN////////////////////////////////////////////////////////////////////
void main(void)
{
init_devices();
while (1)
{
if (bIrCmdOk) CheckIrCmd();
if (bCmdOk) ReadCmd();
}
//insert your functional code here...
//while(N_001<=100)
//{
// N_001=N_001+SUM;
//}
//insert your functional code here...
}
void display_times() //输入三位10进制&8位无符号数 (0xef) 用led 输出 成功
{
char temp1,temp2,temp3;
temp1=iIrData[0]>>4;
temp2=iIrData[0]>>4;
//temp1=(iIrData[2]+(iIrData[1]>>4));
//temp2=(iIrData[2]+(iIrData[1]>>4));
LED_DISPLAY_V2=temp1/100;
temp2=temp2%100;
temp3=temp2;
LED_DISPLAY_V3=temp2/10;
LED_DISPLAY_V4=temp3%10;
// LED_DISPLAY_V4=6; //testy
}
//红外解码
void CheckIR()
{
//uchar iNowBit,iPos;
if ((PIND&(1<<IR))>0) //ICP INPUT CHECK
iNowBit=0;
else
iNowBit=1;//先反相
//把信号持续的处理作为公共处理
if ((iPreBit==1)&&(iNowBit==1))//hight++
{ iHight++;
return;
}
if ((iPreBit==0)&&(iNowBit==0))//low++
{ iLow++;
return;
}
switch (iIrMode)
{
case 0://等待9ms的高电平
if ((iPreBit==0)&&(iNowBit==1))//0->1:start
{ iPreBit=1;
iHight=1;
return;
}
if ((iPreBit==1)&&(iNowBit==0))//1->0
{ iPreBit=0;
if (iHight>12)//1.30ms
{ iIrMode=1;
iLow=1;
iHight=0;
//bCmdOk=1;iCmd=10;//Test..
}
else
{iHight=0;//reset
}
return;
}
break;
case 1://等待1.6ms的低电平
if ((iPreBit==0)&&(iNowBit==1))//0->1
{ iPreBit=1;
if (iLow>15)//1.6ms
{ iIrMode=2;
iBitCount=0;
iIrData[0]=0;iIrData[1]=0;iIrData[2]=0;iIrData[3]=0;
iHight=1;
//bCmdOk=1;iCmd=10;//Test..
}
else
{ iIrMode=0;
//确实只发送一次,后面的是按键保持信号,无按键码信息
}
return;
}
break;
case 2://接收用户码和按键码,共32Bit
if ((iPreBit==1)&&(iNowBit==0))//1->0
{ iPreBit=0;
iLow=1;
}
if ((iPreBit==0)&&(iNowBit==1))//0->1
{ iPreBit=1;
//已经接收1Bit,根据占空比判断01
if (iLow>(iHight+iHight)) iNowBit=0;else iNowBit=1;
//Bit0在前,右移位
iPos=iBitCount/4;
iIrData[iPos]=iIrData[iPos]>>1;
if (iNowBit==1) iIrData[iPos]|=0x80;
iBitCount++;
if (iBitCount>=24)
{ bIrCmdOk=1;
iIrMode=0;
//bCmdOk=1;iCmd=10;//Test..
}
iHight=1;//must!
}
break;
default:
iIrMode=0;
break;
}
}
//对红外命令判断操作
void CheckIrCmd()
{uchar i;
bIrCmdOk=0;
if ((iIrData[0]>>4)==CUSTOMCODE) //CUSTOMCODE ==9
i=(iIrData[2]+(iIrData[1]>>4));
//BeepN(i&0x0f);
switch (i)
{ case POWER_ON:
bCmdOk=1;iCmd=POWER_ON;
break;
case STAND_BY:
bCmdOk=1;iCmd=STAND_BY;
break;
case DMX:
bCmdOk=1;iCmd=DMX;
break;
case AUTO:
bCmdOk=1;iCmd=AUTO;
break;
case AUDIO:
bCmdOk=1;iCmd=AUDIO;
break;
case FADETIME_UP:
bCmdOk=1;iCmd=FADETIME_UP;
break;
case FADETIME_DOWN:
bCmdOk=1;iCmd=FADETIME_DOWN;
break;
case PATTERN_UP:
bCmdOk=1;iCmd=PATTERN_UP;
break;
case PATTERN_DOWN:
bCmdOk=1;iCmd=PATTERN_DOWN;
break;
}
}
//命令执行
void ReadCmd()
{
bCmdOk=0;
//Beep();
switch (iCmd)
{
case POWER_ON:
break;
case STAND_BY:
break;
case DMX:
break;
case AUTO:
break;
case AUDIO:
break;
case FADETIME_UP:
break;
case FADETIME_DOWN:
break;
case PATTERN_UP:
LED_DISPLAY_UP_DMX512();
break;
case PATTERN_DOWN:
LED_DISPLAY_DOWN_DMX512();
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -