中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 传感控制 >>电子行业新闻正文

红外遥控解码(二)

时间:2006/12/6 11:36:00  作者:  来源:ic72  浏览人数:1834
 
 

      接: 51红外遥控解码(一)

      ;============================================

      DELAY_MS:
      MOV R6,#250
      DELAY_MS_NEXT:
      NOP
      NOP
      DJNZ R6,DELAY_MS_NEXT
      DJNZ R7,DELAY_MS
      RET
      ;============================================ 
      ;INPUT: R7
      DELAY:
      DJNZ R7,$
      RET
      ;============================================
      ;向LCD写一个命令字节
      ;INPUT: ACC
      SEND_COMMAND_BYTE:
      CLR RS
      CLR RW

      MOV P0,A

      SETB E
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      CLR E

      MOV R7,#100
      ACALL DELAY
      RET
      ;===============================================
      ;向LCD写一个数据字节
      ;INPUT: ACC
      SEND_DATA_BYTE:
      SETB RS
      CLR RW

      MOV P0,A

      SETB E
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP
      CLR E

      MOV R7,#100
      ACALL DELAY
      RET
      ;======================================================
      ;初始化LCD
      INIT_LCD:
      MOV A,#30H
      ACALL SEND_COMMAND_BYTE
      ACALL SEND_COMMAND_BYTE
      ACALL SEND_COMMAND_BYTE
      MOV A,#38H ;设置工作方式
      ACALL SEND_COMMAND_BYTE
      MOV A,#0CH ;显示状态设置
      ACALL SEND_COMMAND_BYTE
      MOV A,#01H ;清屏
      ACALL SEND_COMMAND_BYTE
      MOV A,#06H ;输入方式设置
      ACALL SEND_COMMAND_BYTE
      RET
      ;=======================================================
      ;在第一行显示
      ;INPUT: DPTR指向要显示的内容
      DISPLAY_LINE1:
      MOV A,#080H
      DISPLAY_LINE1_A:
      ACALL SEND_COMMAND_BYTE ;设置DDRAM地址
      MOV R6,#20
      DISPLAY_LINE1_NEXT:
      CLR A
      MOVC A,@A+DPTR
      ACALL SEND_DATA_BYTE
      INC DPTR
      DJNZ R6,DISPLAY_LINE1_NEXT
      MOV R7,#100
      ACALL DELAY
      RET
      ;=======================================================
      ;在第二行显示
      ;INPUT: DPTR指向要显示的内容
      DISPLAY_LINE2:
      MOV A,#0C0H
      AJMP DISPLAY_LINE1_A
      ;=======================================================

      END

      下面是一个用C写的遥控器程序.能在数码管上显示键码.

      #include <reg52.h>

      #define c(x) (x*110592/120000)

      sbit Ir_Pin=P3^3;

      unsigned char code Led_Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
      0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};                        //共阳极数码显示码0-F.
      unsigned char code Led_Sel[]={0xe,0xd,0xb,0x7};

      unsigned char Led_Buf[4]; //显示缓冲区
      char Led_Index;                   //位选        

      unsigned char Ir_Buf[4]; //用于保存解码结果

      //==============================================================
      //数码管扫描
      timer0() interrupt 1 using 1
      {
      TL0=65536-1000;
      TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
      P0=0xff;
      P2=Led_Sel[Led_Index];                            //位选
      P0=Led_Tab[Led_Buf[Led_Index]];                    //段选

      if(++Led_Index>3) Led_Index=0;                    //四个扫描完了,到第一个数码管
      }
      //==============================================================
      unsigned int Ir_Get_Low()
      {
      TL1=0;
      TH1=0;
      TR1=1;
      while(!Ir_Pin && (TH1&0x80)==0);                
      TR1=0;           
      return TH1*256+TL1;
      }
      //=============================================================
      unsigned int Ir_Get_High()
      {
      TL1=0;
      TH1=0;
      TR1=1;
      while(Ir_Pin && (TH1&0x80)==0);
      TR1=0;
      return TH1*256+TL1;
      }
      //==============================================================
      main()
      {
      unsigned int temp;
      char i,j;
      Led_Index=1;

      TMOD=0x11;
      TL0=65536-1000;
      TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
      EA=1;
      ET0=1;
      TR0=1;

      Led_Buf[0]=0;
      Led_Buf[1]=0;
      Led_Buf[2]=0;
      Led_Buf[3]=0; //显示区设成0

      do{
      restart:
      while(Ir_Pin);
      temp=Ir_Get_Low();
      if(temp<c(8500) || temp>c(9500)) continue;//引导脉冲低电平9000
      temp=Ir_Get_High();
      if(temp<c(4000) || temp>c(5000)) continue;//引导脉冲高电平4500
      for(i=0;i<4;i++) //4个字节
      for(j=0;j<8;j++) //每个字节8位
      {
      temp=Ir_Get_Low();
      if(temp<c(200) || temp>c(800)) goto restart;
      temp=Ir_Get_High();
      if(temp<c(200) || temp>c(2000)) goto restart;
      Ir_Buf[i]>>=1;
      if(temp>c(1120)) Ir_Buf[i]|=0x80;
      }
      Led_Buf[0]=Ir_Buf[2]&0xf;
      Led_Buf[1]=(Ir_Buf[2]/16)&0xf;
      Led_Buf[2]=Ir_Buf[3]&0xf;
      Led_Buf[3]=(Ir_Buf[3]/16)&0xf; //显示结果
      }while(1);
      }

 
【相关文章】
·MAX6625型温度传感器的原理及应用
·基于LIN总线的车用无刷直流电机控制器设计
·红外遥控解码(二)
·红外遥控解码(一)
·FIND-1现场总线通信控制器及其应用
·为便携应用选择合适的低成本USB开关
·充分利用面向高级电力管理和工业控制的多通道单转换器架构
·基于XC164的六通道ABS开发板设计
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9