版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于單片機的智能臺燈設(shè)計ThedesignofIntelligentTableLampBasedonMicrocomputer制作人員:摘要隨著科技的開展,單片機滲透到我們生活的各個領(lǐng)域,幾乎很難找到哪個領(lǐng)域沒有單片機的蹤跡,臺燈已是千家萬戶的必需生活用品,當(dāng)夜晚來臨時,人們摸黑去開燈,非常不方便,而當(dāng)離開時,人們又經(jīng)常忘記關(guān)燈而造成巨大的能源浪費。因此我們設(shè)計制作了一種智能臺燈,主要是以熱釋電紅外傳感器re200b,光敏電阻傳感器和單片機組成的紅外傳感控制電路。其原理是:以人體紅外輻射為傳感信號,當(dāng)人體在臺燈的范圍內(nèi)且環(huán)境光強較弱時,自動感應(yīng)開燈,省去黑夜摸燈的麻煩;當(dāng)人離開臺燈傳感器檢測范圍,自動感應(yīng)關(guān)燈。智能臺燈還可以進行光亮〔4檔〕的調(diào)節(jié),以便到達最舒適的光亮;臺燈還具有顯示時間與室溫的功能。關(guān)鍵詞:智能臺燈;at89s52;熱釋電紅外傳感器re200b;時鐘芯片ds12c887;溫度傳感器ds18b20;光敏傳感器。一.智能臺燈功能介紹智能臺燈智能臺燈光敏傳感器鬧鐘局部人體紅外感應(yīng)4檔光敏傳感器鬧鐘局部人體紅外感應(yīng)4檔光亮調(diào)節(jié)溫度顯示〔1〕、光亮調(diào)節(jié):在不同的情況下需要不同的光亮來滿足需求,因此我們通過給單片機四個IO口不同的電平,設(shè)置了四種光亮強度,以便到達不同的需求?!?〕、“天暗時,人來燈亮,人走燈滅〞功能的實現(xiàn):運用51單片機產(chǎn)生的方波信號驅(qū)動紅外發(fā)射管發(fā)射紅外線;運用三腳的紅外接收頭接收紅外信號,當(dāng)人擋住紅外信號,紅外信號就會反射被紅外接收頭接收;并且通過光敏傳感器對外界的光強進行判斷,在環(huán)境光線亮度達不到設(shè)定閾值時,DO端輸出高電平,當(dāng)外界環(huán)境光線亮度超過設(shè)定閾值時,DO端輸出低電平。由單片機檢測紅外接收頭是否接收到紅外信號,以及光敏傳感器的DO端的電平上下,從而決定led燈局部的亮度。由此實現(xiàn)“天暗時,人來燈亮,人走燈滅〞?!?〕、時鐘局部:運用時鐘芯片DS12C887產(chǎn)生時鐘信號,由單片機讀取其信號,并將數(shù)據(jù)處理之后送到液晶顯示。由于DS12C887內(nèi)部有集成的電池,所以即使斷電,時鐘仍會走時準確,從而使該臺燈更實用、更省電。此時鐘還配有按鍵,通過按鍵即可方便的調(diào)節(jié)時鐘,還有鬧鐘功能?!?〕、溫度顯示:運用DS18B20芯片感應(yīng)溫度,由單片機讀取其信號,并將數(shù)據(jù)處理后送到液晶顯示,從而顯示當(dāng)時的溫度。二、傳感器的選擇及功能介紹傳感器傳感器是能感受規(guī)定的被測量并按照一定的規(guī)律轉(zhuǎn)換成可用輸出信號的器件或裝置,它通常由敏感元件和轉(zhuǎn)換元件組成,它的性能直接影響到整個檢測電路,對檢測系統(tǒng)起著重要的作用。熱釋電紅外傳感器re200b紅外熱釋電處理芯片BISS0001我們所使用的BISS0001是一款具有較高性能的傳感信號處理集成電路,它配以熱釋電紅外傳感器和少量外接元器件構(gòu)成被動式的熱釋電紅外開關(guān)。它能自動快速開啟各類白熾燈、熒光燈、蜂鳴器、自動門、電風(fēng)扇、烘干機和自動洗手池等裝置,特別適用于企業(yè)、賓館、商場、庫房及家庭的過道、走廊等敏感區(qū)域,或用于平安區(qū)域的自動燈光、照明和報警系統(tǒng)。工作原理BISS0001是由運算放大器、電壓比擬器、狀態(tài)控制器、延遲時間定時器以及封鎖時間定時器等構(gòu)成的數(shù)?;旌蠈S眉呻娐?。首先,根據(jù)實際需要,利用運算放大器OP1組成傳感信號預(yù)處理電路,將信號放大。然后耦合給運算放大器OP2,再進行第二級放大,同時將直流電位抬高為VM(≈0.5VDD)后,將輸出信號V2送到由比擬器COP1和COP2組成的雙向鑒幅器,檢出有效觸發(fā)信號Vs。由于VH≈0.7VDD、VL≈0.3VDD,所以,當(dāng)VDD=5V時,可有效抑制±1V的噪聲干擾,提高系統(tǒng)的可靠性。COP3是一個條件比擬器。當(dāng)輸入電壓Vc<VR(≈0.2VDD)時,COP3輸出為低電平封住了與門U2,禁止觸發(fā)信號Vs向下級傳遞;而當(dāng)Vc>VR時,COP3輸出為高電平,進入延時周期。當(dāng)A端接“0〞電平時,在Tx時間內(nèi)任何V2的變化都被忽略,直至Tx時間結(jié)束,即所謂不可重復(fù)觸發(fā)工作方式。當(dāng)Tx時間結(jié)束時,Vo下跳回低電平,同時啟動封鎖時間定時器而進入封鎖周期Ti。在Ti時間內(nèi),任何V2的變化都不能使Vo跳變?yōu)橛行顟B(tài)〔高電平〕,可有效抑制負載切換過程中產(chǎn)生的各種干擾。時鐘芯片DS12C887特點可作為IBMAT計算機的時鐘和日歷與MC146818B和DS1287的管腳兼容在沒有外部電源的情況下可工作10年自帶晶體振蕩器及電池可計算到2100年前的秒、分、小時、星期、日期、月、年七種日歷信息并帶閏年補償用二進制碼或BCD碼代表日歷和鬧鐘信息有12和24小時兩種制式,12小時制時有AM和PM提示可選用夏令時模式可以應(yīng)用于MOTOROLA和INTEL兩種總線數(shù)據(jù)/地址總線復(fù)用內(nèi)建128字節(jié)RAM14字節(jié)時鐘控制存放器114字節(jié)通用RAM可編程方波輸出總線兼容中斷(/IRQ)
?三種可編程中斷時間性中斷可產(chǎn)生每秒一次直到每天一次中斷周期性中斷122ms到500ms時鐘更新結(jié)束中斷DS18B20溫度傳感器DS18B20的主要特征:全數(shù)字溫度轉(zhuǎn)換及輸出。先進的單總線數(shù)據(jù)通信。最高12位分辨率,精度可達土0.5攝氏度。12位分辨率時的最大工作周期為750毫秒??蛇x擇寄生工作方式。檢測溫度范圍為–55°C~+125°C(–67°F~+257°F)內(nèi)置EEPROM,限溫報警功能。64位光刻ROM,內(nèi)置產(chǎn)品序列號,方便多機掛接。多樣封裝形式,適應(yīng)不同硬件系統(tǒng)。三、實現(xiàn):〔一〕、硬件局部主體局部:〔兩條白線為跳線,外形需要,畫成了心形〕LED:電流放大電路:PS:單片機IO口電流不夠大,無法使燈泡足夠亮。按鍵局部:〔二〕、軟件局部#include<reg52.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;//調(diào)光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--";//液晶固定顯示內(nèi)容ucharcodetable1[]="::";ucharcodetable2[]="WELCOME!";voidwrite_ds(uchar,uchar);//函數(shù)申明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)//延時函數(shù){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voiddi()//蜂鳴器報警聲音{ beep=0; delay(100); beep=1;}voidwrite_com(ucharcom){//寫液晶命令函數(shù) rs=0; lcden=0; P0=com; delay(3); lcden=1; delay(3); lcden=0; }voidwrite_date(uchardate){//寫液晶數(shù)據(jù)函數(shù) rs=1; lcden=0; P0=date; delay(3); lcden=1; delay(3); lcden=0; }voidinit(){//初始化函數(shù) uchari; EA=1;//翻開總中斷 EX0=1;//開外部中斷1 IT0=1;//設(shè)置負跳變沿觸發(fā)中斷 EX1=1;//開外部中斷1 IT1=1;//設(shè)置負跳變沿觸發(fā)中斷 flag1=0;//變量初始化 t0_num=0; s1num=0; week=1; lcden=0; rd=0;/*以下幾行在首次設(shè)置DS12C887時使用,以后不必再寫入 write_ds(0x0A,0x20);//翻開振蕩器 write_ds(0x0B,0x26);//設(shè)置24小時模式,數(shù)據(jù)二進制格式 //開啟鬧鈴中斷 set_time();//設(shè)置上電默認時間 -----------------------------------------------------*/ write_com(0x38);//1602液晶初始化 write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); for(i=0;i<15;i++)//寫入液晶固定局部顯示 { write_date(table[i]); delay(1); } write_com(0x80+0x40); for(i=0;i<16;i++) { write_date(table1[i]); delay(1); }}voidwrite_sfm(ucharadd,chardate){//1602液晶刷新時分秒函數(shù)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液晶刷新年月日函數(shù)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){//寫液晶星期顯示函數(shù) 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; }}voidkeyscan(){ 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++;//記錄按下次數(shù) if(flag1==1) if(s1num==4) s1num=1; flag=1; while(!s1);di(); switch(s1num) {//光標閃爍點定位 case1:write_com(0x80+0x40+10); write_com(0x0f); break; case2:write_com(0x80+0x40+7); break; case3:write_com(0x80+0x40+4); break; case4:write_com(0x80+12); break; case5:write_com(0x80+9); break; case6:write_com(0x80+6); break; case7:write_com(0x80+3); break; case8:s1num=0; write_com(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)//只有當(dāng)S1按下后,才檢測S2和S3 { if(s2==0) { delay(10); if(s2==0) { while(!s2);di(); switch(s1num) {//根據(jù)功能鍵次數(shù)調(diào)節(jié)相應(yīng)數(shù)值 case1: miao++; if(miao==60) miao=0; write_sfm(10,miao); write_com(0x80+0x40+10); break; case2: fen++; if(fen==60) fen=0; write_sfm(7,fen); write_com(0x80+0x40+7); break; case3: shi++; if(shi==24) shi=0; write_sfm(4,shi); write_com(0x80+0x40+4); break; case4: week++; if(week==8) week=1; write_week(week); write_com(0x80+12); break; case5: day++; if(day==32) day=1; write_nyr(9,day); write_com(0x80+9); break; case6: month++; if(month==13) month=1; write_nyr(6,month); write_com(0x80+6); break; case7: 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ù)值 case1: miao--; if(miao==-1) miao=59; write_sfm(10,miao); write_com(0x80+0x40+10); break; case2: fen--; if(fen==-1) fen=59; write_sfm(7,fen); write_com(0x80+0x40+7); break; case3: shi--; if(shi==-1) shi=23; write_sfm(4,shi); write_com(0x80+0x40+4); break; case4: week--; if(week==0) week=7; write_week(week); write_com(0x80+12); break; case5: day--; if(day==0) day=31; write_nyr(9,day); write_com(0x80+9); break; case6: month--; if(month==0) month=12; write_nyr(6,month); write_com(0x80+6); break; case7: year--; if(year==-1) year=99; write_nyr(3,year); write_com(0x80+3); break; } } } } if(s4==0)//檢測S4 { delay(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,miao); write_ds(3,fen); write_ds(5,shi); } else {//進入鬧鐘設(shè)置 read_alarm();//讀取原始數(shù)據(jù) miao=amiao;//重新賦值用以按鍵調(diào)節(jié) fen=afen; shi=ashi; write_com(0x80+0x40); write_date('R');//顯示標志 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) { di(); 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); }}voidwrite_ds(ucharadd,uchardate){//寫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; }ucharread_ds(ucharadd){//讀12C887函數(shù) uchards_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; returnds_date; }/*---首次操作12C887時給予存放器初始化---voidset_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); write_ds(8,5); write_ds(9,15); }----------------------------------------*/voidread_alarm(){//讀取12C887鬧鐘值 amiao=read_ds(1); afen=read_ds(3); ashi=read_ds(5);}/***********ds18b20**********/voiddsreset(void)//18B20復(fù)位,初始化函數(shù){uinti;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bittempreadbit(void)//讀1位函數(shù){uinti;bitdat;ds=0;i++;//i++起延時作用ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return(dat);}uchartempread(void)//讀1個字節(jié){uchari,j,dat;dat=0;for(i=1;i<=8;i++){j=tempreadbit();dat=(j<<7)|(dat>>1);//讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在DAT里}return(dat);}voidtempwritebyte(uchardat)//向18B20寫一個字節(jié)數(shù)據(jù){uinti;ucharj;bittestb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb)//寫1{ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0;//寫0i=8;while(i>0)i--;ds=1;i++;i++;}}}voidtempchange(void)//DS18B20開始獲取溫度并轉(zhuǎn)換{dsreset();delay(1);tempwritebyte(0xcc);//寫跳過讀ROM指令tempwritebyte(0x44);//寫溫度轉(zhuǎn)換指令}uintget_temp()//讀取存放器中存儲的溫度數(shù)據(jù){uchara,b;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ù)點后面只取1位,加0.5是四舍五入f_temp=f_temp+0.05;returntemp;//temp是整型}////////////////////顯示程序//////////////////////////voiddis_temp(uintt){uchara,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);}/************************************************//*智能*/voidre200b(){ if(s0num==1) { if(re==1&&gm==1) { if(s5num==0) { s5num=1; } } if(re==0||gm==0) { s5num=0; } led(s5num); } if(s0num==0) { led(s5num); }}voidmain()//主函數(shù){ uchari; wr=0; init(); led(0); write_com(0x01); for (i=0;i<8;i++) { write_date(table2[i]); delay(20); } delay(4000); init(); while(1) { keyscan();//按鍵掃描 re200b(); if(flag_ri==1)//當(dāng)鬧鐘中斷時進入這里 { di(); delay(100); di(); delay(500); } if(flag==0&&flag1==0)//正常工作時進入這里 { 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);//送
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年北京經(jīng)濟管理職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 二零二五年度文化教育機構(gòu)合作辦學(xué)協(xié)議3篇
- 二零二五年度茶樓承包經(jīng)營管理合同3篇
- 二零二五年度白酒進口貿(mào)易合同書
- 二零二五年度項目安全生產(chǎn)責(zé)任及計劃合同履行規(guī)范6篇
- 存儲協(xié)議書(2篇)
- 二零二五年度荒料加工及銷售全面合作協(xié)議3篇
- 二零二五年度監(jiān)理工程師補考輔導(dǎo)協(xié)議
- 二零二五年進口化妝品質(zhì)量標準履行合同3篇
- 二零二五年度安全生產(chǎn)培訓(xùn)課程開發(fā)與推廣合同規(guī)范文本
- 2024年湖南省長沙市中考數(shù)學(xué)試題(含解析)
- 2024年大學(xué)華西醫(yī)院運營管理部招考聘用3人高頻難、易錯點500題模擬試題附帶答案詳解
- 分股退股協(xié)議書模板下載
- 深圳市南山區(qū)2024-2025學(xué)年數(shù)學(xué)三年級第一學(xué)期期末教學(xué)質(zhì)量檢測模擬試題含解析
- 配電網(wǎng)工程工藝質(zhì)量典型問題及解析
- 2023年二輪復(fù)習(xí)解答題專題二:一次函數(shù)的應(yīng)用方案設(shè)計型(原卷版+解析)
- 木制家具保修協(xié)議
- 彈性力學(xué)仿真軟件:ANSYS:優(yōu)化設(shè)計與靈敏度分析技術(shù)教程
- 2024抖音直播知識考試題庫200題(含答案)
- 2024年大學(xué)英語四級真題CET及答案解析
- 2024上海市化工職業(yè)病防治院上海市職業(yè)安全健康研究院工作人員招聘20人(高頻重點復(fù)習(xí)提升訓(xùn)練)共500題附帶答案詳解
評論
0/150
提交評論