通过红外通信控制格力YB0F2型空调
来源:互联网 发布:学seo和sem难吗 编辑:程序博客网 时间:2024/04/30 04:45
红外收发的原理
红外发射头为红外发光二极管,点亮则发出红外线。红外线根据 编码规范 再经过载波信号调制 (使用38kHz左右的方波信号)后,形成接收头(本文使用的为一体化接收头IRM38A)可以接受的有效信号。接受到有效信号后,由对应解码程序 识别并进行相应操作。
其中,载波信号调制 和 单个比特位 的发送是对应与红外接收头而言的。可以理解为当红外灯按载波信号点亮时,红外接收头才能获取到光信号。而闪烁的间隔,则决定了红外接收头的信号输出为高或低电平。
而命令的 编解码格式 ,则是对于程序员而言的,由软件实现。
格力YB0F2型空调命令格式如下:
报头脉冲:9ms
报头间距:4.5ms
载波频率:37.9KHz(38KHz)
码段1与码段2间距:20ms
“1”:脉宽,656us。间距,1640us。
“0”:脉宽,656us。间距,544us。
红外信号主要包括CMD1和CMD2两部分,其中CMD1包括35 位的命令和一位停止位,CMD2包括32位的命令和一位停止位。其中停止位为开关机位取反。具体指令含义可见https://wenku.baidu.com/view/538ee52dbe23482fb4da4cc8.html 。
表格 1 CMD1
Bit:1~3
4
5~6
7
8
模式
开关机(CMD2 32bit取反)
风速
是否扫风
是否睡眠
9~12
13~16
温度
睡眠1
17~20
21
22
23
24
睡眠2
超强
灯光
健康
干燥/辅热
25
26
27
28
29
30
31
32
换气
0
0
0
1
0
1
0
33
34
35
0
1
0
表格 2 CMD2
Bit:1
2
3
4
5
6
7
8
上下扫风
0
0
0
左右扫风
0
0
0
9~10
11
12
13
14
15
16
显示温度
0
0
0
0
0
0
17
18
19
20
21
22
23
24
0
0
0
0
0
0
0
0
25
26
27
28
29~32
0
0
0
0
温度
源代码如下:
#include <reg52.h>typedefunsigned int u16;typedefunsigned char u8;sbitP2_2 = P2^2;void Delay(u16 i);//延时函数voidTimer0Init();//高优先级的定时器,用于产生38kHz的方波信号voidTimer0();voidSendBit(u16 b);//发送一位数据voidSendCmd();//发送命令void main(){Timer0Init(); P2_2 = 0;//将I/O口拉低while(1){SendCmd();Delay(100000);}}/*********************************功能:延时参数:i = 1 延时9微妙*********************************/void Delay(u16 i){while(i--);}voidTimer0Init(){TMOD|= 0x02;//工作方式2:8位重装载定时器 TL0 = 0xF3;TH0 = 0xF3;PT0 = 1;//高优先级 TR0 = 0; //定时器起停位 ET0 = 1; //中断允许 EA = 1;//总中断开启}/*********************************功能:38kHz载波信号*********************************/voidTimer0() interrupt 1{P2_2 =~ P2_2;}/*********************************功能:发送一位数据参数:b 待发送的比特位*********************************/voidSendBit(u16 b){TL0 = 0xF3;TH0 = 0xF3;TR0 = 1;Delay(33);TR0 = 0;if(b)Delay(170);elseDelay(46);}/*********************************功能:发送69位命令*********************************/voidSendCmd(){u16Comd1[3] = {0xC050,0x040A,0x4000};u16 Comd2[3] = {0x0044,0x0009,0x8000};int i,j;TL0 = 0xF3;TH0 = 0xF3;TR0 = 1;//报头Delay(470);TR0 = 0;Delay(500);//命令段1for(i=0;i<2;i++){for(j=0;j<16;j++){SendBit(Comd1[i] & 0x8000);Comd1[i] <<= 1;}}for(i=0;i<4;i++){SendBit(Comd1[2] & 0x8000);Comd1[2] <<= 1;}//间隔20msDelay(2200);//命令段2for(i=0;i<2;i++){for(j=0;j<16;j++){SendBit(Comd2[i] & 0x8000);Comd2[i] <<= 1;}}SendBit(Comd2[2] & 0x8000);TR0 = 0;}
阅读全文
0 0
- 通过红外通信控制格力YB0F2型空调
- 格力空调红外编码分析
- s3c2440红外控制美的空调(Linux)
- 格力空调遥控器红外编码透析(长码)
- 格力空调红外码(短码)解析
- 格力空调遥控器红外编码透析(长码)
- 空调红外编码正确,空调为什么打不开
- 格力空调
- 格力空调价格。
- 红外通信
- 树莓派2代通过人体红外感应器控制继电器
- 格力空调是最差劲的空调
- 格力空调和CCTV
- 红外遥控通信原理
- 外部中断(红外通信)
- arduino 红外控制彩灯
- 红外解码控制数码管
- android 空调遥控器——红外设备(基础)
- break和continue的区别
- subprocess与win32process
- 哲♂学三幻神带你学习ConstraintLayout(约束布局)
- CentOS6.4中vsftpd服务器的安装与配置
- ViewPager使用详解
- 通过红外通信控制格力YB0F2型空调
- 25. Reverse Nodes in k-Group
- 机器学习之回归
- JAVA POI操作EXCEL
- 好好的代码突然编译不过? 退出shell后,再次打开shell又编译过了?
- Lua脚本的书写和使用
- 坚持#第249天~PXE
- ubantu结束任务
- JDK7与JDK8中HashMap的实现