搜索
bottom↓
回复: 3

HT6221的C语言解码为什么不行呢

[复制链接]

出0入0汤圆

发表于 2012-5-2 14:28:28 | 显示全部楼层 |阅读模式
#include<reg51.h>
//根据自己的接线来改
sbit IRIN = P3^2;         //红外接收器数据线
sbit led = P3^7;          //指示灯
////////////////////////////////////////////
//定义数组IRCOM,分别装解码后得到的数据
//IRCOM[0]   低8位地址码
//IRCOM[1]   高8位地址码
//IRCOM[2]   8位数据码
//IRCOM[3]   8位数据码的反码      
/////////////////////////////////////////////


#define uchar unsigned char
#define uint unsigned int

uchar IRCOM[4]=0;
bit flag=0;
/********************/
void delay014ms(unsigned char x);    //x*0.14MS
void IR_init(void);
      
void delay014ms(unsigned char x)    //x*0.14MS STC10F04延时约0.15MS
{
unsigned char i;
while(x--)
{
for (i = 0; i<125; i++) //13
     {;}
}
}
///////////////
//初始化
////////////
void IR_init(void)
{
   EA=1;
   EX0=1;                 //允许总中断中断,使能 INT0 外部中断
   IT0=1;               //触发方式为脉冲负边沿触发   
   IRIN=1;                    //I/O口初始化
}
//////////
//解码过程
//////////////
void IR_CODE(void) interrupt 0   //在外部中断子程序中解码
{
unsigned char j,k,N=0;
     EX0 = 0;
delay014ms(15);
if (IRIN==1)
     { EX0 =1;
    return;
   }                           //确认IR信号出现   
while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
    {delay014ms(1);}
for (j=0;j<4;j++)         //收集四组数据
{
for (k=0;k<8;k++)        //每组数据有8位
{
   while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
     {delay014ms(1);}
    while (!IRIN)          //等 IR 变为高电平
     {delay014ms(1);}
     while (IRIN)           //计算IR高电平时长
      {
    delay014ms(1);
    N++;         
    if (N>=30)
{ EX0=1;
return;}              //0.14ms计数过长自动离开。
      }                        //高电平计数完毕              
     IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补"0"
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补"1"
     N=0;
}
}
   if (IRCOM[2]!=~IRCOM[3]) //不等的话表示解码失败
   {
IRCOM[4]=0;
EX0=1;
      return;
    }

   flag = !flag;//pro();//解码成功后运行的程序

//如果解码成功,flag就取一次,在主程序中,就根据flag的值来闪灯,
EX0=1;
return;
}


//主程序

void main(void)
          {
       IR_init( ); //初始化外部中断0
     flag = 0;
     while(1)
           {
         led=flag; //正确接收后的led闪灯的现像。
         //if(flag)
        //   {
       //     led =!led;
                    //     delay014ms(1);
       //   }
       // else led=1;

       }
    }
为什么用STC12LE5A60S2就是不能解码呢???????????????大神求救呀

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-5-2 15:38:56 | 显示全部楼层
原来用什么mcu可以解码??at89c51 ???
如果是,那么要修改delay延时时间

出0入0汤圆

发表于 2012-5-2 15:51:21 | 显示全部楼层
建议:
别用delay延时、while等待电平变化……去解码,修改麻烦也容易卡机,
NEC解码很简单,用外部中断(下降沿) + 定时器 检测信号周期,状态机方式解码,
想省资源的话一个定时器就行,先用定时器外部计数扩展成外部中断,有信号触发中断后再计数解码

出0入0汤圆

 楼主| 发表于 2012-5-2 17:11:38 | 显示全部楼层
大虾,可否给小弟一个代码,我现在需要用到,求求大虾了,NEC 解 码真的是不会呀
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表