历史上的今天
返回首页

历史上的今天

今天是:2025年03月24日(星期一)

正在发生

2021年03月24日 | 51单片机实现红外编码检测

2021-03-24 来源:eefocus

一直以来就像做个红外线检测,因为我是做空调扇的,我们组专门负责遥控器.前几天在百度文库找到一篇文章,之后就做了一个


#include    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include

sbit IR=P3^2;  //红外接口标志



/*------------------------------------------------

                全局变量声明

------------------------------------------------*/




unsigned char  irtime;//红外用全局变量


bit irpro_ok,irok;

unsigned char IRcord[4];

unsigned char irdata[33];


/*------------------------------------------------

                  函数声明

------------------------------------------------*/


void Ircordpro(void);


/*------------------------------------------------

                  定时器0中断处理

------------------------------------------------*/


void tim0_isr (void) interrupt 1 using 1

{

  irtime++;  //用于计数2个下降沿之间的时间

}


/*------------------------------------------------

                  外部中断0中断处理

------------------------------------------------*/

void EX0_ISR (void) interrupt 0 //外部中断0服务函数

{

  static unsigned char  i;             //接收红外信号处理

  static bit startflag;                //是否开始处理标志位


if(startflag)                         

   {

    if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms

                        i=0;

                    irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1

                    irtime=0;

                    i++;

                            if(i==33)

                              {

                                   irok=1;

                                 i=0;

                                  }

          }

           else

                {

                irtime=0;

                startflag=1;

                }


}


/*------------------------------------------------

                定时器0初始化

------------------------------------------------*/

void TIM0init(void)//定时器0初始化

{


  TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值

  TH0=0x00; //重载值

  TL0=0x00; //初始化值

  ET0=1;    //开中断

  TR0=1;    

}

/*------------------------------------------------

                  外部中断0初始化

------------------------------------------------*/

void EX0init(void)

{

IT0 = 1;   //指定外部中断0下降沿触发,INT0 (P3.2)

EX0 = 1;   //使能外部中断

EA = 1;    //开总中断

}


/*------------------------------------------------

                红外码值处理

------------------------------------------------*/

void Ircordpro(void)//红外码值处理函数

  unsigned char i, j, k;

  unsigned char cord,value;


  k=1;

  for(i=0;i<4;i++)      //处理4个字节

     {

      for(j=1;j<=8;j++) //处理1个字节8位

         {

          cord=irdata[k];

          if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差

             value|=0x80;

          if(j<8)

                    {

                         value>>=1;

                        }

           k++;

         }

     IRcord[i]=value;

     value=0;     

     } 

         irpro_ok=1;//处理完毕标志位置1

}


/*------------------------------------------------

                    主函数

------------------------------------------------*/

void main(void)

{

unsigned char temp[3];

unsigned int i;

EX0init(); //初始化外部中断

TIM0init();//初始化定时器


        lcd_init();                                // 初始化LCD                        

        delay(10);

        lcd_pos(0);                                // 设置显示位置为第一行的第0个字符


while(1)//主循环

   {

    if(irok)                        //如果接收好了进行红外处理

          {   

           Ircordpro();

           irok=0;

          }


    if(irpro_ok)                   //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等

          {

                   

                /*------------------------------------------------

                  将ascii的数字显示:

即将字符对应的十进制数的每一位付给temp并转换成字符

------------------------------------------------*/


                        temp[0]=IRcord[2]%10+48;//个位

                        temp[1]=IRcord[2]%100/10+48;//十位

                        temp[2]=IRcord[2]/100+48;//百位


                    lcd_wcmd(0x01);          //清除LCD的显示内容

                    delay(1);

                        lcd_pos(0);

                          lcd_wdat('*');

                    

                    lcd_wdat(temp[2]);

                        lcd_wdat(temp[1]);

                        lcd_wdat(temp[0]);


                    lcd_wdat('*');


                        for(i=0;i<10;i++)

                        delay(100);                                                

            }

   } 


}


/*-------------------------------------------------

#include文件(lcd用到的一些函数)

----------------------------------------------------*/



#include

#include


/*------------------------------------------------

                  定义数据类型

------------------------------------------------*/

typedef unsigned char BYTE;

typedef bit BOOL ; 


/*------------------------------------------------

                  定义控制位

------------------------------------------------*/

sbit rs        = P2^4;                //

sbit rw = P2^5;

sbit ep = P2^6;


/*------------------------------------------------

                 声明函数

------------------------------------------------*/


delay(BYTE ms)

{                                                        // 延时子程序

        BYTE i;

        while(ms--)

        {

                for(i = 0; i< 250; i++)

                {

                        _nop_();

                        _nop_();

                        _nop_();

                        _nop_();

                }

        }

}



BOOL lcd_bz()

{                                                        // 测试LCD忙碌状态

        BOOL result;

        rs = 0;

        rw = 1;

        ep = 1;

        _nop_();

        _nop_();

推荐阅读

史海拾趣

HBH-Microwave公司的发展小趣事

随着技术的不断成熟,HBH-Microwave开始将目光投向更为广阔的航空航天市场。公司凭借其高质量的微波组件和子系统,成功参与了多个国际知名的航天项目,如卫星通信系统和运载火箭的微波子系统。这些项目的成功实施,不仅展示了HBH在极端环境下的产品可靠性,也进一步拓宽了公司的业务范围和市场影响力。

CAMDENBOSS公司的发展小趣事

在快速发展的同时,CAMDENBOSS公司始终注重品质管理。公司建立了严格的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格把控。此外,公司还积极引进先进的生产设备和技术,不断提升生产效率和产品质量。通过持续改进和优化,公司确保了产品品质的稳定性和可靠性。

CLARE公司的发展小趣事

CLARE公司始终坚持品质至上的原则,从原材料采购到生产制造、质量检测等各个环节都严格把控,确保产品的品质和性能达到客户的期望。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和服务。这些举措赢得了客户的信赖和好评,为CLARE公司的长期发展奠定了坚实的基础。

ECS公司的发展小趣事

为了进一步扩大市场份额,ECS公司开始积极拓展全球市场。他们与全球各地的云服务提供商建立了紧密的合作关系,共同为客户提供更加全面、便捷的服务。同时,ECS公司还积极参加国际云计算展会和论坛,与国际同行交流经验和技术,不断提升自身的竞争力。通过这些努力,ECS公司的品牌知名度和市场份额得到了显著提升。

DSMI Electronics SA公司的发展小趣事

面对激烈的市场竞争,DSMI Electronics SA公司始终坚持创新驱动的发展战略。公司投入大量资源进行技术研发和产品创新,不断推出具有更高性能、更低功耗、更小体积的新产品。这些创新产品不仅满足了市场的多样化需求,还引领了行业的技术发展方向。同时,DSMI还积极申请专利保护,保护自己的创新成果。

Aleph America Corporation公司的发展小趣事

DSMI Electronics SA公司非常重视企业文化的建设和团队建设。公司倡导开放、协作、创新、务实的企业文化,鼓励员工积极参与技术创新和市场竞争。同时,DSMI还注重人才培养和引进,通过内部培训、外部招聘等方式,不断提升员工的素质和能力。这些努力为公司的持续发展提供了有力的人才保障。

问答坊 | AI 解惑

波分复用器的区别

粗波分复用(Coarse wavelength division multiplexing,CWDM)是是一种利用光复用器将在不同光纤中传输的波长复用到一根光纤中传输的技术,它的通道比密集波分复用(dense wavelength division multiplexing,DWDM)少,但比标准波分复用(wavelength d ...…

查看全部问答>

2812的CPU-Timer

想请教一下,2407是不是没有CPU Timer? 2812已经有了通用计数器GP,为什么还需要CPU Timer? 2812的Timer主要是做什么用的呢? 是不是PSC减至0后,TIM才会减1 ? 如果没有用DSP-BIOS,2812的CPU-Timer2是否就能自行使用? 新手接触,问题太 ...…

查看全部问答>

很郁闷的问题,WinCE、Platform Builder达人请进来,多提提建议,谢谢!

    本人买了一块FriendlyARM(友善之臂)的板子,用VS2005开发了一个程序要运行在板子上面,系统刷成WinCE 5.0了,程序开发也完成了,正当以为一切可以结束的时候,发现板子重启之后保存在WinCE里面的数据完全消失了,程序可以放在别的 ...…

查看全部问答>

Tornado2.2 for pcPentium问题,快被弄疯了

tornado2.2 for pentium,目标机是集成显卡,3com网卡的p4。 bsp选择p4,#define  INCLUDE_EL_3C90X_END,#define INCLUDE_PC_CONSOLE都定义了,但是目标机一启动,v1.6+++++++走完就自动重启。 在网上查了下,好像是说集成显卡的内存可 ...…

查看全部问答>

请教:我原来使用的WinCE5.0可以安装一个程序,但是后来设备更新后,WinCE升级了,我再重新安装时,一直无法安装。

我原来使用的WinCE5.0可以安装一个程序,但是后来设备更新后,WinCE升级了,我再重新安装时,一直无法安装。对此我一直很疑惑,系统主要对bug进行了修复,但是原来安装的程序只是复制到系统的文件夹中。其中有一点,系统盘符的名称变更了,原来是英 ...…

查看全部问答>

timch1ch2被用来输入pwm捕获占空比,那么ch2

比如 PA6--CH1/IN6  PA7 --CH2/IN7   现在我要捕获pwm的占空比  也就是要用到pwm模式  用到了两个输入口i   不过按照st的资料 ch2是内部连接的 那么   我还能PA7做模拟输入 ...…

查看全部问答>

查找帖子

版主,我想找本论坛里lutlut1编写的例程,前辈们说在精华区里可以找到,但我看STM32/8的精华区里只有今年的帖子,以前的怎么没有了?     我想找lutlut1编写的I2C例程,请教版主改怎么找?…

查看全部问答>

AD5620的VHDL控制程序

--基于AD56XX的VHDL控制程序--设计者 eeleaderlibrary ieee;use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity Wr_Ad56XX is  port   (   clk: in std_logic;------20M ...…

查看全部问答>

谁有电动机软起动控制板的相关资料

谁有电动机软起动控制板的相关资料,准备想电力电子这方面转型,先从可控硅下手,第一个就从电动机软起动控制器开始,请老师们赐教,谢谢!…

查看全部问答>

什么原因?关于锂电池寿命问题!

     现在很多设备仪器都在用可充电锂电池组(锂电池组加装有电池保护板),为了防水的原因,电池组的封装固定后,电池组做防水处理一般用胶水固定,问题是:有的设备和仪器使用几个月后出现不能充电了,什么原因?当然电池供 ...…

查看全部问答>