基于單片機(jī)的智能臺燈設(shè)計(jì)_第1頁
基于單片機(jī)的智能臺燈設(shè)計(jì)_第2頁
基于單片機(jī)的智能臺燈設(shè)計(jì)_第3頁
基于單片機(jī)的智能臺燈設(shè)計(jì)_第4頁
基于單片機(jī)的智能臺燈設(shè)計(jì)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于單片機(jī)的智能臺燈設(shè)計(jì)The design of Intelligent Table Lamp Based on Microcomputer 制作人員: 摘 要 隨著科技的發(fā)展,單片機(jī)滲透到我們生活的各個領(lǐng)域,幾乎很難找到哪個領(lǐng)域沒有單片機(jī)的蹤跡,臺燈已是千家萬戶的必需生活用品,當(dāng)夜晚來臨時,人們摸黑去開燈,非常不方便,而當(dāng)離開時,人們又經(jīng)常忘記關(guān)燈而造成巨大的能源浪費(fèi)。 因此我們設(shè)計(jì)制作了一種智能臺燈,主要是以熱釋電紅外傳感器re200b,光敏電阻傳感器和單片機(jī)組成的紅外傳感控制電路。其原理是:以人體紅外輻射為傳感信號,當(dāng)人體在臺燈的范圍內(nèi)且環(huán)境光強(qiáng)較弱時,自動感應(yīng)開燈,省去黑夜摸燈的麻煩

2、;當(dāng)人離開臺燈傳感器檢測范圍,自動感應(yīng)關(guān)燈。智能臺燈還可以進(jìn)行光亮(4檔)的調(diào)節(jié),以便達(dá)到最舒適的光亮;臺燈還具有顯示時間與室溫的功能。 關(guān)鍵詞:智能臺燈;at89s52;熱釋電紅外傳感器re200b;時鐘芯片ds12c887;溫度傳感器ds18b20;光敏傳感器。一.智能臺燈功能介紹 智能臺燈光敏傳感器鬧鐘部分人體紅外感應(yīng)4檔光亮調(diào)節(jié)溫度顯示 (1)、光亮調(diào)節(jié):在不同的情況下需要不同的光亮來滿足需求,因此我們通過給單片機(jī)四個IO口不同的電平,設(shè)置了四種光亮強(qiáng)度,以便達(dá)到不同的需求。(2)、“天暗時,人來燈亮,人走燈滅”功能的實(shí)現(xiàn):運(yùn)用51單片機(jī)產(chǎn)生的方波信號驅(qū)動紅外發(fā)射管發(fā)射紅外線;運(yùn)用三腳

3、的紅外接收頭接收紅外信號,當(dāng)人擋住紅外信號,紅外信號就會反射被紅外接收頭接收;并且通過光敏傳感器對外界的光強(qiáng)進(jìn)行判斷,在環(huán)境光線亮度達(dá)不到設(shè)定閾值時,DO端輸出高電平,當(dāng)外界環(huán)境光線亮度超過設(shè)定閾值時,DO端輸出低電平。由單片機(jī)檢測紅外接收頭是否接收到紅外信號,以及光敏傳感器的DO端的電平高低,從而決定led燈部分的亮度。由此實(shí)現(xiàn)“天暗時,人來燈亮,人走燈滅”。(3)、時鐘部分:運(yùn)用時鐘芯片DS12C887產(chǎn)生時鐘信號,由單片機(jī)讀取其信號,并將數(shù)據(jù)處理之后送到液晶顯示。由于DS12C887內(nèi)部有集成的電池,所以即使斷電,時鐘仍會走時準(zhǔn)確,從而使該臺燈更實(shí)用、更省電。此時鐘還配有按鍵,通過按鍵即

4、可方便的調(diào)節(jié)時鐘,還有鬧鐘功能。(4)、溫度顯示:運(yùn)用DS18B20芯片感應(yīng)溫度,由單片機(jī)讀取其信號,并將數(shù)據(jù)處理后送到液晶顯示,從而顯示當(dāng)時的溫度。二、傳感器的選擇及功能介紹 傳感器傳感器是能感受規(guī)定的被測量并按照一定的規(guī)律轉(zhuǎn)換成可用輸出信號的器件或裝置,它通常由敏感元件和轉(zhuǎn)換元件組成,它的性能直接影響到整個檢測電路,對檢測系統(tǒng)起著重要的作用。熱釋電紅外傳感器re200b紅外熱釋電處理芯片BISS0001    我們所使用的BISS0001是一款具有較高性能的傳感信號處理集成電路,它配以熱釋電紅外傳感器和少量外接元器件構(gòu)成被動式的熱釋電紅外開關(guān)。它能自

5、動快速開啟各類白熾燈、熒光燈、蜂鳴器、自動門、電風(fēng)扇、烘干機(jī)和自動洗手池等裝置,特別適用于企業(yè)、賓館、商場、庫房及家庭的過道、走廊等敏感區(qū)域,或用于安全區(qū)域的自動燈光、照明和報(bào)警系統(tǒng)。工作原理     BISS0001是由運(yùn)算放大器、電壓比較器、狀態(tài)控制器、延遲時間定時器以及封鎖時間定時器等構(gòu)成的數(shù)?;旌蠈S眉呻娐?。    首先,根據(jù)實(shí)際需要,利用運(yùn)算放大器OP1組成傳感信號預(yù)處理電路,將信號放大。然后耦合給運(yùn)算放大器OP2,再進(jìn)行第二級放大,同時將直流電位抬高為VM(0.5VDD)后,將輸出信號V2送到由比較器COP1和

6、COP2組成的雙向鑒幅器,檢出有效觸發(fā)信號Vs。由于VH0.7VDD、VL0.3VDD,所以,當(dāng)VDD=5V時,可有效抑制±1V的噪聲干擾,提高系統(tǒng)的可靠性。 COP3是一個條件比較器。當(dāng)輸入電壓Vc<VR(0.2VDD)時,COP3輸出為低電平封住了與門U2,禁止觸發(fā)信號Vs向下級傳遞;而當(dāng)Vc>VR時,COP3輸出為高電平,進(jìn)入延時周期。 當(dāng)A端接“0”電平時,在Tx時間內(nèi)任何V2的變化都被忽略,直至Tx時間結(jié)束,即所謂不可重復(fù)觸發(fā)工作方式。當(dāng)Tx時間結(jié)束時,Vo下跳回低電平,同時啟動封鎖時間定時器而進(jìn)入封鎖周期Ti。在Ti時間內(nèi),任何V2的變化都

7、不能使Vo跳變?yōu)橛行顟B(tài)(高電平),可有效抑制負(fù)載切換過程中產(chǎn)生的各種干擾。時鐘芯片DS12C887特點(diǎn) 可作為 IBM AT 計(jì)算機(jī)的時鐘和日歷 與MC146818B和DS1287的管腳兼容 在沒有外部電源的情況下可工作10年自帶晶體振蕩器及電池 可計(jì)算到2100年前的秒、分、小時、星期、日期、月、年七種日歷信息并帶閏年補(bǔ)償 用二進(jìn)制碼或BCD碼代表日歷和鬧鐘信息 有12和24小時兩種制式,12小時制時有AM和PM提示 可選用夏令時模式 可以應(yīng)用于MOTOROLA和INTEL兩種總線

8、 數(shù)據(jù)/地址總線復(fù)用內(nèi)建128字節(jié)RAM 14字節(jié)時鐘控制寄存器 114字節(jié)通用RAM 可編程方波輸出  總線兼容中斷(/IRQ ) 三種可編程中斷 時間性中斷 可產(chǎn)生每秒一次直到每天一次中斷  周期性中斷122 ms 到 500 ms  時鐘更新結(jié)束中斷DS18B20溫度傳感器DS18B20的主要特征: 全數(shù)字溫度轉(zhuǎn)換及輸出。 先進(jìn)的單總線數(shù)據(jù)通信。 最高12位分辨率,精度可達(dá)土0.5

9、攝氏度。 12位分辨率時的最大工作周期為750毫秒。 可選擇寄生工作方式。 檢測溫度范圍為55°C +125°C (67°F +257°F) 內(nèi)置EEPROM,限溫報(bào)警功能。 64位光刻ROM,內(nèi)置產(chǎn)品序列號,方便多機(jī)掛接。多樣封裝形式,適應(yīng)不同硬件系統(tǒng)。三、實(shí)現(xiàn):(一)、硬件部分主體部分: (兩條白線為跳線,外形需要,畫成了心形)LED:電流放大電路:PS:單片機(jī)IO口電流不夠大,無法使燈泡足夠亮。按鍵部分:(二)、軟件部分#include <reg52.h>#

10、define uchar unsigned char#define uint unsigned intsbit ds=P24; /溫度傳感器信號線sbit beep=P23;/蜂鳴器sbit re=P22; /熱釋電sbit gm=P27;/光敏sbit s0=P13;/智能sbit s1=P30;/功能鍵sbit s2=P31;/增加鍵sbit s3=P34;/減小鍵sbit s4=P35;/鬧鐘查看鍵sbit s5=P36;/調(diào)光sbit s6=P32;/顯示溫度sbit rs=P10; /sbit lcden=P12; / 液晶sbit wr=P11; /sbit led1=P20;sb

11、it led2=P21;/ledsbit led3=P25;sbit led4=P26;sbit rd=P37;sbit dscs=P17;sbit dsas=P16;sbit dsrw=P15;/時鐘芯片sbit dsds=P14;sbit dsirq=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,a

12、fen,ashi;uchar code table=" 20 - - "/液晶固定顯示內(nèi)容uchar code table1=" : : "uchar code table2="WELCOME!"void write_ds(uchar,uchar);/函數(shù)申明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;l

13、ed2=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;break;case 4: led1=0;led2=1;led3=0;led4=1;break;/*/void delay(uint z)/延時函數(shù)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void di() /蜂鳴器報(bào)警聲音beep=0;delay(1

14、00);beep=1;void write_com(uchar com)/寫液晶命令函數(shù)rs=0;lcden=0;P0=com;delay(3);lcden=1;delay(3);lcden=0;void write_date(uchar date)/寫液晶數(shù)據(jù)函數(shù)rs=1;lcden=0;P0=date;delay(3);lcden=1;delay(3);lcden=0;void init()/初始化函數(shù)uchar i;EA=1;/打開總中斷EX0=1;/開外部中斷1IT0=1;/設(shè)置負(fù)跳變沿觸發(fā)中斷EX1=1;/開外部中斷1IT1=1;/設(shè)置負(fù)跳變沿觸發(fā)中斷flag1=0;/變量初始化t0

15、_num=0;s1num=0;week=1;lcden=0;rd=0;/*以下幾行在首次設(shè)置DS12C887時使用,以后不必再寫入write_ds(0x0A,0x20);/打開振蕩器write_ds(0x0B,0x26);/設(shè)置24小時模式,數(shù)據(jù)二進(jìn)制格式/開啟鬧鈴中斷set_time();/設(shè)置上電默認(rèn)時間-*/write_com(0x38);/1602液晶初始化write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(i=0;i<15;i+)/寫入液晶固定部分顯示write_date(tablei);del

16、ay(1);write_com(0x80+0x40);for(i=0;i<16;i+)write_date(table1i);delay(1);void write_sfm(uchar add,char date)/1602液晶刷新時分秒函數(shù)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液晶刷新年月日函數(shù)3為年,6為分,9為秒cha

17、r shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);void write_week(char we)/寫液晶星期顯示函數(shù)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);w

18、rite_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:write_date('T');delay(5);write_date('H');delay(5);write_date('U');break;case 5:write_date('F');d

19、elay(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');break;void keyscan()if(flag_r

20、i=1)/這里用來取消鬧鐘報(bào)警,任一鍵取消報(bào)警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;/清除報(bào)警標(biāo)志 if(s1=0)/檢測S1delay(10);if(s1=0)s1num+;/記錄按下次數(shù)if(flag1=1)if(s1num=4)s1num=1;flag=1;while(!s1);di();switch(s1num)/光標(biāo)閃爍點(diǎn)定位case 1: write_com(0

21、x80+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(0x0c);flag=0;write_ds(0,miao);write

22、_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)/只有當(dāng)S1按下后,才檢測S2和S3if(s2=0)delay(10);if(s2=0)while(!s2);di();switch(s1num)/根據(jù)功能鍵次數(shù)調(diào)節(jié)相應(yīng)數(shù)值case 1:miao+;if(miao=60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10); break;case 2:fen+;if(fen=

23、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=32)day=1;write_nyr(9,day);write_com(0x80+9);break;case 6:month+;if(month=13)mo

24、nth=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)/根據(jù)功能鍵次數(shù)調(diào)節(jié)相應(yīng)數(shù)值case 1:miao-;if(miao=-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);break; case 2:fen-;if(fen=-1)fen=

25、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);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;w

26、rite_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)/檢測S4delay(10);if(s4=0)flag1=flag1;while(!s4);di();if(flag1=0)/退出鬧鐘設(shè)置時保存數(shù)值flag=0;write_com(0x80+0x40);write_date(' ');write_date(' ');write_com(0x0c);write_ds(1

27、,miao);write_ds(3,fen);write_ds(5,shi);else/進(jìn)入鬧鐘設(shè)置read_alarm();/讀取原始數(shù)據(jù)miao=amiao;/重新賦值用以按鍵調(diào)節(jié)fen=afen;shi=ashi;write_com(0x80+0x40);write_date('R');/顯示標(biāo)志write_date('i');write_com(0x80+0x40+3);write_sfm(4,ashi);/送液晶顯示鬧鐘時間write_sfm(7,afen);write_sfm(10,amiao);if(s0=0)delay(10);if(s0=0)d

28、i();s0num+;if(s0num=2)s0num=0;if(s5=0)delay(10);if(s5=0)di();s5num+;if(s5num=5)s5num=0;led(s5num);delay(10);while(!s5);delay(10);while(!s5);void write_ds(uchar add,uchar date)/寫12C887函數(shù)dscs=0;dsas=1;dsds=1;dsrw=1;P0=add;/先寫地址dsas=0;dsrw=0;P0=date;/再寫數(shù)據(jù)dsrw=1;dsas=1;dscs=1;uchar read_ds(uchar add)/讀1

29、2C887函數(shù) uchar ds_date;dsas=1;dsds=1;dsrw=1;dscs=0;P0=add;/先寫地址dsas=0;dsds=0;P0=0xff;ds_date=P0;/再讀數(shù)據(jù)dsds=1;dsas=1;dscs=1;return ds_date;/*-首次操作12C887時給予寄存器初始化-void set_time()/首次上電初始化時間函數(shù)write_ds(0,0);write_ds(1,0);write_ds(2,28);write_ds(3,0);write_ds(4,4);write_ds(5,0);write_ds(6,7);write_ds(7,10);

30、write_ds(8,5);write_ds(9,15);-*/void read_alarm()/讀取12C887鬧鐘值amiao=read_ds(1);afen=read_ds(3);ashi=read_ds(5);/*ds18b20*/void dsreset(void) /18B20復(fù)位,初始化函數(shù) uint i; ds=0; i=103; while(i>0)i-; ds=1; i=4; while(i>0)i-;bit tempreadbit(void) /讀1位函數(shù) uint i; bit dat; ds=0;i+; /i+ 起延時作用 ds=1;i+;i+; dat

31、=ds; i=8;while(i>0)i-; return (dat);uchar tempread(void) /讀1個字節(jié) uchar i,j,dat; dat=0; for(i=1;i<=8;i+) j=tempreadbit(); dat=(j<<7)|(dat>>1); /讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在DAT里 return(dat);void tempwritebyte(uchar dat) /向18B20寫一個字節(jié)數(shù)據(jù) uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=da

32、t&0x01; dat=dat>>1; if(testb) /寫 1 ds=0; i+;i+; ds=1; i=8;while(i>0)i-; else ds=0; /寫 0 i=8;while(i>0)i-; ds=1; i+;i+; void tempchange(void) /DS18B20 開始獲取溫度并轉(zhuǎn)換 dsreset(); delay(1); tempwritebyte(0xcc); / 寫跳過讀ROM指令 tempwritebyte(0x44); / 寫溫度轉(zhuǎn)換指令uint get_temp() /讀取寄存器中存儲的溫度數(shù)據(jù) uchar a,b

33、; dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); /讀低8位 b=tempread(); /讀高8位 temp=b; temp<<=8; /兩個字節(jié)組合為1個字 temp=temp|a; f_temp=temp*0.0625; /溫度在寄存器中為12位 分辨率位0.0625° temp=f_temp*10+0.5; /乘以10表示小數(shù)點(diǎn)后面只取1位,加0.5是四舍五入 f_temp=f_temp+0.05; return temp; /temp是整型/顯示程序/vo

34、id dis_temp(uint t) uchar a,b; write_com(0x80+0x40); a=t/100; write_date(a+0x30); delay(5); a=t%100/10; write_date(a+0x30); delay(5); write_date(0x2e); delay(5); a=t%100%10; write_date(a+0x30); delay(5); write_date(0xdf); delay(5); write_date(0x43); delay(5); /*/*智能*/void re200b()if(s0num=1)if(re=1

35、&& gm=1)if(s5num=0)s5num=1;if(re=0|gm=0)s5num=0;led(s5num); if(s0num=0)led(s5num);void main()/主函數(shù)uchar i;wr=0;init();led(0);write_com(0x01);for(i=0;i<8;i+)write_date(table2i);delay(20);delay(4000);init();while(1)keyscan();/按鍵掃描re200b();if(flag_ri=1)/當(dāng)鬧鐘中斷時進(jìn)入這里di();delay(100);di();delay(50

36、0);if(flag=0&&flag1=0)/正常工作時進(jìn)入這里keyscan();/按鍵掃描year=read_ds(9);/讀取12C887數(shù)據(jù)month=read_ds(8);day=read_ds(7);week=read_ds(6);shi=read_ds(4);fen=read_ds(2);miao=read_ds(0);write_sfm(10,miao);/送液晶顯示write_sfm(7,fen);write_sfm(4,shi);write_week(week);write_nyr(3,year);write_nyr(6,month);write_nyr(9,da

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論