历史上的今天
返回首页

历史上的今天

今天是:2025年02月09日(星期日)

正在发生

2020年02月09日 | HX1838红外无线遥控模块51单片机程序

2020-02-09 来源:51hei

红外无线模块:
1.硬件:红外接收器+遥控器
2.连接方式:接收器的+、-分别连接在单片机的VCC、GND上面,S为信号输出端连接在单片机的IO口上面(例程里面连接在了P3^2引脚)
3.遥控器上面每一个按键对应的键码值已经在程序中给出,程序的内容是用遥控器控制单片机上面的流水灯

 

单片机源程序如下:

#include    //包含单片机寄存器的头文件

#include //包含_nop_()函数定义的头文件

#define uchar unsigned char

#define uint  unsigned int



sbit IRIN=P3^2;         //红外接收器数据线



sbit led1=P1^0;

sbit led2=P1^1;

sbit led3=P1^2;

sbit led4=P1^3;

sbit led5=P1^4;

sbit led6=P1^5;

sbit led7=P1^6;

sbit led8=P1^7;


uchar IRCOM[7];


void delay(unsigned char x) ;


/*******************************************************************/

void main()

{

         unsigned int  a;

   

        IRIN=1;                    //I/O口初始化        

        IE=0x81;                 //允许总中断中断,使能 INT0 外部中断

        TCON=TCON|0x01;               //触发方式为脉冲负边沿触发

        

         while(1)

         {                

            for(a=100;a>0;a--)

   {

     void IR_IN();

   }        

          }

/**********************************************************/

void IR_IN() interrupt 0 using 0

{

        unsigned char j,k,N=0;

        unsigned char q=0;

        EX0 = 0;   

        delay(15);

        if (IRIN==1) 

        { 

                EX0 =1;

                return;

        } 

                   //确认IR信号出现

        while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。

                delay(1);

        

        for (j=0;j<4;j++)         //收集四组数据

        { 

                for (k=0;k<8;k++)        //每组数据有8位

                {

                        while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。

                        {delay(1);}

                        while (!IRIN)          //等 IR 变为高电平

                                delay(1);

                        while (IRIN)           //计算IR高电平时长

                        {

                                delay(1);

                                N++;           

                                if (N>=30)

                                { 

                                        EX0=1;

                                        return;

                                }                  //0.14ms计数过长自动离开。

                        }                        //高电平计数完毕                

                        IRCOM[j]=IRCOM[j] >> 1;     //数据最高位补“0”

                        if(N>=8)

                        {

                                IRCOM[j] = IRCOM[j] | 0x80;                  //数据最高位补“1”

                        }  

                        N=0;

                }

        }

        

        if(IRCOM[2]!=~IRCOM[3])

        { 

                EX0=1;

                return; 

        }

        

        IRCOM[5]=IRCOM[2] & 0x0F;     //取键码的低四位

        IRCOM[6]=IRCOM[2] >> 4;       //右移4次,高四位变为低四位

        

        if(IRCOM[5]>9)

        { 

                IRCOM[5]=IRCOM[5]+0x37;

        }

        else

        IRCOM[5]=IRCOM[5]+0x30;

        

        if(IRCOM[6]>9)

        { 

                IRCOM[6]=IRCOM[6]+0x37;

        }

        else

        IRCOM[6]=IRCOM[6]+0x30;


        q= (((IRCOM[6]&0x0f)<<4) + (IRCOM[5]&0x0f));

    


        switch(q)    //判断按键键码值

        {

                case 0x04:led1=1;led2=0;led3=1;led4=0;led5=1;led6=0;led7=1;led8=0;break;  //(#)

                case 0x19:led1=0;break;  //(0)

                case 0x40:led5=0;break;  //(5)

                case 0x43:led6=0;break;  //(6)

                case 0x44:led4=0;break;  //(4)

                case 0x45:led1=0;break;  //(1)

                case 0x46:led2=0;break;  //(2)

                case 0x47:led3=0;break;  //(3)

                case 0x07:led7=0;break;  //(7)

                case 0x18:led1=0;led2=0;led3=1;led4=1;led5=1;led6=1;led7=1;led8=1;break;  //(上)

                case 0x09:led1=0;led2=0;led3=0;led4=0;led5=0;led6=0;led7=0;led8=0;break;  //(9)

                case 0x08:led1=1;led2=1;led3=1;led4=1;led5=0;led6=0;led7=1;led8=1;break;  //(左)

                case 0x13:led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;led7=1;led8=1;break;  //(ok)

                case 0x51:led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;led7=0;led8=0;break;  //(右)

                case 0x15:led8=0;break;  //(8)

                case 0x52:led1=1;led2=1;led3=0;led4=0;led5=1;led6=1;led7=1;led8=1;break;  //(下)

                case 0x16:led1=0;led2=1;led3=0;led4=1;led5=0;led6=1;led7=0;led8=1;break;  // (*)

        

                default :break; 

        }


         EX0 = 1; 

}



/***************延时函数*****************************/

void delay(unsigned char x)    //x*0.14MS

{

        unsigned char i;

        while(x--)

        {

                for (i = 0; i<13; i++) {}

        }

}


推荐阅读

史海拾趣

Centellax Inc公司的发展小趣事

Centellax注重企业文化建设和品牌建设。公司倡导“创新、协作、诚信、共赢”的价值观,鼓励员工积极进取、追求卓越。同时,公司还通过各种渠道宣传和推广品牌形象,提升品牌知名度和美誉度。

在品牌建设方面,Centellax注重与客户的沟通和互动。通过深入了解客户需求和市场变化,及时调整产品策略和市场策略。同时,公司还积极参与社会公益活动,履行社会责任,提升企业的社会形象和公信力。

这些故事旨在展示Centellax Inc公司在电子行业中的成长和发展过程,涉及技术创新、市场拓展、质量管理、人才培养和企业文化等多个方面。虽然这些故事是虚构的,但它们反映了电子行业中许多公司共同面临的挑战和机遇,以及如何通过不断努力和创新实现成功。

D3公司的发展小趣事

D3公司始终将产品质量放在首位。公司建立了严格的质量管理体系,从原材料采购到产品生产、检验,每一个环节都严格把控。这种对品质的执着追求,使得D3公司的产品在市场上赢得了良好的口碑。同时,公司还注重售后服务,为消费者提供全方位的支持和保障。这种以品质为核心的发展策略,让D3公司在电子行业中树立了良好的品牌形象。

ENOCEAN公司的发展小趣事

为了进一步推动其技术在建筑行业的应用,EnOcean发起并建立了EnOcean联盟。该联盟由来自建筑行业的400多家公司组成,致力于推广基于EnOcean无线标准的免维护无线解决方案。通过与联盟成员的合作,EnOcean不断拓展其市场份额,并为智慧楼宇及能源管理提供更稳定的硬件解决方案。

极海半导体(Geehy)公司的发展小趣事

为了进一步推动其技术在建筑行业的应用,EnOcean发起并建立了EnOcean联盟。该联盟由来自建筑行业的400多家公司组成,致力于推广基于EnOcean无线标准的免维护无线解决方案。通过与联盟成员的合作,EnOcean不断拓展其市场份额,并为智慧楼宇及能源管理提供更稳定的硬件解决方案。

CUI公司的发展小趣事

近年来,智能化和物联网技术的快速发展为电子行业带来了前所未有的机遇。CUI技术作为实现电子设备智能化和互联互通的关键环节之一,得到了广泛的应用。一些企业针对智能化和物联网的需求,开发出具有特殊功能的CUI材料,如柔性CUI、透明CUI等,为电子产品的创新提供了有力支持。

请注意,以上故事仅为概述性质,并非针对特定公司的实际发展历程。每个公司的具体情况可能因市场环境、技术实力、管理策略等因素而有所不同。如果需要了解特定公司的具体发展故事,建议查阅相关公司的官方网站、新闻报道或行业分析报告。

CYAN公司的发展小趣事

为了进一步拓展业务领域,CYAN在2015年收购了Polestar的量产车改装部门,获得了其在汽车电子领域的技术积累和市场资源。这次收购使CYAN能够更深入地了解汽车电子系统的需求,同时也为其带来了新的增长点。

问答坊 | AI 解惑

最新版本的keil软件--uvision4beta1及其使用手记

上传一份最新版本的KEIL 51 软件vision4beta1,看起来很不错的,这个是没有PJ的版本,如果你的机子上装有注册过的uvision3,那直接安装就可以使用,无需另外注册!!刚下载下来,简单打开看了下,就拿出来和大家分享了,里边有一份网上找的使用手记 ...…

查看全部问答>

创建SQLCE数据库

能不能用VS2003在PC机上创建一个SQLCE数据库并操作SQLCE数据库??救救命啊…

查看全部问答>

关于BOOTlLOADER写数据命令的问题

                                 写两个以上的数据时他的校验和是他们依次异或的结果,那要是写一个数据时校验和是什么呢?…

查看全部问答>

cortex-m0社区热闹程度大减!

关于M0的讨论不是很热闹呀! 发帖顶一下!…

查看全部问答>

求助啊,去明尼苏达的事

首先我一直关注学校有个2+2的项目,是去明尼苏达双城校区的。不过我大概了解到,一年所有的费用大概在20万左右,不知道你觉得是大概一个怎样的数目? 然后我家的情况不是特别好,只能这样说,最多够支付我一年的学费,也就是20万。而且我估计是家 ...…

查看全部问答>

stm32 CAN通信遇到问题

    我用的stm32F103VC控制器外接一个TJA1050CAN收发器,加一个CAN分析仪(确定可用USBCAN-II(iTEK公司的))进行测试,至于stm32的CAN测试程序,首先采用回环模式,使能CAN接收中断,调试发现,可以进入接收中断,而且接收的数据与发送的数 ...…

查看全部问答>

同时有12V、5V、3.3V的系统,TI有没有单片电源器件?

有个东东,需要的电源有12V(或15V)、5V、3.3V,TI的电源IC有没有单片解决方案?…

查看全部问答>

【PSoC4心得】对PSoC的一些感受

收到板子后就开始装软件,软件装了两次,第一次不知道为什么没装成功,第二次直接安装到C盘 ,安装类型选的全部,装好后可以用了。 我是听大学的老师说起PSoC的,感觉挺不错的就申请了一套板子,打算用到公司的方案上。       &n ...…

查看全部问答>

2014 C2000研讨会课程汇总 带有DSP灵魂的MCU

2014 C2000研讨会课程汇总 https://www.eeworld.com.cn/traini ... ex&a=lists&catid=25 TI C2000是业界公认的最适合各种对实时性要求高的场合 工业应用是TI近几年明确的最重要的发展应用,即把工业应用作为其公司发展战略的重中之重, 因此C20 ...…

查看全部问答>