历史上的今天
返回首页

历史上的今天

今天是:2024年12月15日(星期日)

2021年12月15日 | 单片机ESP8266智能家居的红外遥控设计

2021-12-15 来源:eefocus

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

在这里插入图片描述

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

在这里插入图片描述

实验参考C语言代码

#include “stc12c2052ad.h”

#include “wifi_IR.h”


#include


//#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();


}

推荐阅读

史海拾趣

B&B Electronics Manufacturing Company公司的发展小趣事

在国内市场取得一定成绩后,B&B公司开始将目光投向国际市场。通过参加国际电子展会、建立海外销售网络等方式,公司逐渐打开了国际市场的大门。其产品以高品质和可靠性赢得了海外客户的信赖,为公司的进一步发展奠定了坚实的基础。

Carlo Gavazzi公司的发展小趣事

Carlo Gavazzi公司由加瓦齐家族在1931年创立,最初可能只是一个小规模的电气公司。然而,凭借创始人对技术的深刻理解和前瞻性的市场洞察力,公司迅速在行业中崭露头角。在随后的几十年里,公司不断扩展业务范围,逐步建立起自己在电气和电子领域的地位。

Delock公司的发展小趣事

随着公司规模的扩大和产品线的丰富,Delock公司开始积极拓展国际市场。公司先是在欧美等发达国家设立了办事处和分销中心,随后又逐步进入亚洲、非洲等新兴市场。为了更好地满足全球用户的需求,Delock公司还针对不同地区的市场特点进行产品定制和营销策略的调整。这一系列的全球化战略让Delock公司的产品在全球范围内获得了广泛的认可和应用。

Cornerstone Sensors公司的发展小趣事

Cornerstone Sensors公司成立于电子行业的蓬勃发展时期。创立初期,公司就明确了以传感器技术为核心的发展方向。公司聚集了一批优秀的工程师和科学家,致力于研发高精度、高稳定性的传感器产品。经过数年的技术积累和产品研发,Cornerstone Sensors逐渐在传感器领域崭露头角,其产品质量和技术水平得到了行业的广泛认可。

Bipolarics Inc公司的发展小趣事

在市场竞争日益激烈的背景下,Bipolarics Inc意识到单打独斗难以取得长久发展。于是,公司开始积极寻求与其他企业的战略合作。通过与一家知名的芯片制造商合作,Bipolarics Inc成功将其双极性晶体管技术应用于更广泛的领域,进一步提升了产品的竞争力。同时,这种合作也带来了双方在技术研发和市场推广方面的资源共享,推动了双方的共同发展。

登丰微(GSTEK)公司的发展小趣事

歌普电子不仅注重产品的品质和技术创新,还非常重视客户服务。公司始终秉承“用心服务”的理念,为客户提供全方位的售前、售中和售后服务。无论是产品咨询、技术支持还是售后保障,歌普都能迅速响应并满足客户的需求。这种高效、专业的服务赢得了客户的高度评价和信赖,也为公司的持续发展奠定了坚实的基础。

问答坊 | AI 解惑

5口以太网交换机原理图

哥们今天刚按照实物反推出的,主芯片为DM9081的5口以太网交换机原理图.PROTEL99SE格式. [ 本帖最后由 西门 于 2009-5-12 18:31 编辑 ]…

查看全部问答>

关于OP07

哪位可以给我讲讲这电路上面的二极管是什么作用啊,特别是为什么要在OP07反馈和输出端加上IN4148…

查看全部问答>

一种用N+1条线实现矩阵键盘的方法

键盘输入作为最常用的输入设备仍有其不可替代的作用。下面首先对传统键盘作一个简单的介绍。 (1)传统键盘的介绍键盘的结构通常有两种形式:线性键盘和矩阵键盘。在不同的场合下,这两种键盘均得到了广泛的应用。线性键盘由若干个独立的按键组成, ...…

查看全部问答>

Platform Builder 4.2中自带的S3C2410BSP可以用于S3C2440么?

Platform Builder 4.2中自带的S3C2410 BSP可以用于S3C2440么? 或者哪里有下载用于S3C2440 BSP for PB4.2的?…

查看全部问答>

我做了一块485通讯板子,帮我看看?

     专业做单片机软硬件开发                地址:哈尔滨市 南岗区 会展中心             ...…

查看全部问答>

学习之MSP430中断

中断是MSP430微处理器的一大特色,有效地利用中断可以简化程序和提高执行效率。 MS430 的中断比较多,几乎每个外围模块都能够产生中断。MSP430 可以在没有事件发生时进入低功耗状态,事件发生时,通过中断唤醒CPU ,事件处理完毕后,CPU 再次进 ...…

查看全部问答>

请教:TI的M4单片机中的自带ROM里的程序是出厂就烧制好的吗?

用户自己能不能更改这个ROM内容,或者供用户使用?…

查看全部问答>

UDA1341驱动问题

有人用FPGA驱动过UDA1341吗?UDA1341芯片的L3MODE,L3CLOCK.L3DATA三个信号引脚对AD,DA有影响吗?…

查看全部问答>

ADuC7061中断方式实现串口通信

/******************************* * name: * function: * return: ********************************/ #include \"string.h\" #include \"global.h\" #include \"function.h\" #include #include unsigned char UartDataRecevice; un ...…

查看全部问答>

有人熟悉这块单片机板子么?Inter 8086的

在大四毕业季后,俺和同学去淘学长们遗留的“废品”。得此物,一查PDF,什么上世纪70年代的PDF,板子上印的是2009年做的。茫然呀…

查看全部问答>