51单片机红外遥控程序是什么?

51单片机红外遥控程序是什么?,第1张

#include\x0d\x0a#include\x0d\x0a#define uchar unsigned char\x0d\x0a#define uint unsigned int\x0d\x0asbit lcden = P2^7\x0d\x0asbit lcdrs = P2^6\x0d\x0asbit lcdwr = P2^5\x0d\x0asbit IR = P3^2\x0d\x0auchar IRCOM[6]//数组,用于存储红外编码\x0d\x0auchar code table1[] = "remote control"\x0d\x0auchar code table2[] = "CODE:"\x0d\x0avoid delayms(uchar x)// 延时x*0.14ms\x0d\x0a{\x0d\x0auchar i\x0d\x0awhile(x--)\x0d\x0afor(i=0i//延时xms\x0d\x0a{\x0d\x0auchar i,j\x0d\x0afor(i=xi>0i--)\x0d\x0afor(j=110j>0j--)\x0d\x0a}\x0d\x0a/****************************LCD部分***********************************************/\x0d\x0avoid write_com(uchar com)\x0d\x0a{\x0d\x0alcden = 0\x0d\x0alcdrs = 0\x0d\x0alcdwr = 0\x0d\x0aP0 = com\x0d\x0adelay(5)\x0d\x0alcden = 1\x0d\x0adelay(5)\x0d\x0alcden = 0//别忘了lcden拉低\x0d\x0a}\x0d\x0avoid write_date(uchar date)\x0d\x0a{\x0d\x0alcden = 0\x0d\x0alcdrs = 1\x0d\x0alcdwr = 0\x0d\x0aP0 = date\x0d\x0adelay(5)\x0d\x0alcden = 1\x0d\x0adelay(5)\x0d\x0alcden = 0\x0d\x0a}\x0d\x0avoid lcd_init(void)\x0d\x0a{\x0d\x0alcden = 0\x0d\x0alcdrs = 0\x0d\x0alcdwr = 0\x0d\x0adelay(5)\x0d\x0awrite_com(0x38)\x0d\x0awrite_com(0x0c)\x0d\x0awrite_com(0x06)\x0d\x0awrite_com(0x01)\x0d\x0a}\x0d\x0a/*****************main()************************/\x0d\x0avoid main(void)\x0d\x0a{\x0d\x0auchar count=0\x0d\x0aIR = 1\x0d\x0alcd_init()\x0d\x0awrite_com(0x80)\x0d\x0awhile(table1[count]!='\0')\x0d\x0a{\x0d\x0awrite_date(table1[count])\x0d\x0acount++\x0d\x0adelay(5)\x0d\x0a}\x0d\x0acount = 0\x0d\x0awrite_com(0x80+0x40)\x0d\x0awhile(table2[count]!='\0')\x0d\x0a{\x0d\x0awrite_date(table2[count])\x0d\x0acount++\x0d\x0adelay(5)\x0d\x0a}\x0d\x0a\x0d\x0aIE = 0x81//开中断\x0d\x0aTCON = 0x01//脉冲负边沿触发\x0d\x0awhile(1)\x0d\x0a\x0d\x0a}\x0d\x0a/*********************红外中断**************************/\x0d\x0avoid IR_time() interrupt 0 \x0d\x0a{\x0d\x0auchar i,j,TimeNum=0//TimeNum用来计IR高电平次数 从而判断是0还是1\x0d\x0aEX0 = 0//关闭中断\x0d\x0adelayms(5)\x0d\x0aif(1 == IR)\x0d\x0a{\x0d\x0aEX0 = 1\x0d\x0areturn\x0d\x0a}\x0d\x0awhile(!IR) //跳过9ms前导低电平\x0d\x0adelayms(1)\x0d\x0afor(i=0i{\x0d\x0afor(j=0j{\x0d\x0awhile(IR) //跳过4.5ms的前导高电平\x0d\x0adelayms(1)\x0d\x0awhile(!IR) //跳过0.56ms的低电平\x0d\x0adelayms(1)\x0d\x0a\x0d\x0awhile(IR) \x0d\x0a{\x0d\x0aTimeNum++//计时高电平时间从而判断读取的是0还是1\x0d\x0adelayms(1)\x0d\x0a}\x0d\x0aif(TimeNum>=30)//按键按下时间过长 跳过\x0d\x0a{\x0d\x0aEX0 = 1\x0d\x0areturn\x0d\x0a}\x0d\x0aIRCOM[i] = IRCOM[i]>>1\x0d\x0aif(TimeNum >= 8) //8*0.14ms 这时读取的是1;\x0d\x0a{\x0d\x0aIRCOM[i] = IRCOM[i]|0x80\x0d\x0a}\x0d\x0aTimeNum = 0\x0d\x0a}\x0d\x0a}\x0d\x0aif(IRCOM[2]!=~IRCOM[3])//判断八位数据和八位数据反码是否相等\x0d\x0a{\x0d\x0aEX0 = 1\x0d\x0areturn\x0d\x0a}\x0d\x0aIRCOM[4] = IRCOM[2]&0x0f//取低四位\x0d\x0aIRCOM[5] = IRCOM[2]>>4//IRCOM[5]取IRCOM[2]高四位\x0d\x0aif(IRCOM[4] >9) //转换成字符\x0d\x0a{\x0d\x0aIRCOM[4] = IRCOM[4] + 0x37\x0d\x0a}\x0d\x0aelse\x0d\x0aIRCOM[4] = IRCOM[4] + 0x30\x0d\x0aif(IRCOM[5] >9)\x0d\x0a{\x0d\x0aIRCOM[5] = IRCOM[5] + 0x37\x0d\x0a}\x0d\x0aelse\x0d\x0aIRCOM[5] = IRCOM[5] + 0x30\x0d\x0adelay(5)\x0d\x0awrite_com(0x80 + 0x40 + 5)\x0d\x0awrite_date(IRCOM[5])\x0d\x0awrite_date(IRCOM[4])\x0d\x0aEX0 = 1//重新开启外部中断\x0d\x0a}

首先,确保您的中兴AXON 40 Ultra手机上安装了红外遥控应用程序。如果您的手机没有预装此应用程序,则可以在应用商店中搜索并安装“红外遥控”应用程序。

接下来,打开红外遥控应用程序,并按照屏幕上的提示完成初始设置。在设置过程中,您需要选择您想要遥控的设备类型,例如电视,空调等。然后,按照应用程序提示完成遥控器配置,包括选择品牌和型号。

配置完成后,您可以使用您的中兴AXON 40 Ultra手机作为遥控器来控制您的设备了。使用红外遥控应用程序,在您的手机上选择相应的设备,然后使用应用程序提供的按钮控制设备。

遥控器是一种用来远控机械的装置。现代的遥控器,主要是由集成电路电板和用来产生不同讯息的按钮所组成。下面一起来看看红外遥控器原理以及遥控器原理图吧。

红外遥控器原理

红外线遥控系统一般由发射器和接收器两部分组成。发射器由指令键、指令信号产生电路、调制电路、驱动电路及红外线发射器组成。当指令键被按下时,指令信号产生电路便产生所需要的控制信号,控制指令信号经调制电路调制后,最终由驱动电路驱动红外线发射器,发出红外线遥控指令信号。

接收器由红外线接收器件、前置放大电路、解调电路、指令信号检出电路、记忆及驱动电路、执行电路组成。当红外接收器件收到发射器的红外指令信号时,它将红外光信号变成电信号并送到前置放大电路进行放大,再经过解调器后,由信号检出电路将指令信号检出,最后由记忆电路和驱动电路驱动执行电路,实现各种 *** 作。

控制信号一般以某些不同的特征来区分,常用的区分指令信号的特征是频率和码组特征,即用不同的频率或者编码的电信号代表不同的指令信号来实现遥控。所以红外遥控系统通常按照产生和区分控制指令信号的方式和特征分类,常分为频分制红外线遥控和码分制红外线遥控。

1 红外遥控系统发射部分

红外遥控发射器由键盘矩阵、遥控专用集成电路、驱动电路和红外发光二极管三部分组成,结构如图1所示。

当有键按下时,系统延时一段时间防止干扰,然后启动振荡器,键编码器取得键码后从ROM中取得相应的指令代码(由0和1组成的代码),遥控器一般采用电池供电,为了节省电量和提高抗干扰能力,指令代码都是经32~56kHz范围内的载波调制后输出到放大电路,驱动红外发射管发射出940nm的红外光。当发送结束时振荡器也关闭,系统处于低功耗休眠状态。载波的频率、调制频率在不同的场合会有不同,不过家用电器多采用的是38kHz的,也就是用455kHz的振荡器经过12分频得到的。

遥控发射器的信号是由一串0和1的二进制代码组成的,不同的芯片对0和1的编码有所不同,现有的红外遥控包括两种方式:脉冲宽度调制(PWW)和脉冲位置调制(PPM或曼彻斯特编码)。两种形式编码的代表分别是NEC和PHILIPS的RC-5。

2 红外遥控系统接收部分

接收部分是由放大器、限幅器、带通滤波器、解调器、积分器、比较器等组成的,比如采用较早的红外接收二极管加专用的红外处理电路的方法,如CXA20106,此种方法电路复杂,现在一般不采用。但是在实际应用中,以上所有的电路都集成在一个电路中,也就是我们常说的一体化红外接收头。一体化红外接收头按载波频率的不同,型号也不一样。由于与CPU的接口的问题,大部分接收电路都是反码输出,也就是说当没有红外信号时输出为1,有信号输出时为0,它只有三个引脚,分别是+5V电源、地、信号输出。

系统的设计

1 单片机编码发射部分

① 键盘部分

红外遥控器的发射器电路比较简单,由一个4×4矩形键盘、一个PNP驱动三极管、一个红外线发光二极管和两个限流电阻组成。要遥控哪台接收器由键盘输入,即由键盘输入要红外遥控的地址,地址经过编码、调制后通过红外发光二极管发射出去。

矩阵键盘部分由16个轻触按键按照4行4列排列,将行线所接的单片机的I/O口作为输出端,而列线所接的作为输入。当没有键被按下时,所有输出端都是高电平,代表没有键按下。有键按下时,则输入线就会被拉抵,这样,通过读入输入线的状态就可以知道是否有键被按下。

键盘的列线接到P1口的低4位,行线接到P1口的高4位,列线P1.0~P1.3设置为输入线,行线P1.4~P1.7设置为输出线。

检测当前是否有键被按下。检测的方法是使P1.4~P1.7输出为0,读取P1.0~P1.3的状态,若P1.0~P1.3为全1,则无键闭合,否则有键闭合。

去除键抖动。当检测到有键按下后,延时一段时间再做下一步检测判断。

若有键按下,应该识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4~P1.7按下面4种组合依次输出1110,1101,1011,0111,在每组行输出时读取P1.0~P1.3,若全为1,则表示0这行没有键输入,否则有键闭合。由此得到闭合键的行值和列值,然后采用计算的方法或者查表的方法将闭合键的行值和列值转换成所定义的值。

为了保证每闭合一次CPU仅作一次处理,必须去除键释放时的抖动。产生的键值放在发送数据库区,30H存放的是产生的键值,即要遥控的8位地址共1字节,31H放的是和30H中的相同的8位地址,地址码重发了一次,主要是加强遥控器的可靠性,如果两次地址码不相同,则说明本帧数据有错,应该丢弃。32H放的是00H(为了编程简单),33H放的是0FFH,一共32位数据。要发送数据时,只要到那里读取数据即可,然后调用发射子程序发送。

②载波部分

根据前面介绍的红外遥控的基本原理,红外遥控器编码调制的方法其实很简单,只要生成一定时间长的电平就可以。再通过一个38kHz载波调制便可以发射编码。载波的产生方法有多种,可以由CMOS门电路RC振荡器构成,或者由555时基电路构成等。

在此次设计中采用的是CPU延时,即用定时器中断完成,用单片机的T0定时产生38kHz载波。设定定时器为方式2,即自动恢复初值的8位计数器。TL0作为8位计数器,TH0作为计数初值寄存器,当TL0计数溢出时,一方面置1溢出标志位TF0,向CPU请求中断,同时将TH0内容送入TL0,使TL0从初值开始重新加1计数。因此,T0工作于方式2,定时精度比较高。根据计算,设定38KHz的定时初值,采用12kHz晶振的定时初值为0F3H,用11.0592kHz晶振时的初值为0F4H,设定好定时器中断,在中断程序中只写入取反P2.0(CPL P2.0),当要发送数据1时,前面560μs高电平发送时,先打开定时器中断,再启动定时器,允许定时器工作,延时560μs再关定时器,后面1690μs的低电平因为不发送信号,所以可以直接置P2.0高电平后,延时1690μs即可数据0前面的560μs高电平和数据1的一样,后面560μs的低电平因为不发送信号,所以可以直接置P2.0高电平后,延时560μs即可。

2 红外接收解码电路

红外遥控接收采用一体化红外接收头,它将红外接收二极管、放大器、解调、整形等电路安装在一起,只有三个引脚。红外接收头的信号输出端接单片机的INT0端,单片机中断INT0在红外脉冲下降沿时产生中断。电路如图3.3所示,图中增加一只PNP三极管对输出信号放大,R和C组成去耦电路抑制电源干扰。

3 遥控信号的解码算法

平时,遥控器无键按下时,红外发射二极管不发出信号,遥控接收头输出信号1,有键按下时,0和1的编码的高电平经遥控接收头反相后会输出信号0,由于与单片机的中断脚相连,将会引起单片机中断(单片机预先设定为下降沿产生中断)。

遥控码发射时由9ms的高电平和 4.5ms的低电平表示引导码,用560μs的高电平和560μs的低电平表示数据“0”,用560μs的高电平和1690μs的低电平表示数据“1”,引导码后面是4字节的数据。接收码是发射码的反向,所以判断数据中的高电平的长度是读出数据的要点,在这里用882μs(560~ 1690μs之间)作为标尺,如果882μs之后还是高电平则表示是数据1,将1写入寄存器即可(数据为1时还需要再延时一段时间使电平变低,用来检测下一个低电平的开始)。882μs后电平为低电平则表示是数据0,则将0写入寄存器中,之后再等待下一个低电平的到来。

继续接收下面的数据,当接收到32位数据时,说明一帧数据接收完毕,然后判断本次接收是否有效,如果两次地址码相同并且等于本系统的地址码,数据码和数据反码之和等于0FFH,则接收的本帧数据有效,点亮一只发光二极管,否则丢弃本次接收到的数据。

接收完毕后,初始化本次接收到的数据,准备下次遥控接收。

以上就是小编为大家介绍的遥控器原理,希望能够帮助到您。更多关于遥控器原理的相关资讯,请继续关注土巴兔学装修。

土巴兔在线免费为大家提供“各家装修报价、1-4家本地装修公司、3套装修设计方案”,还有装修避坑攻略!点击此链接:【https://www.to8to.com/yezhu/zxbj-cszy.php?to8to_from=seo_zhidao_m_jiare&wb】,就能免费领取哦~


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7706037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存