SIGNAL(SIG_INTERRUPT0)
{
unsigned char i;
unsigned char plus_width=0;
while(!IR_RX) // 计算引导电平的宽度
{
_delay_loop_2(200);
plus_width++;
}
if(plus_width<80) // 如果低电平不到8ms即视为是干扰信号
{
return;
}
plus_width=0;
while(IR_RX) // 计算4.5ms低电平宽度
{
_delay_loop_2(200);
plus_width++;
}
if(plus_width<30) // 如果不到3ms即视为2.5ms连发信号
{
return;
}
if(plus_width<40) // 如果不到4ms视为错误信号,放弃接收
{
return;
}
for(i=0;i<16;i++)
{
while(!IR_RX); // 等待0.56ms低电平结束
plus_width=0;
while(IR_RX) // 计算高电平宽度
{
_delay_loop_2(200);
plus_width++;
}
user_code>>=1;
if(plus_width>8)
{
user_code|=0x8000;
}
}
for(i=0;i<16;i++)
{
while(!IR_RX); // 等待0.56ms低电平结束
plus_width=0;
while(IR_RX) // 计算高电平宽度
{
_delay_loop_2(200);
plus_width++;
}
operate_code>>=1;
if(plus_width>8)
{
operate_code|=0x8000;
}
}
ir_rx_complete_flag=1;
}
int main(void)
{
TCCR1A= 0x00; // 定时器工作在普通模式
TCCR1B=(1<<ICNC1)|(1<<CS11); // PD6/ICP端口捕捉噪声抑制,下降沿触发捕捉中断中断,定时器8分频
TIMSK=(1<<TICIE1); // 外部捕获中断使能
PORTC|=0X1E; // PC2-P4输出高电平
DDRC|=0X1E; // PC2-PC4设置为输出口
ht1621_int();
sei();
lcd_dis_buf[10]=pgm_read_byte(lcd7_code+(char)(user_code/256/16));
lcd_dis_buf[9]=pgm_read_byte(lcd7_code+(char)(user_code/256%16));
lcd_dis_buf[8]=pgm_read_byte(lcd7_code+(char)(user_code%256/16));
lcd_dis_buf[7]=pgm_read_byte(lcd7_code+(char)(user_code%256%16));
lcd_dis_buf[4]=pgm_read_byte(lcd7_code+(char)(operate_code/256/16));
lcd_dis_buf[3]=pgm_read_byte(lcd7_code+(char)(operate_code/256%16));
lcd_dis_buf[2]=pgm_read_byte(lcd7_code+(char)(operate_code%256/16));
lcd_dis_buf[1]=pgm_read_byte(lcd7_code+(char)(operate_code%256%16));
while(1)
{
if(ir_rx_complete_flag==1)
{
lcd_dis_buf[10]=pgm_read_byte(lcd7_code+(char)(user_code/256/16));
lcd_dis_buf[9]=pgm_read_byte(lcd7_code+(char)(user_code/256%16));
lcd_dis_buf[8]=pgm_read_byte(lcd7_code+(char)(user_code%256/16));
lcd_dis_buf[7]=pgm_read_byte(lcd7_code+(char)(user_code%256%16));
lcd_dis_buf[4]=pgm_read_byte(lcd7_code+(char)(operate_code/256/16));
lcd_dis_buf[3]=pgm_read_byte(lcd7_code+(char)(operate_code/256%16));
lcd_dis_buf[2]=pgm_read_byte(lcd7_code+(char)(operate_code%256/16));
lcd_dis_buf[1]=pgm_read_byte(lcd7_code+(char)(operate_code%256%16));
ir_rx_complete_flag=0;
}
ht1621_write_string(lcd_dis_buf,0x00,16);
}
}
本文关键字:暂无联系方式AVR单片机,单片机-工控设备 - AVR单片机