第七届创兴杯电子设计竞赛论文智能LED台灯智能LED台灯完成人:黄xx(组长,电子1004);翟xx(电子1004);洪xx(电子1004)指导教师:xx摘要:本文介绍了设计的框架结构和组成模块以及各模块的原理,介绍了各部分硬件设计和各部分软件设计以及软件流程图。该设计是以STC89C52单片机为控制核心的集多种功能于一体的智能LED台灯。该台灯实现了自动检测屋内是否有人并自动开启/关闭功能;台灯光亮度具有调节功能;具有时间显示功能;具有温度显示功能;闹铃功能。硬件设计分为单片机控制模块、按键模块、台灯模块、温度模块、时钟模块、闹铃模块、显示模块,红外传感模块等八个部分。单片机控制就用STC89C52,显示模块用LCD1602C液晶显示温度、时间、日期等内容,按键模块用来调整时间、日期、LED的亮度等,时钟用DS12C887时钟芯片,台灯模块用16颗LED,用蜂鸣器发出闹铃声,温度传感器用DS18B20芯片,检测人的用BIS0001红外热释传感器。软件设计用单片机C语言编写,实现了全部控制功能。关键词:单片机,智能,显示,温度,时间。1LED台灯功能描述及总体该方案1.1功能描述根据主要功能要求,该设计利用51单片机实现了电子时钟、温度的显示以及设置闹铃等功能。具体可分为一下几种:1)显示当前的时间,24时制的时、分、秒;2)可调节时间;3)显示当前屋内温度;4)能检测屋内是否有人并自动开启/关闭;5)可调节LED光亮度;6)可设置闹铃时间并报警。1.2系统组成及工作过程六大模块以STC89C52单片机为控制核心,实现了该智能台灯的各项要求,外接一个5V的直流电源,为整个系统供电。图1为设计的系统组成框图。图1系统组成框图根据设计要求,该智能LED台灯可分为八大模块:1)单片机控制模块;2)按键模块;3)台灯模块;4)温度模块;5)时钟模块;6)闹铃模块;7)显示模块;8)红外传感模块。加上5V直流电源后,后七大模块在单片机控制之下分别工作。2硬件设计2.1单片机控制模块设计硬件电路如图2,单片机控制模块显示模块温度模块闹铃模块台灯模块按键模块时钟模块红外传感模块图2单片机控制模块电路这里我们选用12M的晶振,晶振系统由两个30pF的电容CAP和晶振组成,接到单片机的18、19两管脚。晶振给单片机提供硬件本身的时钟振荡。一个10μF的电解电容和一个1k的电阻组成复位电路,接至单片机的第9管脚。P0口加上排阻,即其就是P0口的上拉电阻,这就是给P0加驱动电路,电源通过排阻向P0口供电,使其能够驱动与P0口相连的元件。2.2按键模块电路设计按键模块电路如图3,图3按键模块电路按键K5、K6用来调节台灯的亮度,K7控制模式,即控制台灯是工作在感应模式下还是工作在手动模式下,亦或是关闭状态。其余的用作调节时钟以及闹铃。按键均采用低电平有效连接方式。通过按下按键K5可以让台灯变暗,按下按键K6可以让台灯变亮。其余几个S1到S4按键可以对时钟进行设置调节,并调节设置闹铃,当时间与设置的时间一致是闹铃报警,即蜂鸣器响。2.3台灯模块电路设计台灯模块电路如图4,图4台灯模块电路本设计采用16颗LED作为发光系统,每两颗并联在一起后和一个1K的电阻串联,用P00到P03口控制。电阻起限流作用,考虑到I/O口资源,我们用每两个并联的方式以节省I/O口资源。通过按键K5、K6调节PWM输出以达到调节光亮度的效果。4个I/O均采用低电平有效方式,即给相应的I/O低电平LED工作。2.4温度模块电路设计温度模块电路如图5,图5温度模块电路由于DS18B20温度传感器的集成度很高,封装简单,所以我们选用该芯片作温度模块电路。1脚接电源VCC,2脚数据线接单片机P24口,3脚接地。芯片采集到的数据通过2脚传给单片机的P24口让单片机进行处理,之后送给显示模块进行显示。2.5时钟模块电路设计时钟模块电路如图6,图6时钟模块电路因为DS12C887时钟芯片的集成度都很高,而且它自带锂电池,即使断电了时钟仍然在工作,所以我们选择了DS12C887时钟芯片作为时钟。各脚的连接见图6.由于其集成度很高,我们只需按照其数据手册焊接电路即可。2.6闹铃模块电路设计闹铃模块电路如图7,图7闹铃模块电路闹铃模块主要就是一个蜂鸣器,其作用是当到达设定的时间到时发出蜂鸣声报警。用一个PNP型三极管和蜂鸣器连接主要是给蜂鸣器一个驱动,让蜂鸣器为高电平有效,即P07口高电平时蜂鸣器发声报警。2.7显示模块电路设计显示模块电路如图8,图8显示模块电路液晶显示部分,我们选用LCD1602C,其接法和普通的1602接法一样。1脚接地,2脚接电源,3脚接一个电位器以调节液晶显示器的亮度,16脚接地,15脚接背光电源,其余接法见图8。在调试的时候,有时液晶不亮,多半是因为遗漏背光电源,也有可能是虚焊导致。2.8红外传感模块电路设计红外传感模块电路如图9,图9红外传感电路检测屋内是否有人我们选用BIS0001红外热释传感器,因为该传感器灵敏度好,好控制,而且价钱不贵。3脚接电源VCC,1脚接地,2脚通过一个NPN型的三极管接至单片机的P37口。由于该传感器的带负载能力较弱,加一个三极管作为其驱动电路,当P37口给低电平时有效。检测距离可通过软件调节。3软件设计3.1主程序的设计图10主程序流程图主程序如图10,一给单片机上电,单片机就初始化。然后通过接收并处理BIS0001传感器出阿叔过来的数据,检测屋内是否有人,若有人则工作。然后检开始LED工作显示时间、日期、温度检测屋内有人?闹钟按键按下?修正时间,设置闹钟系统初始化测按键是否按下,判断工作在那个模式下。单片机接收并处理来自DS18B20传过来的数据在液晶上显示当时的室内温度,液晶还显示当前的时间,日期。当需要设置闹钟或调整时间时,又检测按键是否按下,以便对时间进行修正、设置闹钟时间。最后进入循环。3.2按键模块程序设计按键用来调整时间和设置闹钟,调光亮度,各键功能在介绍硬件部分已描述。因为有年月日,时分秒几个参数要调,所以设置这几个参数的计数。当按下一个键时,单片机进行相应的操作。当调光亮度时,按下K5键变暗,按下K6键变亮,这是通过调PWM实现的。3.3台灯模块程序设计该模块只需给P00到P03口送低电平即可,再通过按键调光亮。3.4温度模块程序设计设计初始化函数,设计读DS18B20数据和对DS118B20写数据的函数,再写出从DS18B20读温度并转换为十进制的函数,最后写显示温度的函数。3.5时钟模块程序设计分别出写时间、日期的函数,再写出时间、日期的显示函数。设计时、分、秒,年、月、日几个变量分别表示时分秒,年月日。3.6闹铃模块程序设计对蜂鸣器,在其所接的I/O口写1即可实现它的蜂鸣,写程序时给它加了个延时,以形成闹铃声。用数组来存储闹铃的值,闹铃声我们采用普通的嘀嘀嘀闹铃声。3.7显示模块程序设计设计1602的初始化函数,编写对1602写命令指令和对其写数据的子函数。让所有的日期,时间,温度都在液晶上显示出来。3.8红外热释传感模块程序设计编写一个从红外传感读数据的函数,检测有人与否,若有人,传感器发给单片机一个高电平,单片机控制去LED,使得单片机的P00到P03口为低电平,LED亮,否则给低电平,LED灭。这就实现了检测屋内有人与否并自动开启或关闭的功能。该传感器检测距离通过编写程序控制。以上的程序见附录三。4总结该设计实现了自动检测屋内是否有人并自动开启/关闭功能;台灯具有光亮度调节功能;具有时间显示功能;具有温度显示功能;具有闹铃功能。但在细节方面还有不足之处。LED亮度达不到很亮的程度,只能在一个很小的范围变化,以致于光亮度不够。附录一实物照片附录二硬件电路图附录三程序#includereg52.h#includeshizhong.hvoiddelay(uintz){uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voiddelay1(unsignedchart){while(t--);}voiddi(){BEEP=0;delay(100);BEEP=1;}voidwrite_com(charcom){rs=0;rw=0;lcden=0;P1=com;delay(1);lcden=1;delay(1);lcden=0;}voidwrite_date(chardate){rs=1;rw=0;lcden=0;P1=date;delay(1);lcden=1;delay(1);lcden=0;}voidinit(){ucharnum;flag1=0;flag=0;flag_ri=0;A=0;//人体感应EA=1;EX1=1;IT1=1;t0_num=0;slnum=0;write_com(0x38);write_com(0x01);write_com(0x06);write_com(0x0C);write_com(0x80);for(num=0;num=15;num++){write_date(table[num]);delay(1);}write_com(0x80+0x40);for(num=0;num16;num++){write_date(table1[num]);delay(1);}write_com(0x80+0x4e);write_date(0xdf);read_ds(0x0c);//set_time();}voidwrite_ds(charadd,chardate){dscs=0;dsas=1;dsds=1;dsrw=1;P1=0xff;P1=add;dsas=0;dsrw=0;P1=0xff;P1=date;dsrw=1;dsas=1;dscs=1;}ucharread_ds(charadd){chards_date;dsas=1;dsds=1;dsrw=1;dscs=0;P1=0xff;P1=add;dsas=0;dsds=0;P1=0xff;ds_date=P1;dsds=1;dsas=1;dscs=1;returnds_date;}voidwrite_week(charwe){write_com(0x80+12);switch(we){case1:write_date('M');delay(5);write_date('O');delay(5);write_date('N');break;case2:write_date('T');delay(5);write_date('U');delay(5);write_date('E');break;case3:write_date('W');delay(5);write_date('E');delay(5);write_date('D');break;case4:write_date('T');delay(5);write_date('H');delay(5);write_date('U');break;case5:write_date('F');delay(5);write_date('R');delay(5);write_date('I');break;case6:write_date('S');delay(5);write_date('A');delay(5);write_date('T');break;case7:write_date('S');delay(5);write_date('U');delay(5);write_date('N');break;}}voidwrite_nyr(ucharadd,chardate){charshi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);}voidwrite_sfm(ucharadd,chardate){charshi,ge;shi=date/10;ge=date%10;write_com(0x80+0x