资源简介

设计一个基于单片机的嵌入式系统,要求具备以下功能: 红外数据的接收及解码,红外发射电路 数码管的显示驱动控制 将接收到的红外数据进行实时显示(限于动态扫描方法) 请根据以上功能要求,进行硬件系统设计,编写软件程序并画出流程图。 实现:本设计利用AT89C52制作红外遥控系统,使用Keil软件编写程序,在Proteus软件中采用IRLINK模块用于接收并解调红外信号,进行程序的仿真。设计中,矩阵键盘充当遥控器,当我们按下某一个键时,经单片机识别,CPU向接有红外发射管的端口发射一定频率的脉冲,该脉冲与38KHz左右的载波脉冲进行调制,然后将已调制的脉冲进行缓冲放大,激励红外发光二极管将电能转化为光能,使得红外发光二极管发射出一定频率的红外线,当接收控制系统接收到该红外光后,由单片机内定时/计数器得到该红外光的频率,然后将该频率送往CPU,由CPU对该信号进行反编码,识别出控制信号,控制LED灯亮,蜂鸣器发声,并从数码管显示出按键值,同时示波器显示红外发射及接受端的脉冲波形,实现红外数据的接收解码与动态显示。 信号波形解码显示都没问题,LED灯和蜂鸣器设计是有点问题的,可以删掉不用不影响。 自己使用的是压缩包里第二个文件的程序,其他包里有额外的参考资料,可借鉴。

资源截图

代码片段和文件信息

#include  

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;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     149931  2008-08-04 20:07  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\Last Loaded 红外遥控的仿真.DBK

     文件      26471  2020-06-28 15:44  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\Last Loaded 红外遥控的仿真.pdsbak

     文件       5196  2008-08-04 22:06  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\main.c

     文件      10149  2008-08-04 22:06  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\main.LST

     文件      13217  2008-08-04 22:06  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\main.OBJ

     文件      10482  2007-11-01 21:52  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控

     文件         44  2007-11-01 21:52  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控.lnp

     文件      12468  2007-11-01 21:52  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控.M51

     文件       1379  2020-06-30 08:59  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控.Opt

     文件        166  2008-01-15 12:19  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控.plg

     文件       2091  2020-06-28 10:36  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控.Uv2

    .......      1381  2020-06-28 21:08  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控_Opt.Bak

    .......      1652  2008-08-04 22:53  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控_Uv2.Bak

     文件     149931  2008-11-21 19:17  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控的仿真.DSN

     文件        328  2020-06-28 21:07  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控的仿真.pdsprj.DESKTOP-EN0H7CH.DELL.workspace

     文件       3463  2009-12-07 19:57  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\红外遥控的仿真.PWI

     文件      22584  2008-08-04 22:08  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码

     文件       3779  2008-08-04 22:06  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.c

     文件       7303  2008-08-04 22:08  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.hex

     文件         41  2008-08-04 22:08  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.lnp

     文件       7575  2008-08-04 22:08  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.LST

     文件      24972  2008-08-04 22:08  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.M51

     文件      14968  2008-08-04 22:08  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.OBJ

     文件       1606  2020-06-28 10:36  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.Opt

     文件        189  2020-06-28 10:33  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.plg

     文件       2107  2020-06-28 10:36  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码.Uv2

     文件       3609  2008-01-15 13:55  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码LCD.c

     文件       6629  2008-08-04 22:08  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码LCD.LST

     文件      10091  2008-08-04 22:08  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码LCD.OBJ

    .......      1604  2008-11-21 19:25  红外遥控带原理图\proteus做得红外仿真\红外遥控模拟\解码_Opt.Bak

............此处省略136个文件信息

评论

共有 条评论