最近有小伙伴私信我,他是学电子信息的,老师让他们做一个关于红外遥控控制智能家居的小项目,没有设计思路,也不知道用啥芯片,自己只会写一些单片机代码,和使用AD-PCB设计软件。
我记得很久以前做过一个类似的项目大概是16年,于是找了大半个下午,终于找出来,现在把它分享出来,供大家参考一下,希望小伙伴们能从中学到东西。

PCB原理图如下,我记得当时还是用protel画的

电路原理图如下:画图软件同上

实验参考C语言代码
#include “stc12c2052ad.h”
#include “wifi_IR.h”

#include <intrins.h>

//#define ENABLE_IAP 0x83 //if SYSCLK<20MHz

#define FOSC 11059200UL//12M晶振

#define CMD_IDLE 0 //Stand-By
#define CMD_READ 1 //Byte-Read
#define CMD_PROGRAM 2 //Byte-Program
#define CMD_ERASE 3 //Sector-Erase

uint addr;//EPPROM地址
//uchar cou;
bit study_send_switch,LED_state;

void SaveLevelTimeLength(uint addr);//存储电平时长
void IrSend();//红外发射
void Read_Key();
void IrStudy();
void IapIdle();
void byte_write(uint addr, uchar dat);
void SectorErase(uint sector_addr);
uchar byte_read(uint addr);

void TIMER0_RELOAD(uint addr)//装入定时器
{
TR0=0;
TF0=0;
TH0=byte_read(addr);//从指定的地址读出电平的长度
TL0=byte_read(addr+1);//从指定的地址读出电平的长度
TR0=1;//启动定时器

}
//---------------------------------------------------

void IrSend()//红外发射
{
uchar level_cnt; //电平个数

level_cnt=byte_read(addr);//读出电平个数
addr++;//地址后移一位
while (1)
{
F38_4KHZ_ON();//因为红外码大部分都是起始一段高电平,所以此处一开始就打开。
TIMER0_RELOAD(addr);//时长装入定时器,开始计时
addr+=2;// 地址移到没有取过的地方,TIMER0_RELOAD函数取了两个地址的数据
while (!TF0);//等待定时器0溢出

if(level_cnt–==0)break;//判断是否取完
F38_4KHZ_OFF(); IR_SEND = 1;//停止发射
TIMER0_RELOAD(addr);//时长装入定时器,开始计时
addr+=2;//地址移到没有取过的地方,TIMER0_RELOAD函数取了两个地址的数据
while (!TF0);//等待定时器0溢出
if(level_cnt–==0)break;//电平数是否完毕
}
F38_4KHZ_OFF(); IR_SEND = 1;//停止发射
}
//---------------------------------------------------

void SaveLevelTimeLength(uint addr)//存电平时长
{
TR0=0;
byte_write(addr, ~TH0);
byte_write(addr+1, ~TL0); //电平时长存入eeprom中
TH0=0;//定时器初值归0
TL0=0x65;//查手册知道,编程一个字节需要55us,编程两个字节,所以此处需要110us。
TR0=1;//开始计数
}

void IrStudy()
{
uint level_cnt;
uint addrtmp;

TF0 = 0;
SectorErase(addr);
addrtmp=addr;//记录第一个地址,存储电平个数
addr++;
TR0=0;//停止计数
while (IR_REV);//等待红外接收管脚为低电平
//编码与解码是一对逆过程,不仅在原理上是一对逆过程,在码的发收过程也是互反的,即以前发射端原始信号是高电平,那接收头输出的就是低电平
TH0=0;
TL0=0;
TR0=1;//开启定时器

while (1)
{
while (!IR_REV) //等待高电平,等待超时;超过70MS退出
{
if (TF0)
{
goto StudyFinish;
}

}

SaveLevelTimeLength(addr); //高电平到来,存低电平时长到eeprom}
level_cnt++;
addr += 2;

while (IR_REV) //等待低电平,等待超时;超过70MS退出
{
if (TF0)
{
goto StudyFinish;
}
}
SaveLevelTimeLength(addr);//低电平到来存高电平电平时长
level_cnt++;//存储的电平个数加11
addr+=2;//地址后移两位
}
StudyFinish:
TF0=0;
TR0=0;
byte_write(addrtmp,level_cnt);
level_cnt = 0;

}

void Delay100ms() //@11.0592MHz
{
unsigned char i, j, k;

nop();
nop();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (–k);
} while (–j);
} while (–i);
}

void IapIdle()
{
IAP_CONTR = 0; //Close IAP function
IAP_CMD = 0; //Clear command to standby
IAP_TRIG = 0; //Clear trigger register
IAP_ADDRH = 0x80; //Data ptr point to non-EEPROM area
IAP_ADDRL = 0; //Clear IAP address to prevent misuse
}

/************************************************************************
函数名称:字节写
全局变量:无
参数说明:addr:写入地址, dat:写入数据
************************************************************************/
void byte_write(uint addr,uchar dat)
{
IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
IAP_CMD = CMD_PROGRAM; //Set ISP/IAP/EEPROM PROGRAM command
IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high
IAP_DATA = dat; //Write ISP/IAP/EEPROM data
IAP_TRIG = 0x46; //Send trigger command1 (0x46)
IAP_TRIG = 0xb9; //Send trigger command2 (0xb9)
nop();
nop();
nop();
nop();
IapIdle();

}

鉴于篇幅限制只能写部分代码
最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,
如果需要完整代码或设计文件,请加QQ分享群,本博客所有代码开源下载,或私信我,看到后会第一时间回复。
谢谢!

单片机ESP8266智能家居的红外遥控设计 C源代码+原理图+PCB 全设计资料相关推荐

  1. 105、基于51单片机的智能电子密码锁红外遥控控制系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Protues仿真 七.程序源码 八.资料包括 摘要 在日常的生活和工作 ...

  2. 智能家居之红外遥控---手机万能红外遥控器

    今天小X教你用你的智能手机做一个万能遥控器 需要准备一些材料: 1:一个搭载38K载波的红外发射管,(波长940nm) 标准模式:30KHz-60KHz:远程模式:38K. 我们的万能遥控器最好使用品 ...

  3. 基于STM32F103单片机的智能扫地机器人 循迹避障车 原理图PCB设计

    系统功能设计 (末尾附文件) 本系统由STM32F103C8T6单片机核心板.2路红外避障模块.2路按键.风扇驱动.电机驱动.升压模块.锂电池充电模块及电池盒供电组成. 1.按下启动按键后,小车启动, ...

  4. 基于51单片机GPS定位公交车自动报站系统(程序+原理图+PCB+论文+全套资料)

    功能介绍: 1.电路设计合理. 2.熟练地使用STC89C52单片机.GPR模块,掌握其原理. 3.可设置播报声音的大小.上行或下行.显示时间等内容 4.采用LCD12864显示时间,位置等信息. 5 ...

  5. 基于STM32单片机的智能家居烟雾温度火灾防盗报警的设计与实现

    功能介绍 以STM32单片机作为主控系统: LCD1602液晶显示屏来显示显示测得的值: SR501人体红外感应是否有人进行防盗: 通过烟雾传感器MQ-2获取前的烟雾值: 通过DHT11温湿度传感器来 ...

  6. 基于51单片机的智能家居的设计(一)

    基于51单片机的智能家居的设计初级版本 项目简介: 该项目可以通过单片机烧写软件发送指令并实现大厅灯跟卧室灯的亮灭.该项目分为四个等级: 1.在单片机烧写软件上面发送指令实现灯的亮灭: 2.用语音模块 ...

  7. ESP8266智能家居的设计(开心!!各个小组之间终于合作了!!!)

    原文链接(点击原文链接获取更多学习干货):http://blog.bools.cn/archives/1249 ESP8266智能家居的设计 一.前情提要 二.项目功能 1.核心板 2.功能 2.1 ...

  8. 智能家居无线组网遥控电子智能锁

    智能家居无线组网遥控电子智能锁 文章目录 智能家居无线组网遥控电子智能锁 前言 一.需求分析 二.实现功能 1.无线开锁 2.无线开报警灯闪烁 三.解决方案 1.方案考虑 (1).锁具问题 (2).信 ...

  9. 单片机声光电子琴程序流程图_基于单片机的智能家居控制系统毕业设计

    次毕业设计主要包括硬件端和软件端,硬件端功能如下: 使用 DS1302 模块产生时钟数据并实现时间和日历实时显示: 使用 DS18B20 模块检测周围环境温度并实时显示: 使用烟雾和光敏传感器模块对房 ...

最新文章

  1. 一款精品Android手电筒应用
  2. html如何与py_Web项目如何做单元测试?
  3. DNS详解: A记录,子域名,CNAME别名,PTR,MX,TXT,SRV,TTL
  4. 最简单上手的音频处理软件Cool Edit,这些操作你该知道
  5. [Java] 蓝桥杯ADV-135 算法提高 三角形面积
  6. RFC 5961翻译
  7. IOS 获取软件版本号的方法
  8. 微信小程序 import文件大小限制
  9. 项目无法加载nacos配置中心的配置文件问题
  10. GEE批量提取站点DN值—以Landsat 8 C2 SR 产品为例
  11. 机器人开发--二维激光SLAM介绍
  12. 自己实现一个Starter
  13. DBA运维福音:10分钟,一行命令安装Oracle数据库
  14. 揭密 HAP 激光雷达的实际性能表现
  15. 个人免签码支付源码|服务监控模块强大后台功能全面
  16. 全选主元matlab,全选主元高斯-约当法实矩阵求逆及传统方法求逆
  17. Wincc经典版下载
  18. 一个设计低通巴特沃斯数字滤波器的实例
  19. Java的wait()、notify()学习三部曲之一:JVM源码分析
  20. 智慧与智能与AI(自动化)

热门文章

  1. 广西科技大学计算机专业分数,广西科技大学
  2. 观看《辛德勒的名单》后的感想
  3. 如何打造云端新零售数字化平台?
  4. 产品经理需要具备能力
  5. 报告显示,36%“铅衣侠”工作强度超996上班族
  6. 攻防世界 来自银河的信号
  7. 逆向工程师逆向还原APP和代码,国产化就是这样
  8. 拼多多想制作出优质的主图?需了解这六点!
  9. Eureka注册服务后,ip展示不正确,调用失败等问题解决
  10. win10一直正在检查更新_IT之家安卓/iOS版 7.15 更新:手机短信快捷登录/海外用户支持...