历史上的今天
今天是: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(); }
上一篇:单片机74LS138应用
史海拾趣
|
哥们今天刚按照实物反推出的,主芯片为DM9081的5口以太网交换机原理图.PROTEL99SE格式. [ 本帖最后由 西门 于 2009-5-12 18:31 编辑 ]… 查看全部问答> |
|
键盘输入作为最常用的输入设备仍有其不可替代的作用。下面首先对传统键盘作一个简单的介绍。 (1)传统键盘的介绍键盘的结构通常有两种形式:线性键盘和矩阵键盘。在不同的场合下,这两种键盘均得到了广泛的应用。线性键盘由若干个独立的按键组成, ...… 查看全部问答> |
|
Platform Builder 4.2中自带的S3C2410BSP可以用于S3C2440么? Platform Builder 4.2中自带的S3C2410 BSP可以用于S3C2440么? 或者哪里有下载用于S3C2440 BSP for PB4.2的?… 查看全部问答> |
|
中断是MSP430微处理器的一大特色,有效地利用中断可以简化程序和提高执行效率。 MS430 的中断比较多,几乎每个外围模块都能够产生中断。MSP430 可以在没有事件发生时进入低功耗状态,事件发生时,通过中断唤醒CPU ,事件处理完毕后,CPU 再次进 ...… 查看全部问答> |
|
/******************************* * name: * function: * return: ********************************/ #include \"string.h\" #include \"global.h\" #include \"function.h\" #include #include unsigned char UartDataRecevice; un ...… 查看全部问答> |
|
在大四毕业季后,俺和同学去淘学长们遗留的“废品”。得此物,一查PDF,什么上世纪70年代的PDF,板子上印的是2009年做的。茫然呀… 查看全部问答> |




