合肥市建设网站市场信息价,在自己的网站做外链,桐乡 网站建设,江苏怎么做网站排名优化一、红外遥控背景知识
1.人机界面 #xff08;1#xff09;当面操作#xff1a;按键#xff0c;旋转/触摸按键#xff0c;触摸屏 #xff08;2#xff09;遥控操作#xff1a;红外遥控#xff0c;433M/2.4G无线通信【穿墙能力强】#xff0c;蓝牙-WIFI-Zigbee-LoRa等…
一、红外遥控背景知识
1.人机界面 1当面操作按键旋转/触摸按键触摸屏 2遥控操作红外遥控433M/2.4G无线通信【穿墙能力强】蓝牙-WIFI-Zigbee-LoRa等无线网络 2.红外遥控相关知识
1.红外线基本知识 红外线和紫外线人眼看不到人可以看到的红外线是其中的一部分 红外线传播不远 2.红外发射和接收 单向通信 一个发送器【供电发光发送红外信号】对应一个接收器【光电传感器】 光【1】----》电【0】 没有反应的可能性 1发送和接收的频率不同 2上层协议不同 万能遥控器是包含多种协议 3.38KHz载波和数字信号调制 载波无线通信过程中1和0无法在空气中传播将1和0叠加在载波上 数字信号1和0 调制将1和0叠加在载波上 解调将调制的数据反调制将数据取出来 电话线上的猫先将网络型号转换为电话线可以传播的信号然后进行传播 4.红外遥控器通信协议 遥控器和接收端的交互 二、原理图分析
1.原理图和接线
1.接收端原理图 2.IR1接收模块原理 发送调制和接收解调 1一体集成式接收头内部已经内置了红外载波解调功能从IRD引脚出来的就是通信的二进制信号。所以单片机的IO可以直接接IRD引脚来读取红外信号中的通信信息。所以38KHz的载波的调制和解调过程对编程是透明的可以忽视的 2红外接收头内部本身是有个相反的意思是平时发送方无发送信号时接收到的是1有发送载波时接受头IRD引脚输出的是0意味着后面时序图是相反的。 2.红外遥控器全解析
https://www.cnblogs.com/zhugeanran/p/9334289.html
1.功能演示
2.拆解 3.芯片bingding工艺
3.红外遥控系统工作过程综述
1.发射端 一般是一个红外遥控器内置一个芯片检查按键收集键值调制到38kHz 2.传播 通过红外头传播 3.接收端 对载波进行解调得到1和0的信号解开键值 三、NEC协议讲解
1.红外遥控协议原理 因为逻辑1和逻辑0在空气中传输过程中是不稳定的 1.红外遥控协议的作用 从二进制的层面上定义了如何传输一帧数据传输逻辑1应该多长的时间周期传输逻辑0应该多长时间周期 数据是一帧一帧的传不可以出现一帧没有传输完就传输下一帧。 2.红外遥控的特征 8 位地址和 8 位命令长度为提高可靠性每次传输两遍地址用户码和命令按键值通过脉冲串之间的时间间隔来实现信号的调制38Khz 载波每位的周期为 1.12ms逻辑0 或者 2.25ms逻辑1 3.解析协议的关键点 时间周期【传输逻辑1和传输逻辑0的时间不同】 4.不同协议的差异 时序的不同调制的方式不同但是低层还是按照38KHz发送 5.为什么需要协议 只需要低层协议就足够 2.NEC协议的关键点
1.载波和信号 2.关键1和0分别如何表示 3.数据是一帧一帧的整帧传输 接收方无法预测什么时候可以接收完毕【异步轮询或者中断】 4.NEC是串行协议 数据是一个bit一个bit的传输 5.时序中的时间仍然是关键点
四、官方示例代码
1.如何得到一段代码精确延时时间【软仿真】 涉及到延时时间问题时一定要先确定频率 延时等级问题 注意点每一次修改完后要记得重新运行一次 实际上耗费时间包括 1调用函数的时间 2函数内部代码的执行 #includereg51.h
#includeired.hvoid DelayMs(unsigned int x) //0.14ms误差 0us
{unsigned char i;while(x--){for (i 0; i13; i){}}
}
void func(void){unsigned char a1;
}void main(){unsigned char a0,y0;a1; //392usDelayMs(1); // 529us 实际上使用529-392137usDelayMs(70); //8945 实际上使用8945-5298416usfunc();ya4;a2;
2.中断函数
void ReadIr() interrupt 0
{unsigned char j,k;unsigned int err;Time 0; DelayMs(70); // 8416us---软仿真测试//时序图中要持续9us的时间处于低电平相反if (IRIN 0) //确认是否真的接收到正确的信号{ //检查是否超时 err 1000; //1000*10us10ms,超过说明接收到错误的信号/*当两个条件都为真时循环如果有一个条件为假的时候跳出循环免得程序出错的时侯程序死在这里*/ //每过136ms去检查是否变为高电平//IRIN0表示此时还是低电平此时9ms还没有到//err0避免死循环【超时设置】while ((IRIN0) (err0)) //等待前面9ms的低电平过去 { DelayMs(1); // 136us【在8.4us后不断检查】err--;} //超过9us进入4.5msif (IRIN 1) //如果正确等到9ms低电平{err 500;//超时检查while ((IRIN1) (err0)) //等待4.5ms的起始高电平过去{DelayMs(1);err--;}//开始传输数据for (k0; k4; k) //共有4组数据{ for (j0; j8; j) //接收一组数据【从低位开始读】{err 60;//这里是为了消耗每接受一个数据前面的560us的时间 while ((IRIN0) (err0))//等待信号前面的560us低电平过去{DelayMs(1);//延时1表示延时136us【软仿真】err--;}err 500;//开始区分逻辑11.69ms和逻辑00.56mswhile ((IRIN1) (err0)) //计算高电平的时间长度。{DelayMs(1);//0.14ms//逻辑11.69ms和逻辑00.56ms//1690/13612个//560/1364个//如果time》12则表示为逻辑1如果time《4则表示为逻辑0Time;//计算看有多少个136userr--;if (Time 30)//136*304080us【超时机制】//{EX0 1;return;}}//循环结束后判断此时time的大小如果IrValue[k] 1; //k表示第几组数据if (Time 8) //如果高电平出现大于565us那么是1{IrValue[k] | 0x80;//将得到的数据放在高位}Time 0; //用完时间要重新赋值 }}}if (IrValue[2] ~IrValue[3])//判断两个命令键值是否相同---》检验{return;}}
}
五、代码的移植
1.全局变量的定义 全局变量在哪个C文件中用就在哪个C文件中定义 不能放在头文件中定义 如果在多个C文件中都要用到同一个全局变量应该在一个主要的C文件中定义然后其他C文件中extern声明即可 ired.c
// 全局变量在哪个C文件中用就在哪个C文件中定义
// 不能放在头文件中定义
// 如果在多个C文件中都要用到同一个全局变量应该在一个主要的C文件中定义
// 然后其他C文件中extern声明即可
sbit IRIN P3^2;
unsigned char IrValue[5]; // IrValue的0-3用来放原始数据4用来放经过校验确认无误的键值
unsigned char Time;
main.c
extern unsigned char IrValue[6];//声明
2.红外遥控器上的键值
1.测试 2.结果 3.延时时间配合 结合上面的“如何得到一段代码精确延时时间【软仿真】”去验证一个延迟时间函数对应多长时间然后要求这个地方不超过9ms即可。 4.屏蔽无效数据 将经过校验确认无误的键值输出 5.程序改良 原来我们将主程序写在中断中实际上不能写在里面。 所以我们可以通过定时器来处理延时因为在定时器在运行时CPU还可以工作。