基于STC89C52单片机的红外美的空调控制

网上搜了“一年”竟然没有基于51单片机的美的R05D协议的红外发射控制,STM32倒是一大堆,但是不想换芯片。唯一找到一个代码51单片机红外发射功能(以遥控空调为例)-优快云博客,但是延时有问题每个_nop_()的延时竟然不一样,我专门买了逻辑分析仪来对照,引导码、数据1、数据0、分隔符每个和美的的协议都有几ms的误差,害得我一个一个去调,搞了一下午加一晚上终于搞好了成功控制了空调,我把代码分享出来。

这是main.c我测试用的,主程序自己改改就好,什么情况关、什么情况开,这里给出来尽量简单,方便大家调试

#include <stdio.h>
#include <intrins.h>
#include <reg52.h>
#include <public.h>
#include <control.h>
int a=2;

void main()
{
	while(a>=1)
	{
		guan();
		a--;
	}
		while(1);
}


这是public.h(和开头提到的博客中有变化的也就是这里,调整了for循环的次数,因为这里每个for循环用逻辑分析仪看出来,每个和美的的协议都有时间上的误差)

#include <stdio.h>


typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;
sbit ired = P3^2;

void H()//12/110.592=1.085us
{
	u8 a;//17+9=26us 38kHZ  17/26=65%占空比的高电平
	for(a=0;a<=14;a++)//0.54ms  540/26.04=20.7
	{	
		ired=0;
		_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//8.68us
		ired=1;
		_nop_();_nop_();_nop_();_nop_();_nop_();
		_nop_();_nop_();_nop_();_nop_();_nop_();
		_nop_();_nop_();_nop_();_nop_();_nop_();
		_nop_();//1.085*16=17.36us
	}
	ired=1;//发高为低
	for(a=0;a<=41;a++)//1.62ms空载   1620/26us=62.3
	{
		_nop_();_nop_();_nop_();_nop_();_nop_();
		_nop_();_nop_();_nop_();_nop_();_nop_();
		_nop_();_nop_();_nop_();_nop_();_nop_();
		_nop_();_nop_();_nop_();_nop_();_nop_();
		_nop_();_nop_();_nop_();_nop_();//*24=26.04us
 
	}
}
	
void L()
{
	u8 a;
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值