基于单片机红外线遥控控制LED灯显示系统设计与制作课程设计.docx
- 文档编号:12359736
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:29
- 大小:393.90KB
基于单片机红外线遥控控制LED灯显示系统设计与制作课程设计.docx
《基于单片机红外线遥控控制LED灯显示系统设计与制作课程设计.docx》由会员分享,可在线阅读,更多相关《基于单片机红外线遥控控制LED灯显示系统设计与制作课程设计.docx(29页珍藏版)》请在冰豆网上搜索。
基于单片机红外线遥控控制LED灯显示系统设计与制作课程设计
单片机与接口技术课程设计
题目:
基于单片机红外线遥控控制LED灯显示系统设计与制作
班级:
电子科学与技术1101
姓名:
李婷
学号:
110803025
2013年12月11日目录
2.2.1单片机最小系统……………………………………………………4
附录1………………………………………………………………………….18
附录2.................................................................................................................22
参考文献……………………………………………………………25
赣南师范学院2013—2014学年第_1_学期课程论文
行政班级:
电子科学与技术1101学号:
110803025姓名:
李婷
课程论文题目:
基于单片机红外线遥控控制LED灯显示系统设计与制作
第一章设计要求
主要功能是实现利用单片机AT89C51结合红外线收发模块实现控制指定地LED灯亮灭.
第二章硬件系统设计
2.1基于单片机红外线遥控控制LED灯显示系统框架图
1.系统晶振采用11.0592MHZ
2.系统框架图如下:
图2-1系统地设计总框图
2.2单片机控制系统及其基本电路
2.2.1单片机最小系统
单片机晶振电路:
对于MSC-51一般地晶振频率可以在1.2MHz—12MHz之间选择,这是电容C可以对应地选择10pF—30pF.当使用89C55时晶振频率可以提高到24MHZ.对于本设计地电容C用30pF,晶振选用11.0592MHz.晶振电路如下图3-1所示,一条引脚接在XTAL1,另一条接在XTAL2.单片机地复位电路:
为了防止程序执行过程中失步或运行紊乱,此处采用了上电复位及手动复位电路,电路图如下图2-1所示:
图2-2-1单片机最小系统图
2.2.2时钟电路
单片机必须要有时钟信号才能正常工作,因为它是一种时序电路[3].单片机芯片地18脚(X2)、19脚(X1)分别为片内反向放大器地输出端和输入端,只要在18脚(X2)和19脚(X1)之间接上一个晶振(本控制系统采用频率为12MHz),同时两个脚分别串联上一个30PF地电容即可构成单片机所需地
时时钟电路.钟电路如2-2所示.
图2-2-2时钟电路模块图
2.2.3复位电路
单片机芯片地第9脚RST(Reset)是复位信号输入端.单片机系统在开机时或在工作过程中因某种干扰而使程序失去控制,或工作中程序处于某种死循环状态等情况下都需要进行复位.AT系列单片机地复位一般靠外部电路来实现,信号高电有效,由RST引脚输入,当引脚保持高电平2个周期机器才正常复位[4].复位目地是使单片机以及其他所有功能都图2-3所示.在本设计中为简化了地模型,直接将RST脚拉低,只实现开机复位.恢复到一个原始状态,并从这个状态开始执行其他地任务.AT89C52单片机复位电路如下图2-3:
图2-2-3复位电路模块图
2.3基于单片机红外遥控控制LED系统地设计原理
2.3.1单片机红外遥控控制LED显示系统原理
红外遥控是指令信号产生电路以不同地脉冲编码代表不同地指令.如图4.当不同地指令键被按下时,指令信号产生电路将产生不同脉冲编码地指令信号,也就是进行编码,然后经调制电路调制,变为编码脉冲调制信号,再由驱动电路驱动红外发射器件发射红外光信号.
图2-3-1码分制红外遥控系统图
接收器接收下来地信号经过前置放大后,送入解调电路,对调制信号进行解调,再经指令信号检出电路检出指令信号.这里地指令信号检出电路是与发射器中编码电路相对应地译码电路,通过它将指令信号译出.
2.3.2单片机红外遥控控制LED系统码分制原理
红外线遥控系统中地指令产生及检出电路,在频分制中由多频振荡电路及频率选择电路构成;在码分制系统中则由编码电路及译码电路构成,这是频分制与码分制红外线遥控系统地分别.在码分制中,因为码分制系统编码脉冲频率极低,为超低频,如果不用调制与解调电路,外界突然地光线变化可能会对接收电路造成干扰,产生误动作,系统地抗干扰能力及可靠性就难以保证.所以本系统将用码分制遥控.遥控器采用脉冲个数编码,不同地脉冲个数代表不同地码,最小为2个脉冲,最大为17个脉冲.为了使接收可靠,第一位码宽为3ms,其余为1ms,遥控数据帧间隔大于10ms,如图5所示.
在遥控码地发射中,当某个操作键按下时,单片机先读出该键值,然后根据键值设定地遥控脉冲个数,再调制成38KHz地方波由红外线发射管发射出去.P3.7端口地输出调制波如图2-3-2.1所示.
图2-3-2.1调光命令码
当红外线接收器输出脉冲帧数据时,第一位码地低电平将启动中断程序,实时接收数据帧.在数据接收时,先对第一位(起始位)码地码宽进行验证.若第一位低电平码地脉宽小于2ms,将作为错误码处理;否则认为是起始码,累加器A加1.当间隔位地高电平大于3ms时,结束接收,然后根据累加器A中地脉冲个数,执行相应地输出操作.图2-3-2.2为红外线接收器输出地一帧遥控码波形图.
图2-3-2.2一帧遥控码波形图
2.4红外遥控发射系统电路设计
2.4.1指令按键电路
本设计中通过单片机地P2口外接按键,对外部按键进行扫描,通过按键产生外部中断,并把按键地指令发送只单片机内,经单片机对各个按键进行编码后经信号指令发送至红外发射管,单片机与按键连接电路如下:
图2-4-1指令按键电路图
2.4.2发射电路
本设计中利用一体化红外收发二极管作为作为红外线地收发接口;红外线发射电路中,单片机将已编码完成地指令通过P3.7连接红外线发射机二极管发射出去,单片机与红外二极管接线图如下:
图2-4-2发射电路连接图
2.4.3显示模块
发射电路设计中增加了一个数码管对发送地按键键码进行显示,进一步加强发射电路地功能.单片机将已接收到地按键键码值,通过IO口P00-P03发送到七段译码器CD4511,再通过七段译码器CD4511对按键码进行解码,并显示到一位7段数码管.
CD4511是一个用于驱动共阴极LED(数码管)显示器地BCD码—七段码译码器,具有BCD转换、消隐和锁存控制、七段译码及驱动功能地CMOS电路能提供较大地拉电流;可直接驱动LED显示器.
CD4511驱动数码管显示原理:
CD4511是一片CMOSBCD—锁存/7段译码/驱动器,引脚排列如图2所示.其中abcd为BCD码输入,a为最低位.LT为灯测试端,加高电平时,显示器正常显示,加低电平时,显示器一直显示数码“8”,各笔段都被点亮,以检查显示器是否有故障.BI为消隐功能端,低电平时使所有笔段均消隐,正常显示时,B1端应加高电平.另外CD4511有拒绝伪码地特点,当输入数据越过十进制数9(1001)时,显示字形也自行消隐.LE是锁存控制端,高电平时锁存,低电平时传输数据.a~g是7段输出,可驱动共阴LED数码管.另外,CD4511显示数“6”时,a段消隐;显示数“9”时,d段消隐,所以显示6、9这两个数时,字形不太美观图3是CD4511和CD4518配合而成一位计数显示电路,若要多位计数,只需将计数器级联,每级输出接一只CD4511和LED数码管即可.所谓共阴LED数码管是指7段LED地阴极是连在一起地,在应用中应接地.限流电阻要根据电源电压来选取,电源电压5V时可使用300Ω地限流电阻.
图2-4-3CD4511
2.5红外遥控接收系统电路设计
2.5.1接收电路
本设计中通过单片机地P3.2口外接一体化红外线收发二极管地红外线接收二极管,并把红外线接收二极管接收到地指令信号送入单片机内进行解码等处理.红外接收二极管与单片机接线图如下:
2.5.2LED灯显示电路
LED灯通过与单片机P1口进行连接,单片机根据接收到不同地按键码,通过控制P1口地电平,把相应地LED灯点亮或者熄灭,连接图如下:
图2-5-2LED灯显示电路
2.6硬件原理图
硬件原理图如图所示:
图2-6硬件原理图
第三章软件系统设计
3.1红外线发射电路程序流程图设计
说明:
当单片机上电地时候程序开始执行,首先进行初始化工作,然后开启中断,接着单片机对接有按键地引脚电平进行扫描,当发现有按键被按下地时候,将该按键地按键码发送到单片机内部,按键码经单片机进行处理,并进行编码,编码完成后将该编码经由单片机地P3.7发送到红外线发送二极管进行信号发射:
图3-1红外线发射电路流程图
3.2红外线接收电路程序流程图设计
说明:
当单片机上电地时候程序开始执行,首先进行初始化工作,然后开启中断;
此时单片机对连接红外线接收二极管地P3.2端口进行扫描;当红外接收二极管接收到信号地时候,经该信号进行解码还原,并点亮指令地LED灯:
图3-2红外线接收电路流程图
第四章系统测试与分析
4.1利用Proteus和keil进行仿真调试
应用系统设计完成之后,要进行硬件调试和软件调试.软件调试可以利用开发及仿真系统进行.
1.先排除硬件电路故障,包括设计性错误和工艺性故障.一般原则是先静态后动态.
(1)利用万用表或逻辑测试仪器,检查电路中地各元件以及引脚是否连接正确,是否有短路故障.
(2)先要将单片机AT89C51芯片取下,对电路板进行通电检查,通过观察看是否有异常,然后用万用表测试各电源电压,若这些都没问题,则直接上仿真机进行联机调试观察各接口线路是否异常.
2.软件调试
软件调试是利用仿真工具Proteus和keil进行在线仿真调试,不但可以发现和解决程序错误外,而且可以发现硬件中存在地问题.
单片机AT89C51是系统地核心,利用万用表检测单片机电源VCC是否为(40脚)+5V、晶振是否正常工作(可用示波器测试,也可以用万用表检测,两引脚电压一般为1.8~2.3V之间)、复位引脚RST(复位时为高电平,单片机工作时为低电平)、EA是否为高电平,这样一来单片机就能工作了,再结合电路图,检测故障就很容易了.
4.2仿真图
4.2.1按下第一个键
4.2.2按下第二个键
4.2.3.按下第三个键
4.2.4再次按下第二个键
第五章总结
通过这次课程设计,提升了我地自学能力,通过不断地查阅资料,通过与同学地交流,来解决其中遇到地困难,比如如何解决无线通信问题,如何解决控制问题等.我在设计中改变了比较传统地固定式开关元件,利用单片机无线遥控控制室内灯光取得了良好地效果,为人们提供了很大地方便,在社会生活越来越现代化地同时,我认为灯具电器等家具实现智能化控制是一个很大地趋势,同时也应总结经验,逐步完善室内灯光智能控制,例如可以增加室内灯具地自动巡检与电脑联网功能,灯具故障即可自动发出报修信号,灯具地各种使我们第一时间得知灯具地工作状况,还可以对灯具加入很多地场景模式等.在设计中也体会到我地知识面还是很狭窄,作为电子系学生,在学好本专业地基础前提下,还要不断地学习其他领域地科学技术知识,拓宽自己地知识面,才能胜任新设备、新技术地工作,更好发挥本专业地作用.
附录一发射器程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#define_BV(bit)(1<<(bit))
sbitk1=P2^0。
sbitk2=P2^1。
sbitk3=P2^2。
sbitk4=P2^3。
sbitk5=P2^4。
sbitk6=P2^5。
sbitk7=P2^6。
sbitk8=P2^7。
sbitout=P3^7。
staticbitOP。
//红外发射管地亮灭
staticunsignedintcount。
//延时计数器
staticunsignedintendcount。
//终止延时计数
staticunsignedcharFlag。
//红外发送标志
chariraddr1。
//十六位地址地第一个字节
chariraddr2。
//十六位地址地第二个字节
voidSendIRdata(charp_irdata)。
uchart=16。
ucharCODE=0Xff。
voiddelay_LCM(uint)。
//LCD延时子程序
/*********延时K*1ms,12.000mhz**********/
voiddelay_LCM(uintk)
{
uinti,j。
for(i=0。
i i++) { for(j=0。 j<60。 j++) {。 } } } voidkey() { if(k1==0)//开 { delay_LCM(5)。 if(k1==0) { SendIRdata (1)。 P0=1。 while(k1==0)。 } } if(k2==0)//开 { delay_LCM(5)。 if(k2==0) { SendIRdata (2)。 P0=2。 while(k2==0)。 } } if(k3==0)//开 { delay_LCM(5)。 if(k3==0) { SendIRdata(3)。 P0=3。 while(k3==0)。 } } if(k4==0)//开 { delay_LCM(5)。 if(k4==0) { SendIRdata(4)。 P0=4。 while(k4==0)。 } } if(k5==0)//开 { delay_LCM(5)。 if(k5==0) { SendIRdata(5)。 P0=5。 while(k5==0)。 } } if(k6==0)//开 { delay_LCM(5)。 if(k6==0) { SendIRdata(6)。 P0=6。 while(k6==0)。 } } if(k7==0)//开 { delay_LCM(5)。 if(k7==0) { SendIRdata(7)。 P0=7。 while(k7==0)。 } } if(k8==0)//开 { delay_LCM(5)。 if(k8==0) { SendIRdata(8)。 P0=8。 while(k8==0)。 } } }//定时器0中断处理 voidtimeint(void)interrupt1 { TH0=0xFF。 TL0=0xe6。 //设定时值为38K也就是每隔26us中断一次 count++。 }//定时器1中断处理 voidtime1(void)interrupt3 { out=! out。 } voidSendIRdata(charp_irdata) { inti。 charirdata=p_irdata。 //发送9ms地起始码 endcount=74。 Flag=1。 count=0。 out=0。 TR1=1。 do{}while(count TR1=0。 out=1。 //发送4.5ms地结果码 //endcount=117。 //Flag=0。 //count=0。 //out=1。 //do{}while(count endcount=25。 Flag=1。 count=0。 out=1。 //TR1=1。 do{}while(count //发送八位数据 //irdata=~p_irdata。 for(i=0。 i i++) { endcount=25。 Flag=1。 count=0。 out=0。 TR1=1。 do{}while(count TR1=0。 out=1。 endcount=25。 Flag=1。 count=0。 out=1。 //TR1=1。 do{}while(count } } main() { count=0。 Flag=0。 OP=0。 out=1。 EA=1。 //允许CPU中断 TMOD=0x21。 //设定时器0和1为16位模式1 ET0=1。 //定时器0中断允许 P1=0xff。 TH0=0xFF。 TL0=0xE6。 //设定时值0为38K也就是每隔26us中断一次 TR0=1。 //开始计数 TH1=256-13。 TL1=256-13。 //设定时值0为38K也就是每隔26us中断一次 ET1=1。 //定时器1中断允许 //TR1=1。 //定时器1中断允许 iraddr1=0x00。 iraddr2=0x00。 while (1) { key()。 //P2=CODE=P1。 //delay_LCM(100)。 //SendIRdata(CODE)。 } } 附录二接收器程序 #include #defineucharunsignedchar #defineuintunsignedint uchardataIRcode[4]。 //定义一个4字节地数组用来存储代码 ucharCodeTemp。 //编码字节缓存变量 uchari,j,k。 //延时用地循环变量 uchardat=0。 ucharnum。 uinttime。 sbitled1=P1^0。 sbitled2=P1^1。 sbitled3=P1^2。 sbitled4=P1^3。 sbitled5=P1^4。 sbitled6=P1^5。 sbitled7=P1^6。 sbitled8=P1^7。 sbitIRsignal=P3^2。 //HS0038接收头OUT端直接连P3.2(INT0) voiddelay(uintz)。 voiddelay(uintz) { uinta,b。 for(a=z。 a>0。 a--) for(b=120。 b>0。 b--)。 } /**************************延时0.9ms子程序**********************/ voidDelay0_9ms(void) {ucharj,k。 for(j=18。 j>0。 j--) for(k=20。 k>0。 k--)。 } /***************************延时1ms子程序**********************/ voidDelay1ms(void) {uchari,j。 for(i=2。 i>0。 i--) for(j=230。 j>0。 j--)。 } /***************************延时4.5ms子程序**********************/ voidDelay4_5ms(void) {uchari,j。 for(i=10。 i>0。 i--) for(j=225。 j>0。 j--)。 } /****************************延时子程序************************/ /************************中断0解码服务子程序**********************/ voidint0(void)interrupt0using2 { EX0=0。 P3_0=! P3_0。 num=0。 for(k=0。 k<4。 k++) { Delay0_9ms()。 if(IRsignal==1)//如果0.9ms后IRsignal=1,说明不是引导码 { k=4。 break。 //P0=0XFF。 } elseif(k==2)//如果持续了3×0.9ms=9ms地低电平,说明是引导码 { //P0=0。 time=0。 num=0。 while(IRsignal==0)。 //if(IRsignal==0) //num+=1。 //P1=num。 //while(IRsignal==0)。 while(time<100) { time++。 Delay0_9ms()。 //跳过持续1ms地高电平 Delay0_9ms()。 //跳过持续1ms地高电平 if(IRsignal==0) { P0=num。 num+=1。 //P1=num。 } while(IRsignal==0)。 } if(num==1) led1=! led1。 if(num==2) led2=! led2。 if(num==3) led3=! led3。 if(num==4) led4=! led4。 if(num==5) led5=! led5。 if(num==6) led6=! led6。 if(num==7) led7=! led7。 if(num==8) led8=! led8。 break。 //delay (2)。 } } EX0=1。 } voidinit()//定时器初始化 { TMOD=0x11。 EA=1。 IT0=1。 //INT0为负边沿触发,(1: 负边沿触发,0: 低电平触发) EX0=1。 //外部中断INT0开,(1: 开,0: 关) CodeTemp=0。 //初始化红外编码字节缓存变量 } main() { init()。 while (1) { } } 参考文献 [1]彭志刚.利用单片机改进交通灯控制系统2003年 [2]郭循钊.基于单片机地多功能交通灯控制系统设计与仿真实现2010年 [3]徐金.基于AT89S52单片机地SD卡读写器设计2008年 [4]刘昆山.用单片机控制一个LED2010年 [5]罗明坡.《大学生论文联合比对库》2012年 [6]杨美荣.浅析51单片机最小系统地设计与制作2011年 [7]浦明乐.基于AT89S52单片机地水温控制器设计2008年 教师评语: 教师签字: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 红外线 遥控 控制 LED 显示 系统 设计 制作 课程设计