您现在的位置: 主页 > MCU > 单片机应用 > AVR单片机uPD6121/AS6122等红外编码芯片的解码程序 -
本文所属标签:
为本文创立个标签吧:

AVR单片机uPD6121/AS6122等红外编码芯片的解码程序 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-08 

[导读]
#include#defineucharunsignedchar#defineulongunsignedlong/*------------------------------显示-----------------------------------*/#defineLED_DATAPORTBconstuchartab[]={0x3f,0x06,0x5b,0x4f,0

#include

本文引用地址: http://www.21ic.com/app/mcu/201807/765366.htm

#defineucharunsignedchar
#defineulongunsignedlong
/*------------------------------显示-----------------------------------*/
#defineLED_DATAPORTB
constuchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/*
0123456789ABCDEF
*/
voiddelay(void){
uinti;
for(i=0;i<2000;i++);
}
voiddis_int(uintdis_data)
{//四位共阴数码管,十六进制显示
LED_DATA=tab[(uchar)((dis_data&0xf000)>>12)];//显示千位
PORTD=0xf7;
delay();//延时

LED_DATA=tab[(uchar)((dis_data&0x0f00)>>8)];//显示百位
PORTD=0xfb;
delay();//延时

LED_DATA=tab[(uchar)(dis_data&0x00f0)>>4];//显示十位
PORTD=0xfd;
delay();//延时

LED_DATA=tab[(uchar)dis_data&0x000f];//显示个位
PORTD=0xfe;
delay();//延时
}
voidport_init(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTB=0xFF;
DDRB=0xFF;
PORTC=0xFF;
DDRC=0xFF;
PORTD=0xFF;
DDRD=0x0F;
}
voidtimer1_init(void)
{
TCCR1B=0x00;//stop
TCNT1H=0x00;//setup
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x08;
TCCR1A=0x00;
/*一体化接收头的DATA引脚接到ATmega16的PD6(ICP1)引脚,采用上升沿捕捉的方法解码*/
/*晶振为6M,无分频,用8M太大(分频则太小)*/
TCCR1B=0x41;//startTimer
}
uintarr[16];//保存捕捉值
uchartimes;//记录捕捉次数
ucharindex;//数组索引
ucharir_code;//红外遥控键码
ucharOK_flag;//解码完毕标志
/*------------------------------------------------------------------------------
模块名称:PD6(ICP1)引脚上升沿捕捉中断程序
影响:将捕捉值保存在arr[16]中
______
"|||
___||_________||__________
|


//------------------------------------------------

用M64,T3,晶体7.3728 ,GCC 20040214

1
void timer1_init(void)
{
TCCR3B = 0x00; //stop
TCNT3H = 0x00; //setup
TCNT3L = 0x00;
ICR3H = 0x00;
ICR3L = 0x08;
TCCR3A = 0x00;
/*一体化接收头的DATA引脚接到ATmega64的PE7(ICP3)引脚,采用上升沿捕捉的方法解码*/
/*晶振为7.3728M,8分频*/
TCCR1B = 0xC2; //start Timer @@@@@@@@@@@@@@@@@@@@@@@@@@@改动
}
2


SING(XXXXXXXXXXXXXXX)
{
uint value;
value=ICR3L;
value|=(uint)(ICR3H << 8);
TCNT3H = 0x00;
TCNT3L = 0x00;
times++;
if(times>18)&&(times<35){
//从第19个上升沿开始保存,直到第34个,短按时共有36个上升沿
arr[index]=value;
index++;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@改动
else if(times>35)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@改动

//else if(times>=35) //用此语句时第二个键值的第一位被上一键值的第36个脉冲复用,
{
//第35个上升沿到来时,解码完毕
times=0;
index=0;
OK_flag=1;
}
}




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机应用 > AVR单片机uPD6121/AS6122等红外编码芯片的解码程序 -
 

"AVR单片机uPD6121/AS6122等红外编码芯片的解码程序 -"的相关文章

网站地图

围观()