proteus仿真红外发射接收

  • D8_506506
    了解作者
  • C/C++
    开发工具
  • 101.3KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-02-24 14:32
    上传日期
红外线编码是数据传输和家用电器遥控常用的一种通讯方法,其实质是一种脉宽调制的串行通讯。家电遥控 中常用的红外线编码电路有μPD6121G型HT622型和7461型等。 这里就以这些电路的编码格式来仿真怎样使用单片机的捕获中断功能来实现其解码。 红外线通讯的发送部 分主要是把待发送的数据转换成一定格式的脉冲,然后驱动红外发光管向外发送数据。接收部分则是完成红外 线的接收、放大、解调,还原成同步发射格式相同(但高、低电位刚好相反的脉冲信号)。这些工作通常由一体 化的接收头来完成,主要输出TTL兼容电平。最后通过解码把脉冲信号转换成数据,从而实现数据的传输。 本单元就是来完成一体化接收头接受到的红外遥控器编码后的输出数据,所以只要单片机完成本单元的解码任 务,并成功实现之后,只要将IR引脚接上红外接收头之后就可以实现红外遥控的功能了。 这是我积累前人经验和自己实践的成果,并且已经有硬件的成功案例,并非只是理论.
proteus仿真红外发射接收
  • proteus做得红外仿真
  • 红外遥控模拟
  • 红外遥控
    10.2KB
  • 遥控.hex
    3KB
  • 红外遥控的仿真.DSN
    146.4KB
  • 解码.LST
    7.4KB
  • 红外遥控.plg
    166B
  • 解码.Opt
    1.6KB
  • 解码LCD.c
    3.5KB
  • 解码.plg
    202B
  • 遥控.plg
    1.5KB
  • 解码.M51
    24.4KB
  • Last Loaded 红外遥控的仿真.DBK
    146.4KB
  • 红外遥控.Opt
    1.5KB
  • 红外遥控.lnp
    44B
  • 解码_Uv2.Bak
    1.6KB
  • 红外遥控的仿真.PWI
    3.4KB
  • 遥控
    10.9KB
  • 红外遥控.M51
    12.2KB
  • 解码.lnp
    41B
  • 解码_Opt.Bak
    1.5KB
  • 解码.c
    3.7KB
  • main.LST
    9.9KB
  • 解码.Uv2
    1.9KB
  • 遥控.lnp
    40B
  • 解码
    22.1KB
  • 红外遥控.Uv2
    1.6KB
  • 解码LCD.LST
    6.5KB
  • 解码.hex
    7.1KB
  • main.OBJ
    12.9KB
  • 解码.OBJ
    14.6KB
  • 遥控.M51
    14.9KB
  • 解码LCD.OBJ
    9.9KB
  • main.c
    5.1KB
内容介绍
#include <aT89X51.h rel='nofollow' onclick='return false;'> static bit OP; //红外发射管的亮灭 static unsigned int count; //延时计数器 static unsigned int endcount; //终止延时计数 static unsigned char Flag; //红外发送标志 char iraddr1; //十六位地址的第一个字节 char iraddr2; //十六位地址的第二个字节 void SendIRdata(char p_irdata); void delay(); char getkey() { P1=0xfe;P3_6=P3_7=1;P3_3=1; if(!P1_4)return 1; //ON if(!P1_5)return 2; //7 if(!P1_6)return 3; //8 if(!P1_7)return 4; //9 if(!P3_6)return 5; //X if(!P3_7)return 6; //÷ P1=0xfd; if(!P1_4)return 11; //+- if(!P1_5)return 12; //4 if(!P1_6)return 13; //5 if(!P1_7)return 14; //6 if(!P3_6)return 15; //- if(!P3_7)return 16; //MRC P1=0xfb; if(!P1_4)return 21; //% if(!P1_5)return 22; //1 if(!P1_6)return 23; //2 if(!P1_7)return 24; //3 if(!P3_6)return 25; //+ if(!P3_7)return 26; //M- P1=0xf7; if(!P1_4)return 31; //□ if(!P1_5)return 32; //0 if(!P1_6)return 33; //. if(!P1_7)return 34; //= if(!P3_6)return 35; //+ if(!P3_7)return 36; //M+ P1=0xfF;P3_3=0; if(!P1_4)return 41; // if(!P1_5)return 42; // if(!P1_6)return 43; // if(!P1_7)return 44; // if(!P3_6)return 45; // if(!P3_7)return 46; // return 0; } void main(void) { char key; count = 0; Flag = 0; OP = 0; P3_4 = 1; EA = 1; //允许CPU中断 TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许 P1=0xff; TH0 = 0xFF; TL0 = 0xE6; //设定时值0为38K 也就是每隔26us中断一次 TR0 = 1;//开始计数 iraddr1=0xff; iraddr2=0xff; do{ key=getkey(); if(key==1)SendIRdata(0x12);//set if(key==11)SendIRdata(0x0b);//exit if(key==25||key==35)SendIRdata(0x1a);//+ if(key==15)SendIRdata(0x1e);//- if(key==6)SendIRdata(0x0e);//↑ ÷ if(key==16)SendIRdata(0x1d);//↓ MRC if(key==26)SendIRdata(0x1f);//← M- if(key==36)SendIRdata(0x1b);//→ M+ if(key==32)SendIRdata(0x00);//0 if(key==22)SendIRdata(0x01);//1 if(key==23)SendIRdata(0x02);//2 if(key==24)SendIRdata(0x03);//3 if(key==12)SendIRdata(0x04);//4 if(key==13)SendIRdata(0x05);//5 if(key==14)SendIRdata(0x06);//6 if(key==2)SendIRdata(0x07);//7 if(key==3)SendIRdata(0x08);//8 if(key==4)SendIRdata(0x09);//9 if(key==21)SendIRdata(0x2A);//% if(key==5)SendIRdata(0x2B);//X if(key==33)SendIRdata(0x2C);//. if(key==34)SendIRdata(0x2D);//= if(key==31)SendIRdata(0x2E);//□ if(key==41)SendIRdata(0x2F);// if(key==42)SendIRdata(0x30);// if(key==43)SendIRdata(0x31);// if(key==44)SendIRdata(0x32);// if(key==45)SendIRdata(0x33);// if(key==46)SendIRdata(0x34);// }while(1); } //定时器0中断处理 void timeint(void) interrupt 1 { TH0=0xFF; TL0=0xE6; //设定时值为38K 也就是每隔26us中断一次 count++; } void SendIRdata(char p_irdata) { int i; char irdata=p_irdata; //发送9ms的起始码 endcount=223; Flag=1; count=0; P3_4=0; do{}while(count<endcount); //发送4.5ms的结果码 endcount=117; Flag=0; count=0; P3_4=1; do{}while(count<endcount); //发送十六位地址的前八位 irdata=iraddr1; for(i=0;i<8;i++) { //先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平) endcount=10; Flag=1; count=0; P3_4=0; do{}while(count<endcount); //停止发送红外信号(即编码中的高电平) if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0 { endcount=15; //1为宽的高电平 } else { endcount=41; //0为窄的高电平 } Flag=0; count=0; P3_4=1; do{}while(count<endcount); irdata=irdata>>1; } //发送十六位地址的后八位 irdata=iraddr2; for(i=0;i<8;i++) { endcount=10; Flag=1; count=0; P3_4=0; do{}while(count<endcount); if(irdata-(irdata/2)*2) { endcount=15; } else { endcount=41; } Flag=0; count=0; P3_4=1; do{}while(count<endcount); irdata=irdata>>1; } //发送八位数据 irdata=~p_irdata; for(i=0;i<8;i++) { endcount=10; Flag=1; count=0; P3_4=0; do{}while(count<endcount); if(irdata-(irdata/2)*2) { endcount=15; } else { endcount=41; } Flag=0; count=0; P3_4=1; do{}while(count<endcount); irdata=irdata>>1; } //发送八位数据的反码 irdata=p_irdata; for(i=0;i<8;i++) { endcount=10; Flag=1; count=0; P3_4=0; do{}while(count<endcount); if(irdata-(irdata/2)*2) { endcount=15; } else { endcount=41; } Flag=0; count=0; P3_4=1; do{}while(count<endcount); irdata=irdata>>1; } endcount=10; Flag=1; count=0; P3_4=0; do{}while(count<endcount); P3_4=1; Flag=0; } void delay() { int i,j; for(i=0;i<400;i++) { for(j=0;j<100;j++) { } } }
评论
    相关推荐
    • 单片机课件
      单片机的课件及例题, 单片机的课件及例题, 单片机的课件及例题, 单片机的课 件及例题,
    • 爱上单片机
      一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章。本书通过生动的语言...
    • 单片机资料
      内含30个单片机应用开发的资料,包括配套单片机入门PPT。
    • 单片机课件
      单片机课的课件,对单片机的基础进行了全面的概述,也有非常精细的指导。
    • 单片机工具
      单片机工具 供单片机学习使用 免费资源 日后还会有更多资源 请联系我
    • 单片机
      单片机c 和汇编程序
    • 单片机课件
      单片机课件 ppt文件格式 介绍了单片机的结构、程序设计、定时器、中断等
    • 单片机教程
      这是一个单片机的教程,可以用于初次学习单片机的人学习。
    • 单片机入门
      很好的单片机学习资源,入门比较好适合对单片机的学习有兴趣的人,而且是名校的精彩讲解,
    • 单片机
      利用protues仿真实现基于51单片机的大棚温湿度检测系统设计