导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[ats2008]红外解码,大家切磋



No.46561
作者:ats2008
邮件:ats2008@tom.com
ID:16514
登陆:6次
文章数:1篇
最后登陆IP:210.27.5.34
最后登陆:2006/4/29 11:38:27
注册:2003/12/2 19:04:10
财富:110
发帖时间:2003/12/20 23:01:14
发贴者IP:221.15.185.71
标题:ats2008:红外解码,大家切磋
摘要:No.46561红外解码,大家切磋 首先把我的联系方式留几个:
QQ:112165
E_Mail:ats2008@tom.com
msn:ats2008@tom.com

由于刚开始接触单片机,所以做出来的程序也许不代表什么,程序还有一点点工作没有做,但是你可以在任何一个网站找代码,就是16B的非0即1数据转化为1B的问题,在程序中均有详细的说明,采用的是INT0,INT1,非门双中断,T0,T1双定时,更详细的请看程序,有什么好的想法,可以和我交流,最好的联系方式为Msn,由于我接触单片机只有 短短两个月,这里采用的是At89C52芯片,外电路不要找我,因为我采用的是最简电路.
详细程序如下(Keil C编译成功):

/*  title 红外解码方式程序设计*/
/*芯片的固有属性为起始位为低电平触发,也就是说采用反向双触发方式第三次出发就为需要的码*/
/*引导码9msL+4.5msH*/
#define CLK_CPU 11.0592
#include   <AT89X52.H>  

   bit flag;                       /*  定义中断标志*/
   bit status;                     /*中断来源 INT0=0;INT1=1*/
   unsigned int  *px;               /*存储解码信号*,第一位存储码数*/

   struct code_end
   {
      unsigned int number;
   unsigned char *compressdata;  /*把数据压缩后存储*/
   }code_end;

   unsigned int *time_high;        /*记录高电平持续时间  第一位为引导脉冲高点平*/
   unsigned int *time_low;
   unsigned int time_stand;        /*脉冲基数,即为低电平时间*/
   unsigned int count_intr;      /*中断产生的次数,这里去除了引导玛*/
   bit overlow_sign;               /*溢出标志*/
   bit start_recieve=0;
   void get_time_stand();
   void write_data();

   unsigned int int0_count;         /*低脉冲触发次数*/
   unsigned int int1_count;         /*高脉冲触发次数*/

   bit rec_time();  
   /*记录高低电平的时间*/
 void service_int0() interrupt 0 using 2   /* 中断0设置标志*/
     {
      flag=1;
   status=0;
   int0_count++;
   if(int0_count>  1)
   start_recieve=1;
   else
    start_recieve=0;
  }


 void service_int1() interrupt 1 using 2
  {

         flag=1;
   status=1;
   int1_count++;
      if(int0_count>  1)
   start_recieve=1;
   else
 start_recieve=0;

  }
     
void timer0_init()   /*定时器0初始化*/
     {
  TMOD = 0x11; /*定时器0 1 均工作在1状态*/
  TH0  = 0x00;
  TL0  = 0x00;
  TR0=0;
     }

void timer1_init() /* 定时器1初始化*/
 {
  TMOD = 0x11;
  TH1  = 0x00;
  TL1  = 0x00;
  TR1=0;
 }
    

bit  IR_init()  /*红外信号接收初始化*/
     {
  /*这里用来获取引导码,包括两个电平*/
  /*time_high time_low 第一个存储数据就是相应的引导码的数据*/
  /*9ms Low 4.5ms High  格力空调的编码,利用TEK示波器可以获取*/
  rec_time();
  return start_recieve;
  }
     
void write_data()  /*信号保存*/
  {
  unsigned int i;
  unsigned int j;
  unsigned int count_loop; ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:31毫秒 最大:5328毫秒 查询6次