历史上的今天
返回首页

历史上的今天

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

正在发生

2018年03月09日 | 单片机解码万能红外遥控器的C51程序

2018-03-09 来源:eefocus

    使用方法:打开串口调试助手,设置为9600 bps 单片机这边用11.0592MHz的晶振,使用sm0038或者其他型号的红外接收头按下面的电路连接好,其中out直接与单片机的p3.2脚相连.按下遥控器,串口调试助手便会出现解码值.

点击浏览下一页

 

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

    /* 本程序的蓝本从网上搜集,经修改并注释,万能遥控器解码成功 */

    /* 晶振:11.0592MHz */

    /************************* 说 明 *********************************/

    /* 以一个9ms的低电平和4.5ms的高电平为引导码,后跟32位二进制代码 */

    /* 前16位为8位用户码及其反码,后16位为8位的操作码及其反码 */

    /* 以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示"0"; */

    /* 以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示"1"。 */

    /* 注意:接收码的脉宽与间隔是对发射码取反的,即间隔是0.565ms */

    /* 解码后共有四个十六进制码,本程序取第三个作为识别码 */

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

    #include

    #define uchar unsigned char

    uchar data IRcode[4]; //定义一个4字节的数组用来存储代码

    uchar CodeTemp; //编码字节缓存变量

    uchar i,j,k; //延时用的循环变量

    sbit IRsignal=P3^2; //HS0038接收头OUT端直接连P3.2(INT0)

    sbit P0_0=P0^0; //P0连接到 LED 上

    sbit P0_1=P0^1;

    sbit P0_2=P0^2;

    /**************************延时0.9ms子程序**********************/

    void Delay0_9ms(void)

    {

    uchar j,k;

    for(j=18;j>0;j--)

    for(k=20;k>0;k--)

    ;

    }

    /***************************延时1ms子程序**********************/

    void Delay1ms(void)

    {

    uchar i,j;

    for(i=2;i>0;i--)

    for(j=230;j>0;j--)

    ;

    }

    /***************************延时4.5ms子程序**********************/

    void Delay4_5ms(void)

    {

    uchar i,j;

    for(i=10;i>0;i--)

    for(j=225;j>0;j--)

    ;

    }

    /**************************** 延时子程序 ************************/

    void Delay(void)

    {

    uchar i,j,k;

    for(i=200;i>0;i--)

    for(j=200;j>0;j--)

    for(k=3;k>0;k--)

    ;

    }

    /******************** 中断0解码服务子程序 ********************/

    void int0(void) interrupt 0 using 2

    {

    EA = 0; //??? 可以这样,跳入中断,但仍可对P3.2(INT0)进行电平变化的读取

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

    {

    Delay0_9ms();

    if (IRsignal==1) //如果0.9ms后IRsignal=1,说明不是引导码

    {

    k=10;

    break;

    }

    else if(k==9) //如果 持续了10×0.9ms=9ms的低电平,说明是引导码

    {

    while(IRsignal==0);

    Delay4_5ms(); //跳过持续4.5ms的高电平

    for(i=0;i<4;i++) //分别读取4个字节

    {

    for(j=1;j<=8;j++) //每个字节8个bit的判断

    {

    while(IRsignal==0); //等待上升沿 此处用得很好:因为0.56ms的低电平(接收时)是代码0与1的相同部分

    Delay0_9ms(); //从上升沿那一时刻开始延时0.9ms(因为0.9介于0.56(=1.125-0.56)与1.69(=2.25-0.56)之间),再判断IRsignal

    if(IRsignal==1) //如果IRsignal是"1",高位置"1",并向右移一位

    {

    Delay1ms(); //为什么要延时1ms呢?因为要使IRsignal跳至低电平(即0.56ms的0与1相同部分上)

    CodeTemp=CodeTemp|0x80; //此处的算法很好

    if(j<8) CodeTemp=CodeTemp>>1;

    }

    else

    if(j<8)

    CodeTemp=CodeTemp>>1;//如果IRsignal是"0",则直接向右移一位,自动补"0"

    }

    IRcode=CodeTemp;

    CodeTemp=0;

    }

    for(i=0;i<4;i++) //通过串口将代码发出

    {

    SBUF=IRcode;

    while(!TI); //等待一个字节发送完毕

    TI=0;

    }

    Delay();

    }

    }

    EA = 1;

    }

    /***********************串口初始化程序*********************/

    void initUART(void)

    {

    TMOD |= 0x20; //

    SCON = 0x50; //

    PCON |= 0x80; //

    TH1 = 250; // 9600 bps @ 11.0592MHz

    TL1 = 250;

    TR1 = 1;

    }

    /**************************主程序*************************/

    void main()

    {

    P0=0XFF;

    initUart();

    IT0 = 1; //INT0为负边沿触发, (1:负边沿触发,0:低电平触发)

    EX0 = 1; //外部中断INT0开, (1:开, 0:关 )

    EA = 1; //开所有中断

    CodeTemp = 0; //初始化红外编码字节缓存变量

    Delay();

    while(1)

    {

    switch(IRcode[2])

    {

    case 0x42:P0=0XFF;P0_0=0;break;

    case 0x4e:P0=0XFF;P0_1=0;break;

    case 0x52:P0=0XFF;P0_2=0;break;

    }

    }

    }


推荐阅读

史海拾趣

Barry Industries Inc公司的发展小趣事

Barry Industries Inc深知品质是企业生存和发展的关键。因此,公司始终将品质管理放在首位,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都严格把控品质。同时,公司还注重品牌建设,通过提升产品形象和服务水平,逐渐树立了良好的品牌形象。

DCCOM [ DC COMPONENTS ]公司的发展小趣事

在追求经济效益的同时,DCCOM公司也积极履行社会责任。公司倡导环保理念,注重可持续发展。在生产过程中,公司采用环保材料和清洁能源,减少对环境的影响。此外,DCCOM还积极参与社会公益活动,回馈社会。这种环保理念和社会责任感使得DCCOM在行业中树立了良好的形象。

请注意,以上故事均基于虚构和假设,不代表任何真实情况。如果您需要了解DC Components或其他特定公司的真实发展历程和故事,建议您查阅相关资料或联系公司官方获取准确信息。

GAPTEC Electronic GmbH & Co. KG公司的发展小趣事

背景:随着全球对环保和可持续发展的重视,Galaxy Microelectronics也开始关注其生产过程中的环保问题。

发展:公司投入巨资建设绿色工厂,采用先进的环保技术和设备,减少生产过程中的能源消耗和废弃物排放。同时,Galaxy Microelectronics还积极推广环保理念,与供应商和客户共同构建绿色供应链。这些举措不仅提升了公司的社会形象,还为其在竞争激烈的市场中赢得了更多客户的青睐。

BILIN公司的发展小趣事

背景:在闪存市场取得成功后,Galaxy Microelectronics开始探索多元化发展道路。

发展:公司决定进入DRAM市场,并投入大量资源进行技术研发。经过几年的努力,Galaxy Microelectronics成功推出了多款高性能DRAM产品,进一步丰富了其产品线。此外,公司还开始涉足SSD固态硬盘领域,推出了多款具有竞争力的产品,进一步巩固了其在存储市场的地位。

Ericsson公司的发展小趣事

Ericsson非常重视人才培养和团队建设。公司设立了专门的培训机构为员工提供全面的培训和发展机会帮助他们不断更新知识和技能以适应快速变化的市场环境。此外Ericsson还注重营造积极向上的企业文化鼓励员工创新创造和发挥潜力为公司的发展贡献自己的力量。这种注重人才培养和团队建设的策略也为Ericsson的长期发展提供了有力保障。

Amkor公司的发展小趣事

Ericsson非常重视人才培养和团队建设。公司设立了专门的培训机构为员工提供全面的培训和发展机会帮助他们不断更新知识和技能以适应快速变化的市场环境。此外Ericsson还注重营造积极向上的企业文化鼓励员工创新创造和发挥潜力为公司的发展贡献自己的力量。这种注重人才培养和团队建设的策略也为Ericsson的长期发展提供了有力保障。

问答坊 | AI 解惑

如何用c开发dsp

关键字:TMS320F24X C DSP :; DSP; C; TMS320F24X…

查看全部问答>

谷歌推免费手机GPS导航系统

北京时间10月29日消息,据国外媒体报道,谷歌周三推出了一款免费手机导航应用,该款应用可向用户提供建议路线(turn-by-turn)。谷歌此举被认为可能会向GPS设备制造商发起攻击。 谷歌推出的新应用谷歌地图导航(Google Maps Navigation)是其手机版 ...…

查看全部问答>

【转】Linux内核裁剪的具体步骤

在menuconfig中配置: 详细介绍内核配置选项及删改情况 第一部分:全部删除 Code maturity level options ---> 代码成熟等级选项 []Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开 ...…

查看全部问答>

SAA3010红外解码遇到一些地方不是很明白

我的解码思路是这样的,两次进入外部中断以后开启定时器,关闭外部中断,第一次进入定时器中断时间是400us,以后都是800us这样就可以对每一位码位进行两次采样。 控制位一位,系统码位5位,数据码位6位。总共12位。一位采样两次。总共24次,正好 ...…

查看全部问答>

怎样知道已经编译好的windows ce核心是包含了.net框架的?

怎样知道已经编译好的windows ce核心是包含了.net框架的? 怎样知道.net框架的版本。 不看开发环境,只看板子上跑起来的windowsce…

查看全部问答>

cetk 连接错误!

用USB连接的。 运行Windows CE Test Kit Server -〉connection ->start client...->connect 设备端,clientSide.exe 开始运行。(说明连接正常) 但是Quick Start 后,PC端跳出应用程序错误。 定制镜像时已经添加了cetk ,是不是SDK要重新制作的 ...…

查看全部问答>

地址卷绕

想问下,地址卷绕是一种什么概念啊!好像发生在运算结果上溢出和下溢出时候的!…

查看全部问答>

TCPMP播放的时候拔卡死机的问题

我现在用TCPMP播放视频,当TCPMP正在播放的时候,我拔掉卡,系统会给我一个拔卡事件,之后我关闭TCPMP播放。这样理论是应该是没有问题的,但是实际上操作,却偶尔发现播放器会死掉(系统还没死,只是TCPMP被卡住了)。我对播放进行跟踪,发现是播放器 ...…

查看全部问答>

关于BOOTROM的生成问题?

我在CONFIG.H中设置好 DEFAULT_BOOT_LINE   \"secEnd(0,0)host:vxWorks h=192.168.0.1 e=192.168.0.100:ffffff00 u=target pw=target tn=S3C4510\"后! 生成bootrom_uncmp后转化成bootrom.bin,再烧写到boot flash中! 启动后,能ping ...…

查看全部问答>