登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 红外接收,显示遥控器的键码

[复制链接]
发表于 2019-2-5 18:28:17 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 利用单片机开发板,接收红外遥控器的信号,并显示他的键码
开始时间: 2019-02-03
结束时间: 2019-02-05
2019-02-05.png 2019-02-05 (1).png 2019-02-05 (2).png IMG_20190205_162309.jpg 尝试了许多别人的代码,发现都实现不了接收红外信号的功能,于是尝试自己编写这套程序,适用于电开的51单片机学习板V2.8
该程序对时间的精度有一定要求,这也是之前其他人的程序不适用的原因,(单片机开发板的结构不同)。
时间精度问题,将这些判断时间的一个一个调试后,即可。


#include <STC12C5A60S2.H>
sbit IRD=P3^2;
sbit yu1=P2^0;
sbit yu2=P2^1;
sbit yu3=P2^2;
sbit ENLED=P1^1;
unsigned char ircode[4];
unsigned int time=0;//&Oacute;&Atilde;&Oacute;&Uacute;&Aring;&ETH;&para;&Iuml;&micro;&ccedil;&AElig;&frac12;&sup3;&Ouml;&ETH;&oslash;&Ecirc;±&frac14;&auml;
        void delay();  //10&Icirc;&cent;&Atilde;&euml;
unsigned int high();/*&cedil;&szlig;&micro;&ccedil;&AElig;&frac12;&sup3;&Ouml;&ETH;&oslash;&Ecirc;±&frac14;&auml;*/
unsigned int low(); /*&micro;&Iacute;&micro;&ccedil;&AElig;&frac12;&sup3;&Ouml;&ETH;&oslash;&Ecirc;±&frac14;&auml;*/
/*&Ouml;÷&ordm;&macr;&Ecirc;&yacute;*/
void main()
{

   unsigned char byt;
   unsigned int i,j;  //&frac12;&Oacute;&Ecirc;&Otilde;×&Ouml;&frac12;&Uacute;
   ENLED=0;   //74HC245&micro;&Auml;&Ecirc;&sup1;&Auml;&Uuml;&pound;&not;&Ecirc;&sup1;&Auml;&Uuml;&Icirc;&ordf;0&pound;&not;&sup1;&brvbar;&Auml;&Uuml;&Otilde;&yacute;&sup3;&pound;
    IRD=1;     //&ordm;ì&Iacute;&acirc;&frac12;&Oacute;&Ecirc;&Otilde;
   yu1=0;yu2=0;yu3=10=0;
while(1)
{
  if(IRD==0)
  {
    time=low();
    if((time>=300)&&(time<=950))  
   {
     time=high();
    if((time>=200)&&(time<=500))  //&AElig;&eth;&Ecirc;&frac14;&Acirc;&euml;&micro;&Auml;&frac14;ì&Ntilde;é
     {
     for(i=0;i<4;i++)  //&frac12;&Oacute;&Ecirc;&Otilde;4&cedil;&ouml;×&Ouml;&frac12;&Uacute;
     {
      for(j=0;j<8;j++)  //&Atilde;&iquest;&cedil;&ouml;×&Ouml;&frac12;&Uacute;&Oacute;&ETH;8&cedil;&ouml;bit&pound;&not;&frac12;&Oacute;&Ecirc;&Otilde;8&cedil;&ouml;bit
      {
      time=low();
      if((time>340)&&(time<780))  //&Otilde;&acirc;&cedil;&ouml;&Ecirc;±&frac14;&auml;&Aring;&ETH;&para;¨&micro;&Auml;·&para;&Icirc;§&pound;&not;&cedil;&ETH;&frac34;&otilde;&cedil;ú&Ecirc;é&Eacute;&Iuml;&sup2;&raquo;&Igrave;&laquo;&Ograve;&raquo;&Ntilde;ù
         {                        //&sup2;&raquo;&Ccedil;&aring;&sup3;&thorn;&Ecirc;&Ccedil;&para;¨&Ecirc;±&AElig;÷&Aring;&auml;&Ouml;&Atilde;&Ecirc;±&sup3;&ouml;&Icirc;&Ecirc;&Igrave;&acirc;&pound;&not;&raquo;&sup1;&Ecirc;&Ccedil;&Oacute;&sup2;&frac14;&thorn;&Icirc;&Ecirc;&Igrave;&acirc;
          time=high();
         if((time>340)&&(time<780))  //&Aring;&ETH;&para;¨&Ecirc;±&frac14;&auml;&Auml;&Uacute;&Icirc;&ordf;&cedil;&szlig;&micro;&ccedil;&AElig;&frac12;
        {                             //&Ocirc;&Uacute;&acute;&Euml;·&para;&Icirc;§&Euml;&micro;&Atilde;÷bit&Icirc;&ordf;0
          byt>>=1;                    //&Ograve;ò&micro;&Iacute;&Icirc;&raquo;&Ocirc;&Uacute;&Iuml;&Egrave;&pound;&not;&Euml;ù&Ograve;&Ocirc;&Ecirc;&yacute;&frac34;&Yacute;&Oacute;&Ograve;&Ograve;&AElig;&pound;&not;&cedil;&szlig;&Icirc;&raquo;&Icirc;&ordf;0
        }
           else if((time>1000)&&(time<1900))
        {
          /* yu1=0;yu2=1;yu3=10=0;
              for(time=0;time<=10000;time++)
               delay();*/  //&Ocirc;&Uacute;&acute;&Euml;·&para;&Icirc;§&Euml;&micro;&Atilde;÷bit&Icirc;&ordf;1
         byt>>=1;       //&Ograve;ò&micro;&Iacute;&Icirc;&raquo;&Ocirc;&Uacute;&Iuml;&Egrave;&pound;&not;&Euml;ù&Ograve;&Ocirc;&Ecirc;&yacute;&frac34;&Yacute;&Oacute;&Ograve;&Ograve;&AElig;
         byt|=0x80;      //&cedil;&szlig;&Icirc;&raquo;&Ouml;&Atilde;&Icirc;&ordf;&Ograve;&raquo;
        }
        }
       }
      ircode=byt;
     }
     yu1=0;yu2=0;yu3=10=ircode[2];//&frac12;&laquo;&frac14;ü&Acirc;&euml;&Iuml;&Ocirc;&Ecirc;&frac34;&micro;&frac12;&Ecirc;&yacute;&Acirc;&euml;&sup1;&Uuml;&Eacute;&Iuml;,&iquest;&Eacute;&Auml;&Uuml;&sup3;&ouml;&acute;í&pound;&not;
    }
   }
   }
}
}
/*&Ntilde;&Oacute;&Ecirc;±10&Icirc;&cent;&Atilde;&euml;*/
void delay(void)  //10&Icirc;&cent;&Atilde;&icirc;@33.1776MHz
{
AUXR |= 0x40;  
TMOD &= 0x0F;
  TMOD |= 0x10;
TL1 = 0xB4;  
TH1 = 0xFE;  
TF1 = 0;  
TR1 = 1;  
}
/*&cedil;&szlig;&micro;&ccedil;&AElig;&frac12;&sup3;&Ouml;&ETH;&oslash;&Ecirc;±&frac14;&auml;*/
unsigned int high()
{
  time=0;
while(1)
{
   if(IRD==1)
   {
    delay();
     time++;
   }
  if(IRD!=1)
   {
    break;
  }
  }
  return(time);
}
/*&micro;&Iacute;&micro;&ccedil;&AElig;&frac12;&sup3;&Ouml;&ETH;&oslash;&Ecirc;±&frac14;&auml;*/
unsigned int low()
{
  time=0;
while(1)
{
   if(IRD==0)
   {
    delay();
     time++;
   }
  if(IRD!=0)
   {
    break;
  }
  }
  return(time);
}

好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表