首页 单片机红外控制led灯 单片机红外控制发射器设计

单片机红外控制led灯 单片机红外控制发射器设计

举报
开通vip

单片机红外控制led灯 单片机红外控制发射器设计单片机红外控制led灯 单片机红外控制发射器设计 摘 要 随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的遥控系统开始进入了人们的生活。传统的遥控器采用专用的遥控编码及解码集成电路,这种方法虽然制作简单、容易,但由于功能键数及功能受到特定的限制,只实用于某一专用电器产品的应用,应用范围受到限制。而采用单片机进行遥控系统的应用设计,具有编程灵活多样、操作码个数可随便设定等优点。 本设计主要应用了STC89C54单片机作为核心,以NEC红外码为主要识别的操作对象,综合应用了单片机中断系统、定...

单片机红外控制led灯 单片机红外控制发射器设计
单片机红外控制led灯 单片机红外控制发射器 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 摘 要 随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的遥控系统开始进入了人们的生活。传统的遥控器采用专用的遥控编码及解码集成电路,这种方法虽然制作简单、容易,但由于功能键数及功能受到特定的限制,只实用于某一专用电器产品的应用,应用范围受到限制。而采用单片机进行遥控系统的应用设计,具有编程灵活多样、操作码个数可随便设定等优点。 本设计主要应用了STC89C54单片机作为核心,以NEC红外码为主要识别的操作对象,综合应用了单片机中断系统、定时器、计数器等知识,。根据对功能按键的识别,判断出控制操作,来完成整个红外遥控接收、解码、发射的过程。 其优点硬件电路简单,体积小,软件功能灵活,性价比较高等特点,具有较高的的实用和参考价值。 1 关键词:单片机,红外遥控,中断,定时,计数,频率 Abstract With the development of our society and the gradual improvement of science and technology, various kinds of help remote control systems have began to enter people’s life. The traditional remote controllers adopt special remote control code and decode integrated circuits, though this kind of method is simply and easily, it is only the practical application of some certain special electric equipments because of the counted functional keys is counted and the restricted function, so the range of application is limited. But the remote controllers which adopt the microprocessors have many advantages such as flexible operating and unceremonious manipulative keys. The design has used AT89C2051 microprocessor as core, integratively apply the interruptive system, timer , counter ,etc. mainly to design originally and also take the advantage of the infrared light. The remote control launcher distinguishes different operation through the control on frequency of infrared emission of light. The remote control receiver judges control operation by adopting the discerned 2 frequency of the received infrared light to finish the whole launching and receiving course. Its advantage is that the hardware circuit is simple, the software is with perfect function, have certain use and reference value Keywords: Microprocessor, Infrared remote control, Interrupt,Timing,Counting, Frequency 目 录 摘 要 ......................................................................................................................... 2 目 录 ............................................................................................................................... 4 一、功能简 介 ............................................................................................................... 5 二、硬件设计 ............................................................................. 错误~未定义书签。 2.1 硬件设计方 3 案 ................................................................................................ 5 2.2单片机STC89C54及其电 路 ......................................................................... 5 2.3 电源模 块 ........................................................................................................ 6 2.4按键模 块 ......................................................................................................... 7 2.5液晶显示模 块 ................................................................................................. 8 2.6蜂鸣器模 块 ..................................................................................................... 9 2.7红外接收及发射模 块 ................................................................................... 10 2.8 PCB 图................................................................................................... ......10 三、软件开 4 发 .................................................................................................................11 3.1Altium Designer 6开发环 境 ......................................................................... 12 3.2 NEC协 议 ...................................................................................................... 12 3.3主程 序 ........................................................................................................... 14 四、使用说 明 ............................................................................................................. 26 参考文 献 ..................................................................................................................... 30 附 录 ............................................................................................................................. 31 一、功能简介 1、通过红外接收装置和对应功能按键,对矩阵按键中的不 5 同按键实现遥控功能学习; 2、对各按键已经学习的功能进行红外解码,并将8位用户码1+8位用户码2+8位数据码+8位数据反码以16进制数,显示在LCD1602上; 3、通过各独立按键已学习的功能,对外部设备进行红外遥控; 4、在按键及红外接收成功时蜂鸣器有提示音; 二、硬件设计 2.1硬件设计 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 图2-1 2.2单片机STC89C54及其电路 2.2.1单片机STC89C54简介 STC89C54系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍,内部集成MAX810专用复位电路。 2.2.2 STC89C54管脚及封装 2.3电源模块 6 电源模块采用5V供电,主要包括5V圆孔式电源接口,自锁式电源开关,发光二极管电源指示灯等。 电路图如下所示: 图2-2 图2-3 电源指示灯 图2-4 圆孔电源口 图2-5 自锁式开关 2.4矩阵键盘及功能按键模块 矩阵键盘电路如图所示: 功能按键电路如图所示: 图2-6 图2-7 矩阵键盘与功能按键使用时互有联系,单片机首先进行功能按键扫描,若有按键按下,则进入相应按键的中断,进入矩阵键盘的扫描和识别; 4*3矩阵键盘共4行,3列,12个按键,各个按键之间相互独立,每当有按键按下时,通过键盘扫描及键值处理程序,锁定所按下的按键。 按键编码从矩阵键盘的左上角开始,初始时刻,设置键盘的行线(低4位)为低电平,列线(高四位)为高电平,第一次在读状态下检测,列线一定有一位为低电平,第二次再 7 有按键按下时,列信号锁定,并开始逐行扫描,扫描至闭合键所在的行时,按键确定,停止扫描。 2.5 LCD1602液晶显示模块 电路图如下所示: 图2-8 LCD显示电路 本设计采用的是长沙人电子公司的SMC1602A液晶屏,7——14引脚与单片机P0_0——P7_0引脚相连,并连接排阻,RS,RW为读写控制端,电位器可以控制液晶显示屏的亮度,VCC供电。 参数及接口说明: 2.6 蜂鸣器模块 蜂鸣器电路如图所示: 图2-9 蜂鸣器电路起提示作用,在红外接收装置成功接收信号源并保存,或者在按键有效按下时,蜂鸣器会发出提示音,提示相应操作成功,是操作更加清晰。 2.7 红外接收及发射装置 8 红外发射电路 红外接收电路 红外发射装置采用直径为5毫米的红外二极管及其外围电路,二极管经过放大电路与单片机的P2_3端口相连,单片机通过红外二极管将每个按键对应扇区内已学习和解码的码制信息发射出去,控制外部设备; 红外接收装置为金属封装的红外接收头,型号1828t,可以将收到的红外信号转化为数字信号并存储与单片机内,2、3号引脚分别接电源和地,1号引脚为数据传送脚。 图2-10 图2-11 2.8 PCB图 图2-12 三、软件开发 3.1 Altium Designer 6 Altium Designer 是业界首例将设计流程、集成化 PCB 设计、可编程器件(如 FPGA)设计和基于处理器设计的嵌入式软件开发功能整合在一起的产品,一种同时进行PCB和 9 FPGA设计以及嵌入式设计的解决方案,具有将设计方案从概念转变为最终成品所需的全部功能。 特点: 在PCB部分,实现了自动引脚优化和非凡的布线效果,提供了对高密度封装(如 BGA)的交互布线功能, 总线布线功能,器件精确移动,快速铺铜等功能; 在原理图部分,新增加“灵巧粘帖”可以将一些不同的对象拷贝到原理图当中; 在嵌入式设计部分,增强了JTAG器件的实时显示功能,增强型基于FPGA的逻辑分析仪,可以支持32位或64位的信号输入。 3.2 NEC协议 特征: 8位地址码,8位命令码 完整发射两次地址码和命令码,第二次均为反码,提高可靠性 脉冲时间长短调制方式 38kHz载波频率 位时间1.12ms或者2.25ms 图 10 3-1 调制: NEC协议根据脉冲时间长短解码,每个脉冲时间为560us长的38kHZ载波(约21个载波周期)。逻辑“1”脉冲时间为2.25ms,逻辑“0”脉冲时间为1.12ms。推荐的载波周期为1/4或1/3。 协议: 图3-2 上图为NEC脉冲的典型脉冲链。协议规定低位首发先送,如上图所示的情况,发送的地址码为”59”,命令码为”16”。每次发送的信息首先是用于调整红外接收器增益的9msAGC(自动增益控制)高电平脉冲,接着是4.5ms的低电平,接下来便是地址码和命令码。地址码和命令码发送两次,第二次发送的是反码(如:11110000的反码为00001111),用于验收接收信息的准确性。因为每位都发射一次反码,所以总体的发送时间是恒定的(即每次发送时,无论是1还是0,发送时间都是它及它的反码发送时间的总和)。这种以发送反码验证可靠性的手段,可以扩展地址码和命令码为16位,这样可以扩展整个系统的命令容量。 即使一直按住按键,一串信息只能发送一次,发送的是以110ms 11 为周期的 重复码,重复码是由9ms的AGC高电平和4.5ms的低电平及一个560us的高电平组成。 图3-3 3.3主程序: 图3-4 110ms循环码 #include #include “LCD1602.h” #include “EEPROM.h” #define uchar unsigned char #define uint unsigned int #define KEY_OUT P1 sbit KEY_send=P2 ; sbit KEY_code=P2 ; sbit KEY_study=P2 ; sbit BEEP = P2 ; sbit IR_T=P2 ; sbit IR_R=P3 ; 12 uchar KEY_H_scan,KEY_V_check,KEY_value; uchar KEY_temp; uchar KEY; uchar KEY_flag; uchar KEY_send_f; uchar KEY_code_f; uchar KEY_study_f; uchar LCD1602key[2]; uchar LCD1602temp[8]; uint EPROM_add; uchar EPROM_temp[4]; static bit IR_send_op; static uint IR_send_time; static uint IR_send_endtime; static uchar IR_send_flag; uchar IR_send_code[4]; uchar IR_receive_time; 13 uchar IR_receive_flag; uchar IR_receive_data[33]; uchar IR_receive_bit; uchar IR_receive_OK; uchar IR_receive_code[4]; uchar IR_receive_end; void Delay1ms(uint i) { uchar j; while(i--) { for(j=0;j{ ; } } } void EEPROM_read(uint R_add,uchar *R_dat) { uchar i; for(i=0;i{ *R_dat=Byte_Read(R_add); R_add++; 14 R_dat++; } } void EEPROM_write(uint W_add,uchar *W_dat) { uchar i,edat; Sector_Erase(W_add); for(i=0;i{ edat=*W_dat; Byte_Program(W_add,edat); W_add++; W_dat++; } } void time0(void) interrupt 1 { TH0=0xFF; TL0=0xE6; IR_send_time++; if(IR_send_flag==1) { 15 IR_send_op=~IR_send_op; } else { IR_send_op=1; } IR_T=IR_send_op; } void IR_send_init(void) { IR_send_time=0; IR_send_flag=0; IR_send_op=1; IR_T=1; EA=1; TMOD=0x11; ET0=1; TH0=0xFF; TL0=0xE6; TR0=1; } 16 void IR_send_data(uchar *p_irdata) { uchar i,j; IR_send_endtime=223; IR_send_flag=1; IR_send_time=0; do{}while(IR_send_timeIR_send_flag=0; IR_send_time=0; do{}while(IR_send_time{ for(i=0;i{ IR_send_endtime=10; IR_send_flag=1; IR_send_time=0; do{}while(IR_send_time{ IR_send_endtime=41; } else { IR_send_endtime=15; } IR_send_flag=0; 17 IR_send_time=0; do{}while(IR_send_time>1; } p_irdata++; } IR_send_endtime=10; IR_send_flag=1; IR_send_time=0; do{}while(IR_send_timeIR_T=1; TR0=0; ET0=0; EA=0; } void IR_receive_init(void) { IR_receive_time=0; IR_receive_flag=0; IR_receive_bit=0; IR_receive_OK=0; IR_receive_end=0; 18 TMOD=0x20; TH1=0x00; TL1=0x00; ET1=1; EA=1; TR1=1; } void int1init(void) { IT1=1; EX1=1; EA=1; } void time1(void) interrupt 3 { IR_receive_time++; } void int1() interrupt 2 { 19 if(IR_receive_flag) { if(IR_receive_time>32&&IR_receive_timeIR_receive_bit= 0; } IR_receive_data[IR_receive_bit]=IR_receive_time; IR_receive_time=0; IR_receive_bit++; if(IR_receive_bit==33) { IR_receive_bit=0; IR_receive_OK=1; } } else { IR_receive_flag=1; IR_receive_time=0; } } void IR_code(void) 20 { uchar k,i,j,value; k=1; for(j=0;j{ for(i=0;i{ value=value>>1; if(IR_receive_data[k]>6) { value=value|0x80; } k++; } IR_receive_code[j]=value; } IR_receive_end=1; void IntToStr(uchar k,uchar *buf) { uchar i,j, a[2]; a[0]=(k/10)%10; a[1]=(k/1)%10; for(i=0; i } void HtoStr(uchar *buf,uchar *dis) { uchar i,DH,DL; 21 for(i=0;i{ DL=*buf&0x0F; DH=*buf>>4; if(DH>9) { *dis=DH+0x37;} else { *dis=DH+0x30;} dis++; if(DL>9) { *dis=DL+0x37;} else { *dis=DL+0x30;} dis++; buf++; } } void SET_KEY_choose(void) { if(KEY_send==0) { Delay1ms(30); 22 if(KEY_send==0) { KEY_send_f=1; KEY_code_f=0; KEY_study_f=0; GotoXY(0,0); Print(“ IR KEY Send “); GotoXY(0,1); Print(“KEY--:-------- H”); } } if(KEY_code==0) { Delay1ms(30); if(KEY_code==0) { KEY_code_f=1; KEY_send_f=0; KEY_study_f=0; IR_receive_init(); int1init(); GotoXY(0,0); Print(“ IR KEY code “); GotoXY(0,1); Print(“ -------- H “); 23 } } if(KEY_study==0) { Delay1ms(30); if(KEY_study==0) { KEY_study_f=1; KEY_code_f=0; KEY_send_f=0; TR1=0; ET1=0; EX1=0; EA=0; GotoXY(0,0); Print(“ IR KEY Study “); GotoXY(0,1); Print(“KEY--:-------- H”); } } } uchar keyscan(void) 24 { KEY_OUT=0xf0; KEY_V_check=KEY_OUT&0xf0; if(KEY_V_check!=0xf0){ Delay1ms(30); KEY_V_check=KEY_OUT&0xf0; if(KEY_V_check!=0xf0){ KEY_flag=1; KEY_H_scan=0xfe; while((KEY_H_scan&0x10)!=0){ KEY_OUT=KEY_H_scan; KEY_V_check=KEY_OUT&0xf0; if(KEY_V_check!=0xf0){ KEY_value=(~KEY_H_scan)+(~(KEY_V_check|0x0f)); return(KEY_value); } else KEY_H_scan=(KEY_H_scan} } } return(0x00); } void KEY_choose(uchar tmp) 25 { switch(tmp){ case 0x11: KEY=1; EPROM_add=flash_1; break; case 0x21: KEY=2; EPROM_add=flash_2; break; case 0x41: KEY=3; EPROM_add=flash_3; break; case 0x12: KEY=4; EPROM_add=flash_4; break; case 0x22: KEY=5; EPROM_add=flash_5; break; case 0x42: KEY=6; EPROM_add=flash_6; break; case 0x14: KEY=7; EPROM_add=flash_7; 26 break; case 0x24: KEY=8; EPROM_add=flash_8; break; case 0x44: KEY=9; EPROM_add=flash_9; break; case 0x18: KEY=10; EPROM_add=flash_10; break; case 0x28: KEY=11; EPROM_add=flash_11; break; case 0x48: KEY=12; EPROM_add=flash_12; break; default: break; } } void beep() { unsigned char i; 27 for (i=0;i{ Delay1ms(1); BEEP=!BEEP; } BEEP=1; } void IntToStr(uchar k,uchar *buf) { *buf[0]=KEY/10+’0’; *buf[1]=KEY%10+’0’; } void main(void) { LcdRs=0; LcdRw=0; LcdEn=0; P0=0x00; IR_T=1; KEY_send=1; KEY_code=1; KEY_study=1; 28 KEY_flag=0; KEY_send_f=1; KEY_code_f=0; KEY_study_f=0; LCD1602_init(); GotoXY(0,0); Print(“ IR KEY Send “); GotoXY(0,1); Print(“KEY--:-------- H”); while(1) { SET_KEY_choose(); if(KEY_send_f==1) { TR1=0; ET1=0; EX1=0; EA=0; KEY_temp=keyscan(); KEY_choose(KEY_temp); if(KEY_flag==1) 下 29 { KEY_flag=0; EEPROM_read(EPROM_add,&EPROM_temp[0]); IR_send_init(); IR_send_data(&EPROM_temp[0]); EEPROM_read(EPROM_add,&EPROM_temp[0]); IntToStr(KEY,&LCD1602key[0]); HtoStr(&EPROM_temp[0],&LCD1602temp[0]); LCD1602_Print(3,1,&LCD1602key[0]); LCD1602_Print(6,1,&LCD1602temp[0]); beep(); } } if(KEY_code_f==1) { if(IR_receive_OK==1) { IR_receive_OK=0; IR_code(); } if(IR_receive_end==1) 30 { IR_receive_end=0; TR1=0; ET1=0; EX1=0; EA=0; HtoStr(&IR_receive_code[0],&LCD1602temp[0]); LCD1602_Print(3,1,&LCD1602temp[0]); beep(); IR_receive_init(); int1init(); } } if(KEY_study_f==1) { } } } KEY_temp=keyscan(); KEY_choose(KEY_temp); if(KEY_flag==1) { KEY_flag=0; 31 IntToStr(KEY,&LCD1602key[0]); LCD1602_Print(3,1,&LCD1602key[0]); GotoXY(6,1); Print(“--------”); IR_receive_init(); int1init(); } if(IR_receive_OK==1) { IR_receive_OK=0; IR_code(); } if(IR_receive_end==1) { IR_receive_end=0; TR1=0; ET1=0; EX1=0; EA=0; EEPROM_write(EPROM_add,&IR_receive_code[0]); HtoStr(&IR_receive_code[0],&LCD1602temp[0]); LCD1602_Print(6,1,&LCD1602temp[0]); beep(); } 四、使用说明 1、程序烧录 连接串口线,如图所示,使用STC-ISP软件,将程序下载至 单片机中; 图4-1 2、红外学习 按第一个功能键,显示“IR_KEY STUDY”,再从1--12按键 32 中选择一个按 下,则此时该按键处于等待学习状态;如图: 使用外部遥控装置对本装置遥控,外部红外信号传来,蜂鸣器响,先前按 下的按键则学习其功能,并将码值按NEC协议存储至相应扇区; 图 4-2 按下第二个功能按键,显示“IR KEY CODE”,进入解码功能,再次按 下同一个按键,则显示之前解码的红外编码的NEC码值(8位地址码+8位地址 码反码+8位数据吗+8位数据码反码);如图: 图4-3 按下第三个功能键,显示“IR FEY SEND”,进入发射功能,将本装置 对准原被遥控设备,按下相同按键,蜂鸣器响,则可以与原遥控器产生相同的 33 遥控效果,可以遥控对象设备(如:经过对VCD遥控器学习之后,可以与VCD 遥控器一样,遥控VCD机)如图: 图4-4 参考文献 [1] 张肃文. 高频电子线路(第五版).北京:高等教育出版社,2009. [2] 邱关源,罗先觉. 电路(第五版).北京:高等教育出版社,2006. [3] 李湘闽,唐宏,葛继.学习型红外遥控器.红外.2004,11(8):33,36 [4] 杨恢先,王子菡,杨穗,陶霞. 一种基于单片机的红外遥控软件解码 方法. 自动化与仪器仪表.2004,22(2):16,18 [5] 胡汉才.单片机原理及系统设计.北京:清华大学出版社.2002,254, 258 [6] 严后选,孙健国等. 无线红外智能遥控器的设计. 测控 34 技 术.2003.22(3):54,56 附录 电路原理图 百度搜索“就爱阅读”,专业资料,生活学习,尽在就爱阅读网 92to.com,您的在线图书馆 35
本文档为【单片机红外控制led灯 单片机红外控制发射器设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_079973
暂无简介~
格式:doc
大小:55KB
软件:Word
页数:29
分类:生活休闲
上传时间:2017-11-24
浏览量:69