基于单片机的智能台灯设计ThedesignofIntelligentTableLampBasedonMicrocomputer制作人员:2015.5.14摘要随着科技的发展,单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹,台灯已是千家万户的必需生活用品,当夜晚来临时,人们摸黑去开灯,非常不方便,而当离开时,人们又经常忘记关灯而造成巨大的能源浪费。因此我们设计制作了一种智能台灯,主要是以热释电红外传感器re200b,光敏电阻传感器和单片机组成的红外传感控制电路。其原理是:以人体红外辐射为传感信号,当人体在台灯的范围内且环境光强较弱时,自动感应开灯,省去黑夜摸灯的麻烦;当人离开台灯传感器检测范围,自动感应关灯。智能台灯还可以进行光亮(4档)的调节,以便达到最舒适的光亮;台灯还具有显示时间与室温的功能。关键词:智能台灯;at89s52;热释电红外传感器re200b;时钟芯片ds12c887;温度传感器ds18b20;光敏传感器。一.智能台灯功能介绍(1)、光亮调节:在不同的情况下需要不同的光亮来满足需求,因此我们通过给单片机四个IO口不同的电平,设置了四种光亮强度,以便达到不同的需求。(2)、“天暗时,人来灯亮,人走灯灭”功能的实现:运用51单片机产生的方波信号驱动红外发射管发射红外线;运用三脚的红外接收头接收红外信号,当人挡住红外信号,红外信号就会反射被红外接收头接收;并且通过光敏传感器对外界的光强进行判断,在环境光线亮度达不到设定阈值时,DO端输出高电平,当外界环境光线亮度超过设定阈值时,DO端输出低电平。由单片机检测红外接收头是否接收到红外信号,以及光敏传感器的DO端的电平高低,从而决定led灯部分的亮度。由此实现“天暗时,人来灯亮,人走灯灭”。(3)、时钟部分:运用时钟芯片DS12C887产生时钟信号,由单片机读取其信号,并将数据处理之后送到液晶显示。由于DS12C887内部有集成的电池,所以即使断电,时钟仍会走时准确,从而使该台灯更实用、更省电。此时钟还配有按键,通过按键即可方便的调节时钟,还有闹钟功能。(4)、温度显示:运用DS18B20芯片感应温度,由单片机读取其信号,并将数据处理后送到液晶显示,从而显示当时的温度。二、传感器的选择及功能介绍传感器传感器是能感受规定的被测量并按照一定的规律转换成可用输出信号的器件或装置,它通常由敏感元件和转换元件组成,它的性能直接影响到整个检测电路,对检测系统起着重要的作用。热释电红外传感器re200b智能台灯温度显示闹钟部分人体红外感应4档光亮调节光敏传感器红外热释电处理芯片BISS0001我们所使用的BISS0001是一款具有较高性能的传感信号处理集成电路,它配以热释电红外传感器和少量外接元器件构成被动式的热释电红外开关。它能自动快速开启各类白炽灯、荧光灯、蜂鸣器、自动门、电风扇、烘干机和自动洗手池等装置,特别适用于企业、宾馆、商场、库房及家庭的过道、走廊等敏感区域,或用于安全区域的自动灯光、照明和报警系统。工作原理BISS0001是由运算放大器、电压比较器、状态控制器、延迟时间定时器以及封锁时间定时器等构成的数模混合专用集成电路。首先,根据实际需要,利用运算放大器OP1组成传感信号预处理电路,将信号放大。然后耦合给运算放大器OP2,再进行第二级放大,同时将直流电位抬高为VM(≈0.5VDD)后,将输出信号V2送到由比较器COP1和COP2组成的双向鉴幅器,检出有效触发信号Vs。由于VH≈0.7VDD、VL≈0.3VDD,所以,当VDD=5V时,可有效抑制±1V的噪声干扰,提高系统的可靠性。COP3是一个条件比较器。当输入电压VcVR(≈0.2VDD)时,COP3输出为低电平封住了与门U2,禁止触发信号Vs向下级传递;而当VcVR时,COP3输出为高电平,进入延时周期。当A端接“0”电平时,在Tx时间内任何V2的变化都被忽略,直至Tx时间结束,即所谓不可重复触发工作方式。当Tx时间结束时,Vo下跳回低电平,同时启动封锁时间定时器而进入封锁周期Ti。在Ti时间内,任何V2的变化都不能使Vo跳变为有效状态(高电平),可有效抑制负载切换过程中产生的各种干扰。时钟芯片DS12C887特点可作为IBMAT计算机的时钟和日历与MC146818B和DS1287的管脚兼容在没有外部电源的情况下可工作10年自带晶体振荡器及电池可计算到2100年前的秒、分、小时、星期、日期、月、年七种日历信息并带闰年补偿用二进制码或BCD码代表日历和闹钟信息有12和24小时两种制式,12小时制时有AM和PM提示可选用夏令时模式可以应用于MOTOROLA和INTEL两种总线数据/地址总线复用内建128字节RAM14字节时钟控制寄存器114字节通用RAM可编程方波输出总线兼容中断(/IRQ)�三种可编程中断时间性中断可产生每秒一次直到每天一次中断周期性中断122ms到500ms时钟更新结束中断DS18B20温度传感器DS18B20的主要特征:全数字温度转换及输出。先进的单总线数据通信。最高12位分辨率,精度可达土0.5摄氏度。12位分辨率时的最大工作周期为750毫秒。可选择寄生工作方式。检测温度范围为–55°C~+125°C(–67°F~+257°F)内置EEPROM,限温报警功能。64位光刻ROM,内置产品序列号,方便多机挂接。多样封装形式,适应不同硬件系统。三、实现:(一)、硬件部分主体部分:(两条白线为跳线,外形需要,画成了心形)LED:电流放大电路:PS:单片机IO口电流不够大,无法使灯泡足够亮。按键部分:(二)、软件部分#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbitds=P2^4;//温度传感器信号线sbitbeep=P2^3;//蜂鸣器sbitre=P2^2;//热释电sbitgm=P2^7;//光敏sbits0=P1^3;//智能sbits1=P3^0;//功能键sbits2=P3^1;//增加键sbits3=P3^4;//减小键sbits4=P3^5;//闹钟查看键sbits5=P3^6;//调光sbits6=P3^2;//显示温度sbitrs=P1^0;//sbitlcden=P1^2;//液晶sbitwr=P1^1;//sbitled1=P2^0;sbitled2=P2^1;//ledsbitled3=P2^5;sbitled4=P2^6;sbitrd=P3^7;sbitdscs=P1^7;sbitdsas=P1^6;sbitdsrw=P1^5;//时钟芯片sbitdsds=P1^4;sbitdsirq=P3^3;uinttemp;floatf_temp;uchars5num=0,s0num=0,s6num=0;ucharflag1=0,flag_ri;//定义两个位变量ucharcount,s1num,flag=0,t0_num;//其它变量定义ucharmiao,shi,fen,year,month,day,week,amiao,afen,ashi;ucharcodetable[]=20--;//液晶固定显示内容ucharcodetable1[]=::;ucharcodetable2[]=WELCOME!;voidwrite_ds(uchar,uchar);//函数申明voidset_alarm(uchar,uchar,uchar);voidread_alarm();ucharread_ds(uchar);voidset_time();/************************************************//*led*/voidled(ucharx){switch(x){case0:led1=1;led2=0;led3=1;led4=0;break;case1:led1=0;led2=0;led3=1;led4=0;break;case3:led1=0;led2=0;led3=0;led4=1;break;case2:led1=1;led2=1;led3=0;led4=0;break;case4:led1=0;led2=1;led3=0;led4=1;break;}}/***************************************************/voiddelay(uintz)//延时函数{uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voiddi()//蜂鸣器报警声音{beep=0;delay(100);beep=1;}voidwrite_com(ucharcom){//写液晶命令函数rs=0;lcden=0;P0=com;delay(3);lcden=1;delay(3);lcden=0;}voidwrite_date(uchardate){//写液晶数据函数rs=1;lcden=0;P0=date;delay(3);lcden=1;delay(3);lcden=0;}voidinit(){//初始化函数uchari;EA=1;//打开总中断EX0=1;//开外部中断1IT0=1;//设置负跳变沿触发中断EX1=1;//开外部中断1IT1=1;//设置负跳变沿触发中断flag1=0;//变量初始化t0_num=0;s1num=0;week=1;lcden=0;rd=0;/*以下几行在首次设置DS12C887时使用,以后不必再写入write_ds(0x0A,0x20);//打开振荡器write_ds(0x0B,0x26);//设置24小时模式,数据二进制格式//开启闹铃中断set_time();//设置上电默认时间-----------------------------------------------------*/write_com(0x38);//1602液晶初始化write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(i=0;i15;i++)//写入液晶固定部分显示{write_date(table[i]);delay(1);}write_com(0x80+0x40);for(i=0;i16;i++){write_date(table1[i]);delay(1);}}voidwrite_sfm(ucharadd,chardate){//1602液晶刷新时分秒函数4为时,7为分,10为秒charshi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}voidwrite_nyr(ucharadd,chardate){//1602液晶刷新年月日函数3为年,6为分,9为秒charshi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);}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