单片机红外线遥控解码实验

  • V7_954630
    了解作者
  • 17.3KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-01 11:34
    上传日期
单片机红外线遥控解码实验 源程序!编译下载测试完全实用!
17 SAA3010红外线遥控解码实验.rar
  • 17 SAA3010红外线遥控解码实验
  • yaokong.plg
    220B
  • yaokong.LST
    6.5KB
  • yaokong.OBJ
    2.9KB
  • SAA3010.h
    512B
  • SAA3010.OBJ
    2.6KB
  • SAA3010.LST
    7.1KB
  • yaokong.hex
    2.7KB
  • yaokong.lnp
    47B
  • SAA3010.c
    4.2KB
  • yaokong
    3.5KB
  • yaokong.M51
    13.3KB
  • main.h
    916B
  • yaokong.Uv2
    2KB
  • yaokong.Opt
    1.3KB
  • yaokong.c
    2.7KB
内容介绍
/****************************************/ /*杭州电子&计算机工作室 */ /*http://www.hificat.com */ /*SAA3010红外线遥控解码实验 */ /*目标器件:AT89S51 */ /*晶振:11.0592MHZ */ /*编译环境:Keil 7.50A */ /****************************************/ #define SAA3010_GLOBALS #include <reg51.h> #include "SAA3010.h" #include "main.h" //=========================================================================================================== // 该函数的作用是每调用一次就在temp1-4组成的32bit长度的最低位上移入 // 一个0或者1,数据由bitdata确定 void SAA3010_cycle_data(unsigned char bitdata) { temp4=temp4<<1; if((temp3&0x80)==1) temp4=temp4|0x01; else temp4=temp4&0xfe; temp3=temp3<<1; if((temp2&0x80)==1) temp3=temp3|0x01; else temp3=temp3&0xfe; temp2=temp2<<1; if((temp1&0x80)==1) temp2=temp2|0x01; else temp2=temp2&0xfe; temp1=temp1<<1; if(bitdata==1) temp1=temp1|0x01; else temp1=temp1&0xfe; } //=========================================================================================================== // 解码出错返回1,对则返回0 unsigned char SAA3010_decode(void) { //----------------------------------------------------------------------------------------------------------- unsigned char count=0; TR1=1; // 启动计时 while(1) { while(ir_receive==0); // 等待电平变高,不需要超时监测 TR1=0; // 高电平(对发射电路而言)测试结束 high_level_time=TH1*256+TL1; // 记录高电平的数据 //----------------------------------------------------------------------------------------------------------- TH1=0; TL1=0; TR1=1; // 启动对低电平的测试 //----------------------------------------------------------------------------------------------------------- // 处理低电平 if((high_level_time<750)||(high_level_time>1800)) return 1; // 不是合格的电平 if((high_level_time>750)&&(high_level_time<1000)){SAA3010_cycle_data(0);count+=1;} // 移入一个0 if((high_level_time>1500)&&(high_level_time<1800)) {SAA3010_cycle_data(0);SAA3010_cycle_data(0);count+=2;} // 移入两个0 while(ir_receive==1) // 等待电平变低 { if(TH1>0x08) break; // 高电平超时,正常情况下是测试结束,异常时则是出错 } TR1=0; // 低电平(对发射电路而言)测试结束 if(TH1>0x08) {break;} low_level_time=TH1*256+TL1; // 保存低电平的数据 TH1=0; TL1=0; TR1=1; // 为增加计时的准确性,数据的处理都是在计时过程里 //----------------------------------------------------------------------------------------------------------- // 处理高电平 if((low_level_time<750)||(low_level_time>1800)) return 1; // 不是合格的电平 if((low_level_time>750)&&(low_level_time<1000)) {SAA3010_cycle_data(1); count+=1;} // 移入一个0 if((low_level_time>1500)&&(low_level_time<1800)) {SAA3010_cycle_data(1); SAA3010_cycle_data(1);count+=2;} // 移入两个0 } if(count==26) {SAA3010_cycle_data(1); count++;} if(count!=27) return 1; led=0; // 提取按健信息 key_code=0; if((temp1>>1)&0x01) key_code=key_code|0x01; else key_code=key_code&0xfe; if((temp1>>3)&0x01) key_code=key_code|0x02; else key_code=key_code&0xfd; if((temp1>>5)&0x01) key_code=key_code|0x04; else key_code=key_code&0xfb; if((temp1>>7)&0x01) key_code=key_code|0x08; else key_code=key_code&0xf7; if((temp2>>1)&0x01) key_code=key_code|0x10; else key_code=key_code&0xef; if((temp2>>3)&0x01) key_code=key_code|0x20; else key_code=key_code&0xdf; // 提取系统信息 sys_code=0; if((temp2>>5)&0x01) sys_code=sys_code|0x01; else sys_code=sys_code&0xfe; if((temp2>>7)&0x01) sys_code=sys_code|0x02; else sys_code=sys_code&0xfd; if((temp3>>1)&0x01) sys_code=sys_code|0x04; else sys_code=sys_code&0xfb; if((temp3>>3)&0x01) sys_code=sys_code|0x08; else sys_code=sys_code&0xf7; if((temp3>>5)&0x01) sys_code=sys_code|0x10; else sys_code=sys_code&0xef; if((temp3>>7)&0x01) sys_code=sys_code|0x20; else sys_code=sys_code&0xdf; data_available=1; return 0; } //===========================================================================================================
评论
    相关推荐
    • 单片机课件
      能够帮助同学们快速的了解单片机并对于单片机的一些设计程序有一定的认知
    • 单片机课件
      单片机的课件及例题, 单片机的课件及例题, 单片机的课件及例题, 单片机的课 件及例题,
    • 爱上单片机
      一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章。本书通过生动的语言...
    • 单片机资料
      内含30个单片机应用开发的资料,包括配套单片机入门PPT。
    • 单片机课件
      单片机课的课件,对单片机的基础进行了全面的概述,也有非常精细的指导。
    • 单片机工具
      单片机工具 供单片机学习使用 免费资源 日后还会有更多资源 请联系我
    • 单片机课件
      单片机课件 ppt文件格式 介绍了单片机的结构、程序设计、定时器、中断等
    • 单片机教程
      这是一个单片机的教程,可以用于初次学习单片机的人学习。
    • 单片机入门
      很好的单片机学习资源,入门比较好适合对单片机的学习有兴趣的人,而且是名校的精彩讲解,
    • 爱上单片机
      《爱上单片机》本书是一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章...