ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:204.25KB ,
资源ID:24078061      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24078061.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的智能台灯设计.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机的智能台灯设计.docx

1、基于单片机的智能台灯设计基于单片机的智能台灯设计The design of Intelligent Table Lamp Based on Microcomputer 制作人员: 2015.5.14 摘 要 随着科技的发展,单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹,台灯已是千家万户的必需生活用品,当夜晚来临时,人们摸黑去开灯,非常不方便,而当离开时,人们又经常忘记关灯而造成巨大的能源浪费。 因此我们设计制作了一种智能台灯,主要是以热释电红外传感器re200b,光敏电阻传感器和单片机组成的红外传感控制电路。其原理是:以人体红外辐射为传感信号,当人体在台灯的范围内且环境

2、光强较弱时,自动感应开灯,省去黑夜摸灯的麻烦;当人离开台灯传感器检测范围,自动感应关灯。智能台灯还可以进行光亮(4档)的调节,以便达到最舒适的光亮;台灯还具有显示时间与室温的功能。 关键词:智能台灯;at89s52;热释电红外传感器re200b;时钟芯片ds12c887;温度传感器ds18b20;光敏传感器。一.智能台灯功能介绍 (1)、光亮调节:在不同的情况下需要不同的光亮来满足需求,因此我们通过给单片机四个IO口不同的电平,设置了四种光亮强度,以便达到不同的需求。(2)、“天暗时,人来灯亮,人走灯灭”功能的实现:运用51单片机产生的方波信号驱动红外发射管发射红外线;运用三脚的红外接收头接收

3、红外信号,当人挡住红外信号,红外信号就会反射被红外接收头接收;并且通过光敏传感器对外界的光强进行判断,在环境光线亮度达不到设定阈值时,DO端输出高电平,当外界环境光线亮度超过设定阈值时,DO端输出低电平。由单片机检测红外接收头是否接收到红外信号,以及光敏传感器的DO端的电平高低,从而决定led灯部分的亮度。由此实现“天暗时,人来灯亮,人走灯灭”。(3)、时钟部分:运用时钟芯片DS12C887产生时钟信号,由单片机读取其信号,并将数据处理之后送到液晶显示。由于DS12C887内部有集成的电池,所以即使断电,时钟仍会走时准确,从而使该台灯更实用、更省电。此时钟还配有按键,通过按键即可方便的调节时钟

4、,还有闹钟功能。(4)、温度显示:运用DS18B20芯片感应温度,由单片机读取其信号,并将数据处理后送到液晶显示,从而显示当时的温度。二、传感器的选择及功能介绍 传感器传感器是能感受规定的被测量并按照一定的规律转换成可用输出信号的器件或装置,它通常由敏感元件和转换元件组成,它的性能直接影响到整个检测电路,对检测系统起着重要的作用。热释电红外传感器re200b红外热释电处理芯片BISS0001我们所使用的BISS0001是一款具有较高性能的传感信号处理集成电路,它配以热释电红外传感器和少量外接元器件构成被动式的热释电红外开关。它能自动快速开启各类白炽灯、荧光灯、蜂鸣器、自动门、电风扇、烘干机和自

5、动洗手池等装置,特别适用于企业、宾馆、商场、库房及家庭的过道、走廊等敏感区域,或用于安全区域的自动灯光、照明和报警系统。工作原理 BISS0001是由运算放大器、电压比较器、状态控制器、延迟时间定时器以及封锁时间定时器等构成的数模混合专用集成电路。 首先,根据实际需要,利用运算放大器OP1组成传感信号预处理电路,将信号放大。然后耦合给运算放大器OP2,再进行第二级放大,同时将直流电位抬高为VM(0.5VDD)后,将输出信号V2送到由比较器COP1和COP2组成的双向鉴幅器,检出有效触发信号Vs。由于VH0.7VDD、VL0.3VDD,所以,当VDD=5V时,可有效抑制1V的噪声干扰,提高系统的

6、可靠性。COP3是一个条件比较器。当输入电压VcVR时,COP3输出为高电平,进入延时周期。当A端接“0”电平时,在Tx时间内任何V2的变化都被忽略,直至Tx时间结束,即所谓不可重复触发工作方式。当Tx时间结束时,Vo下跳回低电平,同时启动封锁时间定时器而进入封锁周期Ti。在Ti时间内,任何V2的变化都不能使Vo跳变为有效状态(高电平),可有效抑制负载切换过程中产生的各种干扰。时钟芯片DS12C887特点可作为IBMAT计算机的时钟和日历与MC146818B和DS1287的管脚兼容在没有外部电源的情况下可工作10年自带晶体振荡器及电池可计算到2100年前的秒、分、小时、星期、日期、月、年七种日

7、历信息并带闰年补偿用二进制码或BCD码代表日历和闹钟信息有12和24小时两种制式,12小时制时有AM和PM提示可选用夏令时模式可以应用于MOTOROLA和INTEL两种总线数据/地址总线复用内建128字节RAM14字节时钟控制寄存器114字节通用RAM可编程方波输出总线兼容中断(/IRQ)三种可编程中断时间性中断可产生每秒一次直到每天一次中断周期性中断122ms到500ms时钟更新结束中断DS18B20温度传感器DS18B20的主要特征:全数字温度转换及输出。先进的单总线数据通信。最高12位分辨率,精度可达土0.5摄氏度。12位分辨率时的最大工作周期为750毫秒。可选择寄生工作方式。检测温度范

8、围为55C+125C(67F+257F)内置EEPROM,限温报警功能。64位光刻ROM,内置产品序列号,方便多机挂接。多样封装形式,适应不同硬件系统。三、实现:(一)、硬件部分主体部分: (两条白线为跳线,外形需要,画成了心形)LED:电流放大电路:PS:单片机IO口电流不够大,无法使灯泡足够亮。按键部分:(二)、软件部分#include #define uchar unsigned char#define uint unsigned intsbit ds=P24; /温度传感器信号线sbit beep=P23;/蜂鸣器sbit re=P22; /热释电sbit gm=P27;/光敏sbit

9、 s0=P13;/智能sbit s1=P30;/功能键sbit s2=P31;/增加键sbit s3=P34;/减小键sbit s4=P35;/闹钟查看键sbit s5=P36;/调光sbit s6=P32;/显示温度sbit rs=P10; /sbit lcden=P12; / 液晶sbit wr=P11; /sbit led1=P20;sbit led2=P21; /ledsbit led3=P25;sbit led4=P26;sbit rd=P37;sbit dscs=P17;sbit dsas=P16;sbit dsrw=P15; /时钟芯片sbit dsds=P14;sbit dsi

10、rq=P33;uint temp;float f_temp;uchar s5num=0,s0num=0,s6num=0;uchar flag1=0,flag_ri;/定义两个位变量uchar count,s1num,flag=0,t0_num;/其它变量定义uchar miao,shi,fen,year,month,day,week,amiao,afen,ashi;uchar code table= 20 - - ;/液晶固定显示内容uchar code table1= : : ;uchar code table2=WELCOME!;void write_ds(uchar,uchar);/函数

11、申明void set_alarm(uchar,uchar,uchar);void read_alarm();uchar read_ds(uchar);void set_time();/*/*led*/void led(uchar x) switch(x) case 0: led1=1;led2=0;led3=1;led4=0;break; case 1: led1=0;led2=0;led3=1;led4=0; break; case 3: led1=0;led2=0;led3=0;led4=1; break; case 2: led1=1;led2=1;led3=0;led4=0; brea

12、k; case 4: led1=0;led2=1;led3=0;led4=1; break; /*/void delay(uint z)/延时函数 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void di() /蜂鸣器报警声音 beep=0; delay(100); beep=1;void write_com(uchar com)/写液晶命令函数 rs=0; lcden=0; P0=com; delay(3); lcden=1; delay(3); lcden=0; void write_date(uchar date)/写液晶数据函数 rs=1; l

13、cden=0; P0=date; delay(3); lcden=1; delay(3); lcden=0; void init()/初始化函数 uchar i; EA=1;/打开总中断 EX0=1;/开外部中断1 IT0=1;/设置负跳变沿触发中断 EX1=1;/开外部中断1 IT1=1;/设置负跳变沿触发中断 flag1=0;/变量初始化 t0_num=0; s1num=0; week=1; lcden=0; rd=0;/*以下几行在首次设置DS12C887时使用,以后不必再写入 write_ds(0x0A,0x20);/打开振荡器 write_ds(0x0B,0x26);/设置24小时模

14、式,数据二进制格式 /开启闹铃中断 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(tablei); delay(1); write_com(0x80+0x40); for(i=0;i16;i+) write_date(table1i); delay(1); void write_sfm(uchar add,char date)/

15、1602液晶刷新时分秒函数4为时,7为分,10为秒 char shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge);void write_nyr(uchar add,char date)/1602液晶刷新年月日函数3为年,6为分,9为秒 char shi,ge; shi=date/10; ge=date%10; write_com(0x80+add); write_date(0x30+shi); write_date(0x30+ge);void w

16、rite_week(char we)/写液晶星期显示函数 write_com(0x80+12); switch(we) case 1: write_date(M);delay(5); write_date(O);delay(5); write_date(N); break; case 2: write_date(T);delay(5); write_date(U);delay(5); write_date(E); break; case 3: write_date(W);delay(5); write_date(E);delay(5); write_date(D); break; case 4

17、: write_date(T);delay(5); write_date(H);delay(5); write_date(U); break; case 5: write_date(F);delay(5); write_date(R);delay(5); write_date(I); break; case 6: write_date(S);delay(5); write_date(A);delay(5); write_date(T); break; case 7: write_date(S);delay(5); write_date(U);delay(5); write_date(N); b

18、reak; void keyscan() if(flag_ri=1) /这里用来取消闹钟报警,任一键取消报警 if(s1=0)|(s2=0)|(s3=0)|(s4=0) delay(5); if(s1=0)|(s2=0)|(s3=0)|(s4=0) while(!(s1&s2&s3&s4); di(); flag_ri=0;/清除报警标志 if(s1=0)/检测S1 delay(10); if(s1=0) s1num+;/记录按下次数 if(flag1=1) if(s1num=4) s1num=1; flag=1; while(!s1);di(); switch(s1num) /光标闪烁点定位

19、 case 1: write_com(0x80+0x40+10); write_com(0x0f); break; case 2: write_com(0x80+0x40+7); break; case 3: write_com(0x80+0x40+4); break; case 4: write_com(0x80+12); break; case 5: write_com(0x80+9); break; case 6: write_com(0x80+6); break; case 7: write_com(0x80+3); break; case 8: s1num=0; write_com(

20、0x0c); flag=0; write_ds(0,miao); write_ds(2,fen); write_ds(4,shi); write_ds(6,week); write_ds(7,day); write_ds(8,month); write_ds(9,year); break; if(s1num!=0)/只有当S1按下后,才检测S2和S3 if(s2=0) delay(10); if(s2=0) while(!s2);di(); switch(s1num) /根据功能键次数调节相应数值 case 1: miao+; if(miao=60) miao=0; write_sfm(10,

21、miao); write_com(0x80+0x40+10); break; case 2: fen+; if(fen=60) fen=0; write_sfm(7,fen); write_com(0x80+0x40+7); break; case 3: shi+; if(shi=24) shi=0; write_sfm(4,shi); write_com(0x80+0x40+4); break; case 4: week+; if(week=8) week=1; write_week(week); write_com(0x80+12); break; case 5: day+; if(day

22、=32) day=1; write_nyr(9,day); write_com(0x80+9); break; case 6: month+; if(month=13) month=1; write_nyr(6,month); write_com(0x80+6); break; case 7: year+; if(year=100) year=0; write_nyr(3,year); write_com(0x80+3); break; if(s3=0) delay(10); if(s3=0) while(!s3);di(); switch(s1num) /根据功能键次数调节相应数值 case

23、 1: miao-; if(miao=-1) miao=59; write_sfm(10,miao); write_com(0x80+0x40+10); break; case 2: fen-; if(fen=-1) fen=59; write_sfm(7,fen); write_com(0x80+0x40+7); break; case 3: shi-; if(shi=-1) shi=23; write_sfm(4,shi); write_com(0x80+0x40+4); break; case 4: week-; if(week=0) week=7; write_week(week);

24、write_com(0x80+12); break; case 5: day-; if(day=0) day=31; write_nyr(9,day); write_com(0x80+9); break; case 6: month-; if(month=0) month=12; write_nyr(6,month); write_com(0x80+6); break; case 7: year-; if(year=-1) year=99; write_nyr(3,year); write_com(0x80+3); break; if(s4=0)/检测S4 delay(10); if(s4=0

25、) flag1=flag1; while(!s4);di(); if(flag1=0) /退出闹钟设置时保存数值 flag=0; write_com(0x80+0x40); write_date( ); write_date( ); write_com(0x0c); write_ds(1,miao); write_ds(3,fen); write_ds(5,shi); else /进入闹钟设置 read_alarm();/读取原始数据 miao=amiao;/重新赋值用以按键调节 fen=afen; shi=ashi; write_com(0x80+0x40); write_date(R);/显示标志 write_date(i); write_com(0x80+0x40+3); write_sfm(4,ashi);/送液晶显示闹钟时间

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1