📄 bei20070111 led.c
字号:
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 /*INVALID SETTING*/; //setup
TCNT1L = 0x00 /*INVALID SETTING*/;
OCR1AH = 0x00 /*INVALID SETTING*/;
OCR1AL = 0x00 /*INVALID SETTING*/;
OCR1BH = 0x00 /*INVALID SETTING*/;
OCR1BL = 0x00 /*INVALID SETTING*/;
// OCR1CH = $OCR1CH$;
// OCR1CL = $OCR1CL$;
ICR1H = 0x00 /*INVALID SETTING*/;
ICR1L = 0x00 /*INVALID SETTING*/;
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 /*INVALID SETTING*/; //reload counter high value
TCNT1L = 0x00 /*INVALID SETTING*/; //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();
timer1_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();
//ICP_INPUT();
//insert your functional code here...
//while(N_001<=100)
//{
// N_001=N_001+SUM;
//}
//insert your functional code here...
}
void ICP_INT_JS() //10US /TIEMS
{
if (ICP_INT_SN==1)
{
if ((ICP_INPUT>>6)&0X01==1)
{
JS_ICP_INT=++JS_ICP_INT;
}
}
}
void ICP_INT_CLR_JS()
{
if (JS_ICP_INT>100) //100x100us=10ms clr
{
ICP_INT_SN=0;
//JS_TIMER1_ICP_INPUT=0;
}
}
/*
void ICP_T() //time0 ovf 100us/times
{
if (START_ICP_JS_TLOW==1) //interrupt 中断信号 第一个
{
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
{
JS_002=++JS_002; //ok 上升沿触发 检到高电平1 加1记数 ok
}
else
{
ICP_TIME=JS_002; //SAVE TIME head时间 test ok
JS_002=0; //clr js_002
}
}
//display_times(); test use it
} */
void display_times() //输入三位10进制&8位无符号数 (0xef) 用led 输出 成功
{
uchar temp1,temp2,temp3;
temp1=IR_CUSTOM_CODE;
temp2=IR_CUSTOM_CODE;
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 IR_CDOE() //10us 检测一次
{
uchar temp1;
switch(JS_TIMER1_ICP_INPUT)
{
case 1:
case 2:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME<40) //脉冲时间>4ms 译为1
IR_CUSTOM_CODE|=0X01; //DATA0 1111 1111 DATA0
else
IR_CUSTOM_CODE|=0X00;
break;
case 3:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME>40)
IR_CUSTOM_CODE|=0X02; //DATA1
else
IR_CUSTOM_CODE|=0X00;
break;
case 4:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME>40)
IR_CUSTOM_CODE|=0X04; //DATA3
else
IR_CUSTOM_CODE|=0X00;
break;
case 5:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME>40)
IR_CUSTOM_CODE|=0X08; //DATA4
else
IR_CUSTOM_CODE|=0X00;
display_times();
break;
case 10:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
temp1=++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME>3)
IR_DATA_CODE|=0X01; //DATA4
else
IR_DATA_CODE|=0X00;
break;
case 11:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
temp1=++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME>3)
IR_DATA_CODE|=0X02; //DATA4
else
IR_DATA_CODE|=0X00;
break;
case 12:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
temp1=++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME>3)
IR_DATA_CODE|=0X04; //DATA4
else
IR_DATA_CODE|=0X00;
break;
case 13:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
temp1=++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME>3)
IR_DATA_CODE|=0X08; //DATA4
else
IR_DATA_CODE|=0X00;
break;
case 14:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
temp1=++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME>3)
IR_DATA_CODE|=0X10; //DATA4
else
IR_DATA_CODE|=0X00;
break;
case 15:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
temp1=++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME>3)
IR_DATA_CODE|=0X20; //DATA4
else
IR_DATA_CODE|=0X00;
break;
case 16:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
temp1=++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME>3)
IR_DATA_CODE|=0X40; //DATA4
else
IR_DATA_CODE|=0X00;
break;
case 17:
if ((ICP_INPUT>>6)&0X01==1) //icp ==1 pd6==1
temp1=++temp1; //ok 上升沿触发 检到高电平1 加1记数 ok
else
{
ICP_TIME=temp1; //SAVE TIME head时间 test ok
temp1=0; //clr js_002
}
if (ICP_TIME>3)
IR_DATA_CODE|=0X80; //DATA4
else
IR_DATA_CODE|=0X00;
break;
case 25:
JS_TIMER1_ICP_INPUT=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -