




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、工作在手動模式工作在手動模式是否按下打開否是電動機正轉否是是否按下停止是否按下關閉否是完全打開是電動機反轉否是 是否按下停止是 完全打開否否否否否否圖4. 3手動模式工作流程圖4.2 BH1750FVI數字型光強度值讀取主要程序寫好BH1750FVI的初始化程序后,主要通過Single_Read_BH1750(uchar REG_Address)和void Multiple_read_BH1750(void)子程序讀取光線強度數據。uchar Single_Read_BH1750(uchar REG_Address) /單字節讀取/ uchar REG_data; BH1750_Start()
2、; /起始信號/ BH1750_SendByte(SlaveAddress); /發送設備地址加寫信號/ BH1750_SendByte(REG_Address); /發送存儲單元地址,從最開始的單元開始/ BH1750_Start(); BH1750_SendByte(SlaveAddress+1); /發送設備地址加讀信號/ REG_data=BH1750_RecvByte(); /讀出寄存器數據/BH1750_SendACK(1); BH1750_Stop(); / /信號停止/ return REG_data; void Multiple_read_BH1750(void) /連續讀出
3、BH1750內部數據 uchar i; BH1750_Start(); /起始信號/ BH1750_SendByte(SlaveAddress+1); /發送設備地址加讀信號/ for (i=0; i2) flag_num=0; sum=sum*10+buf; for(i=0;i1) zidong=0; if(wangnianli1) wangnianli=0; for(i=0;i4;i+)/關閉接收 防止進入死循環/ ircodei=0; 4.4溫濕度傳感器工作程序void read_init() DHT=0; /使DHT11低電平并延時至少18ms/delay_ms(21);DHT=1;
4、/置DHT11高電平2040us,并等待從機相應/delay_10us();DHT=1;if(!DHT) /從機發出響應信號/ flag=2;while(!DHT)&flag+);/等待從機發高電平結束/flag=2;while(DHT&flag+);/開始采集數據/tr_shiZ=read_datadht(); /采集濕度整數部分/tr_shiX=read_datadht(); /采集濕度小數部分/tr_wenZ=read_datadht();/采集溫度整數部分/tr_wenX=read_datadht();/采集溫度小數部分/check=read_datadht();/采集校驗位/DHT=
5、0;delay(20); /采集完數據后/ char read_datadht()uchar i,num,tempp;num=0;for(i=0;i8;i+) flag=2;while(!DHT)&flag+);/等待50毫秒低電平/delay_10us(); /延時判斷0還是1/if(DHT=1) tempp=1;flag=2;while(DHT&flag+);elsetempp=0;num=1;num|=tempp; return(num);濕度 (shiZ)的值和預設定值shidu0進行比較,如果在設定的早晚時間之間,當shiZ大于shidu0就執行打開窗簾通風。4.5早晚定時開窗主要程
6、序在早晚定時的程序中,如果當前時間不在早晚定時之間,dayflag為0,如果當前時間在早晚定時之間,dayflag為1。程序段為:read_init(); /讀傳感器數據/read_time(); /讀時間子程序/if(am0*10000+am1*10)(shi*10000+fen*10)(SET_guangqiang+20)|(dayflag=0)&(closeall=0)&zidong).4.6電動機模塊以打開窗簾為例,程序段為:dakai() int i,j; for(i=0;i16;i+) for(j=0;j(SET_guangqiang+20)|(dayflag=0)&(closea
7、ll=0)&zidong)while(tempshidu0)&(dayflag=1)&(openall=1)&zidong)只有closeall為低電平才能執行第一個while循環體內容(關閉操作),只有openall為高電平才能執行第一個while循環體內容(打開操作)。4.8系統主程序void main()uint SET_guangqiang; uchar i,j; while(1) float tempp; delay_ms(200); /延時200ms lcd_init(); /初始化LCD Init_BH1750(); /初始化BH1750 timer0init(); int0in
8、it(); while(1) if(k4flag=1) /如果按下k4即設置鍵,進入調整時間 lcd_wcmd(0 x80);xianshi(智能窗簾 時鐘 );lcd_wcmd(0 x91);xianshi(20 年 月 日);lcd_wcmd(0 x8A);xianshi(星 期 ); lcd_wcmd(0 x9a);xianshi(00: 00: 00 );while(k4flag=1)if(k1=0) read_time(); /讀時間子程序dingwei(); keyscan(); /設置退出if(key4=0)k4flag=0; if(key4=0)k4flag=0;break;
9、if(k4flag=0) read_init(); /讀傳感器數據 read_time(); /讀時間子程序 /if(am0*10000+am1*10)(shi*10000+fen*10)(pm0*10000+pm1)*10) if(am0*10000+am1*10)(shi*10000+fen*10)(SET_guangqiang+20)|(dayflag=0)&(closeall=0)&zidong) guanbi(); /晚上(設定值)或者光線小于設定值關閉窗簾 while(tempshidu0)&(dayflag=1)&(openall=1)&zidong) dakai(); /早上(
10、設定值)或者光線大于設定值打開窗簾 while(zidong=0&(kai=1|guan=1) /手動 gkey();while(zidong=0&kai=1&openall=1)/手動下打開 gkey(); dakai(); if(openall=0)break; while(zidong=0&guan=1&closeall=0)/手動下關閉 gkey(); guanbi(); if(closeall=1)break; 4.9小結本設計的模塊較多,要完成整體設計,必須模塊化設計。在開始,寫一個簡單的液晶12864的程序調試,因為利用它可以調試并顯示其他模塊的工作情況并顯示出來。首先,進行顯示
11、界面的規劃、進行紅外遙控解碼、功能鍵等程序的編寫,編寫好DS1302的工作程序。然后,進行光線強度傳感器、濕度傳感器、紅外對管程序的設計。最后,把各個模塊程序加入的主程序中完成整體程序的設計。5 系統調試5.1各模塊調試5.1.1電機模塊調試電動機模塊P1 =(P1&0 x0f)|(0 xf0&FFWj使得P1的高字節(FFWj的值依j的變化次循環)在不影響P1低字節的變化,去驅動步進電機。調節延時函數即控制電動機轉速。FFW數組的值為0 x1f,0 x3f,0 x2f,0 x6f,0 x4f,0 xcf,0 x8f,0 x9f,這樣滿足電動機正轉。同理同理可以利用REV數組的值為0 x9f,
12、0 x8f,0 xcf,0 x4f,0 x6f,0 x2f,0 x3f,0 x1f完成電動機反轉。5.1.2時鐘模塊調試經過24小時過5秒的走時,測出和網絡時間吻合,如圖5.1時鐘電路和程序正常。測試前的走時測試前的走時24小時之后的走時圖5.1 時鐘走時測試調試5.1.3濕度模塊調試圖5.2所示為室內濕度值和向濕度傳感器加濕氣的比較(濕度值55%RH增加到81%RH),濕度傳感器模塊工作正常。室內濕度值室內濕度值加濕氣后的濕度值圖5.2 濕度傳感器調試5.1.4光線模塊調試 在對著窗子較強的光線強度和室內燈光調試對比(光線強度由224Lx減少到148Lx)測試圖如圖5.3所示。圖5.3 光線
13、強度傳感器測試調試圖5.3 光線強度傳感器測試調試5.1.5紅外遙控按鍵解碼及調試將遙控器按鍵面板如圖5.4所示的按鍵解碼,其對應的鍵值為圖5.5所示。00FF400FF463900FF473800FF443B00FF403F00FF433C00FF077800FF156A00FF097600FF166900FF199600FF0D7200FF0C7300FF186700FF5E2100FF087700FF1C6300FF5A2500FF432D00FF522D00FF4A35開 開 停 關 手/自 時間 確定 0 設置 1 2 3 4 5 6 7 8 9 圖5.4 遙控版面重新設計圖5.5
14、遙控解碼值5.1.6將電路按照圖3.12連接起來,測得P00和P01的電壓都0.2V,用一張透光性不強的布料穿過紅外對管,此時,接收管截止,測得P00和P01的電壓都4.6V。2個全局變量openall(完全打開)和closeall(完全關閉)分別為P00和P01的值,用于反饋信號(0.2V為低電平、4.6V為高電平),此時能夠使得電動機在窗簾完全打開和完全關閉時停下來。5.2系統整體調試經模塊調試,各模塊的工作正常。將整體程序燒錄,系統整體整體工作如下:首先,程序初始化,其包括單片機、液晶、各傳感器等模塊的初始化。然后,進入界面后按照DS1302原有的時間進行走時,該界面也提供一個萬年歷的功
15、能,可以有用遙控查看時間(包括年、月、日、時、分、秒、星期的查看),如果不進行時間調整,就直接進入自動模式和手動模式的任意切換,默認下為自動模式。其中,圖5.6為用遙控設置預設值(最適宜的光線強度值、最大濕度值、早晚晚開窗時間)的工作界面;圖5.7 為自動模式下光強變化工作圖片,預設置的最適宜光強為150Lx,室內光強控制在窗簾在150+20Lx,如大于170就關閉窗簾調整,小于130則打開窗簾調整。圖5.8 是手動模式下關窗工作圖片,在此工作模式下,窗簾的開關不受預設值控制,只可以用遙控進行開關或者停等操作。圖5.6遙控設置預設值工作圖片圖5.6遙控設置預設值工作圖片圖5.7 自動模式下光強
16、變化工作圖片圖5.7 自動模式下光強變化工作圖片圖5.8 手動模式下關窗工作圖片圖5.8 手動模式下關窗工作圖片5.3小結經過前面幾章的工作,調試階段很順利的進行。本章節先對顯示模塊、時鐘模塊、傳感器等功能模塊電路分別調試,然后整體調試直到調試成功。該控制器的顯示模塊、時鐘模塊、遙控器模塊、電動機模和各傳感器等都能正常工作,并且設計的功能和結果都達到了預期目的。該設計具體能經行光線強度檢測、溫濕度檢測、紅外遙控遠程控制;具有時鐘定時及萬年歷功能、各參數(光線強度、濕度、手動和自動工作模式、萬年歷等)的實時顯示功能;以及窗簾完全關閉和打開的自動檢測和控制。最實用的是,其可以根據自己設定的光線強度
17、值自動控制窗簾的打開程度;當濕度過大時能打開窗簾;早晚定時開關窗簾。最終在模塊化設計和不斷調試中完成各項指標和功能。6 結束語6.1 結論本設計以STC89C54RD+為主控芯片,利用數字光強度、濕度、溫度、紅外對管等傳感器為外圍元件,經過信號電量轉換送人單片機,然后利用單片機發送控制信號驅動電機的轉動, 最終完成了以下功能:光線強度檢測:通過光線強度傳感器實時檢測光線強弱,控制窗簾打開的合適程度,為室內提供設定的光線強度;時鐘定時及萬年歷功能:能提供一個簡單的萬年歷功能并能夠定時早晚開關窗簾;紅外遙控遠程控制:可以用遙控進行窗簾的開和關,以及各個參數的設置;濕度檢測:能完成濕度檢測,當房屋內
18、濕度太大能自動打開窗簾進行通風;各參數(光線強度、濕度、工作模式、萬年歷等)的實時顯示; 窗簾的完全關閉和打開的自動檢測及控制等。6.2 展望本次設計的電動機模塊是模擬的有較大力矩的電動機,如果把該設計投入使用,則需要將它換成實際需要的電動機用控制脈沖控制即可。本設計本來是完成智能窗的設計,由于缺少機械的器件,換成了智能窗簾控制部分的設計,如果有需要可以加上滑輪組和玻璃窗即可完成設計。本設計還可以用IOIO for Android Google IO PIC單片機進行設計,它可以代替本設計中的紅外遙控完成無線控制。隨著Android設備的快速增加,用手機等Android設備去控制窗簾,可以顯得
19、更加智能和方便。由于本學期的時間被耽擱,很遺憾沒去整合Android知識,直接用學過的51單片機進行了設計,希望以后有空能完成Android系統的智能窗控制器的設計。參考文獻1 孫向濱智能家居控制系統展望J HYPERLINK 01:8088/QK/90436X/index.asp?CSID=%7bBB7CC176-C7F8-4E3F-A833-E07233A54A53%7d 科協論壇,2012(9):30-312 侯海濤國內外智能家居發展現狀J HYPERLINK 01:8088/QK/90436X/index.asp?CSID=%7bBB7CC176-C7F8-4E3F-A833-E072
20、33A54A53%7d 建材發展導向,2004(5):92-933 馮旭升奧蘭AL.CK01的智能窗簾機J HYPERLINK 01:8088/QK/90436X/index.asp?CSID=%7bBB7CC176-C7F8-4E3F-A833-E07233A54A53%7d 住宅科技,2003(11):36-374 HYPERLINK javascript:WriterSearch(李勝多); 李勝多, HYPERLINK javascript:WriterSearch(張還); 張還, HYPERLINK javascript:WriterSearch(佟春明); 佟春明基于PLC的多功
21、能智能窗的設計J青島農業大學學報(自然科學版),2010,27(1):84-885 陳海松, HYPERLINK javascript:WriterSearch(夏繼媛); 夏繼媛基于Zigbee技術的智能窗簾網絡化控制系統J電子設計工程,2012,20(15):136-1386 HYPERLINK /book/search_pub.php?category=01&key2=%CD%F5%BF%A1%BD%DC&order=sort_xtime_desc t _blank 王俊杰傳感器與檢測技術M北京: HYPERLINK /book/search_pub.php?category=01&ke
22、y3=%C7%E5%BB%AA%B4%F3%D1%A7%B3%F6%B0%E6%C9%E7&order=sort_xtime_desc t _blank 清華大學出版社,20117 HYPERLINK 08:81/ZK/search.aspx?Query=%e9%99%88%e6%97%a6%e8%8a%b1&Type=A 陳旦花單片機最小系統的設計與應用J HYPERLINK 08:81/ZK/journal.aspx?q=/86302X/ t _blank 無線互聯科技,2012(10):103-1048 李偉躍基于時鐘芯片 DS1302 的萬年歷的設計J技術創新,2012(9):20-2
23、19 HYPERLINK javascript:WriterSearch(云中華); 云中華, HYPERLINK javascript:WriterSearch(白天蕊); 白天蕊基于BH1750FVI的室內光照強度測量儀J HYPERLINK 01:8088/QK/83588X/index.asp?CSID=%7bF9F6BF1C-F1D1-441E-98D1-5BF0B9C77DA3%7d 單片機與嵌入式系統應用,2012,12(6):27-2910 倪健,董強編碼解碼技術在紅外遙控器中的實現N中國民航飛行學院學報,2004,15(1):35-3611 HYPERLINK 08:81/Z
24、K/search.aspx?Query=%e6%9c%b1%e5%bf%97%e4%bc%9f&Type=A 朱志偉, HYPERLINK 08:81/ZK/search.aspx?Query=%e5%88%98%e6%b9%98%e4%ba%91&Type=A 劉湘云基AT89S51的紅外遙控解碼的實現J HYPERLINK 01:8088/QK/83588X/index.asp?CSID=%7bF9F6BF1C-F1D1-441E-98D1-5BF0B9C77DA3%7d 科技信息,2009(34):109-11212 郭豫榮溫濕度傳感器的原理及應用J HYPERLINK 01:8088/
25、QK/83588X/index.asp?CSID=%7bF9F6BF1C-F1D1-441E-98D1-5BF0B9C77DA3%7d 電子元器件應用,2012,14(11):35-5613 王曉明電動機的單片機控制M北京:北京航空航天大學出版社,200214 HYPERLINK javascript:WriterSearch(劉瑞); 王兆安,劉進軍 HYPERLINK 08:81/qk/97196A/201105/38181077.html t _blank 電力電子技術M HYPERLINK 08:81/ZK/journal.aspx?q=/97196A/ t _blank 北京:機械工
26、程出版社,201115 HYPERLINK /book/search_pub.php?category=01&key2=%CE%C2%D7%D3%EC%F7&order=sort_xtime_desc t _blank 溫子祺51單片機C語言創新教程M北京: HYPERLINK /book/search_pub.php?category=01&key3=%B1%B1%BE%A9%BA%BD%BF%D5%BA%BD%CC%EC%B4%F3%D1%A7%B3%F6%B0%E6%C9%E7&order=sort_xtime_desc t _blank 航空航天大學出版社,2011致 謝該控制器設計的
27、最終結果達到了預期的目的,在這過程中也遇到很多的困難,在此衷心感謝我的指導老師嚴文娟的悉心指導,從論文的選題、文獻的采集、總體設計、實物的制作、元件的購買、論文結構的布局到論文定稿,從標題到標點,內容到格式,她都費盡了心血。感謝嚴老師的辛勤栽培和孜孜教誨,在她的支持和幫助下順利地完本設計系統的設計及論文撰寫。在此,還要感謝長江師范學院物理學與電子工程學院和所有老師、同學們的支持,感謝他們在技術上的指導和為我們提供軟硬件的支持。特別感謝實驗室的各位老師對該設計做PCB由于自身專業水平實際應用能力及經驗有限,整篇論文肯定存在尚未發現的缺點和錯誤。懇請閱讀此篇論文的老師、同學,多予指正,不勝感激!附
28、錄A 原理圖、印制板圖和實物圖原理圖:印制板圖:實物圖及實物工作圖:成品圖:工作圖自動模式自動模式手動模式窗簾打開查看萬歷年窗簾打開查看萬歷年參數設置參數設置附錄B 元件清單CommentValueDesignatorFootprint晶振11.0591MHZB1R38晶振32.768KZB2R38瓷片電容CapacitorC1, C2VP32-3.2電解電容CapacitorC3CAPR5-4X53V電源3VCR2032PCBComponent_1 - duplicate - duplicate發光二極管Typical BLUE SiC LEDD13.5X2.8X1.9紅外對管發射管-D2,
29、 D43.5X2.8X1.9紅外對管接收管-D3, D5TO-220_A排阻1KR0HDR1X9電阻1K(R1,R4),10K,4.7K(R5-R8),220(R9,R11),9.1k,(R10,R12)R1, R2, R4,R5, R6, R7, R8, R9, R10, R11, R12AXIAL-0.4電位器1KR3PCBComponent_1 - duplicate3按鍵-S0 ,S1, S2, S3, S4PCBComponent_1 - duplicate4按鈕-S5PCBComponent_1 - duplicate4單片機STC89C54U1DIP40時鐘芯片Trickle C
30、harge Timekeeping Chip ,DS1302U2DIP8紅外接收頭和遙控器1838TU3HDR1X3H濕度傳感器DHT11U4HDR1X4光線強度傳感器BH1750FVIU5HDR1X5電動機驅動芯片ULN2003ADU6D016液晶顯示帶中文字庫12864液晶12864HDR1X20注:不包括電源元件清單附錄C 使用說明書接上電源后,進行初始化,默認工作在自動模式:通過按鍵可以調整萬年歷的時間設置和查看;通過遙控可完成設置改控制器的工作參數(最適宜的光線強度值、最大濕度值、早晚開窗時間等);在12864的界面上能對各參數的實時顯示;在自動模式下預設值中,到開窗時間就打開窗簾,
31、到關窗時間就關閉窗簾。有一個最適宜的光強度值,可根據實際的需要設點其值的大小。在開窗和關窗的設定值之間,如果高于設定濕度最大值,就會打開窗簾進行通風。按下遙控的手動和自動鍵,就可進行手動模式和自動模式的切換,在手動模式下可隨意開關窗簾,不受各預設參數的影響,按下“開”就打開,按下“關”就關閉,按下“停”就停止工作。根據需要可以調滑動變阻器的值,改變12864的顯示的亮暗程度。本設計包含有電源模塊、光線傳感器模塊、溫濕度傳感器模塊、紅外遙控器模塊、紅外對管模塊,必要時可分別對其維護。光線強度可以根據環境照度值(陰天室內:550;陰天室外:50500;晴天室內:1001000;夏季中午太陽光下的照
32、度:約為10*6次方;閱讀書刊時所需的照度:5060;家用攝像機標準照度:1400)進行設定自己要求??梢愿鶕钣欣姆啦 ⒅尾…h境(40%55%RH;圖書、文物保管環境:40%-60%RH;棉毛織品存放:40%-60%RH;糖果、點心存放:50%60%RH;蔬菜、水果存放:50%70%RH;糧食存放:50%70%RH)設定開窗的最大濕度值。附錄D 程序主要程序:#include #include #include #include #include #include #define uchar unsigned char#define uint unsigned int#define Sla
33、veAddress 0 x46 uchar k4flag; uchar dayflag; uchar flag_num=0; uchar arrows_x=1; uchar line_num=4;uchar row_num=5; uchar set_flag,kai,guan,shoudong,zidong=1,wangnianli;uint disp4;uchar k1;uchar plus=0,sub=0;uchar sum=0;uchar nian,yue,ri,xq,shi,fen,miao;uchar nian1,yue1,ri1,xq1,shi1,fen1,miao1;void x
34、ianxq(uchar xq);char read_datadht(); /按鍵sbit key3=P10;sbit key2=P11;sbit key1=P12;sbit key4=P13;sbit openall=P00;sbit closeall=P01;sbit clk=P34;sbit IO=P35;sbit rst=P36;sbit ACC0=ACC0;sbit ACC7=ACC7;void delay(uchar z)uint x,y;for(x=z;x0;x-) for(y=110;y0;y-);sbit DHT= P37; sbit SCL=P30; sbit SDA=P31
35、; sbit LCD_RS=P07; sbit LCD_RW=P06;sbit LCD_EN=P05; sbit LCD_PSB = P04;sbit LCD_RST = P03;uchar idata str1= ;/用來存放濕度數據unsigned char idata str2= ;/用來存放溫度數據 unsigned char idata str3= ;/用來存放光強數據unsigned char idata str4=自動; unsigned char idata str5=手動;unsigned char idata am3=7,30,0;unsigned char idata p
36、m3=20,0,0;unsigned char idata shidu1=70;unsigned char idata guangqiang2=1,50;unsigned char code dis2 = 濕度 %RH ;unsigned char code dis3 = 光強 LX ;unsigned char code dis4 = 窗簾模式: ;unsigned long idata zao_time_flag;/早上打開窗簾的時間標志unsigned long idata now_time_flag;unsigned long idata wan_time_flag; /晚上打開窗簾的
37、時間標志typedef unsigned char BYTE;typedef unsigned short WORD;typedef unsigned char unint8; typedef unsigned char unint16; BYTE BUF8; uchar ge,shi2,bai,qian,wan; int dis_data; unint8 TH_data,TL_data,RH_data,RL_data,CK_data;unint8 TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;unsigned int temp_s,temp_w;unint8
38、 com_data,untemp,temp;unint8 respond; uchar shiZ,shiX,wenZ,wenX,check;uchar tr_shiZ,tr_shiX,tr_wenZ,tr_wenX;uchar flag;/定義紅外解碼所用變量char irtime; uchar startflag,bitnum,irreceok,irprosok,l;uchar idata irdata32;uchar idata ircode4;uchar idata dis88; void timer0init(void)/計時器初始化TMOD=0X02;TH0=0X00;TL0=0X0
39、0;ET0=1;EA=1;TR0=1;void int0init(void) IT1=1;EX1=1;EA=1;void irpros(void) uchar k,i,j;uchar value;k=1;for(j=0;j4;j+)for(i=0;i1;if(irdatak6)value=value | 0 x80;k+;ircodej=value;irprosok=1;/以下為中斷服務程序/void timer0() interrupt 1irtime+;void int0 () interrupt 2 if(startflag) if(irtime32) bitnum=0;irdatabi
40、tnum=irtime;irtime=0;bitnum+;if(bitnum=33)bitnum=0;irreceok=1; else startflag=1;irtime=0; /*延時程序*/void delayNOP()_nop_(); _nop_(); _nop_(); _nop_(); void delay_ms(unsigned char ms) unsigned char i; while(ms-) for(i = 0; i0)lcd_wdata(*s);s+;void lcd_pos(unsigned char X,unsigned char Y)unsigned char p
41、os; if (X=1) pos=0 x80; else if(X=2) pos=0 x90;else if(X=3)pos=0 x88; else if(X=4)pos=0 x98; lcd_wcmd(Y | pos); /*12864end*/*BH1750程序段*/void BH1750_Start()/起始信號 SDA = 1; /拉高數據線/ SCL = 1; /拉高時鐘線/ Delay5us(); /延時/ SDA = 0; /產生下降沿/ Delay5us(); / /延時/ SCL = 0; / /拉低時鐘線/void BH1750_Stop() /停止信號 SDA = 0;
42、SCL = 1; Delay5us(); SDA = 1; /產生上升沿 Delay5us(); void BH1750_SendACK(bit ack)/發送應答信號入口參數:ack (0:ACK 1:NAK) SDA = ack; SCL = 1; Delay5us(); SCL = 0; /拉低時鐘線 Delay5us(); bit BH1750_RecvACK()/接收應答信號 SCL = 1; Delay5us(); CY = SDA; SCL = 0; Delay5us(); return CY;void BH1750_SendByte(BYTE dat) /向IIC總線發送一個字
43、節數據 BYTE i; for (i=0; i8; i+) dat = 1; SDA = CY; /送數據口 SCL = 1; Delay5us(); SCL = 0; Delay5us(); BH1750_RecvACK();BYTE BH1750_RecvByte()/從IIC總線接收一個字節數據 BYTE i; BYTE dat = 0; SDA = 1; /使能內部上拉,準備讀取數據, for (i=0; i8; i+) dat = 1; SCL = 1; Delay5us(); dat |= SDA; SCL = 0; Delay5us(); return dat;void Sing
44、le_Write_BH1750(uchar REG_Address) BH1750_Start(); /起始信號 BH1750_SendByte(SlaveAddress); BH1750_SendByte(REG_Address); / BH1750_SendByte(REG_data); BH1750_Stop(); /*/*單字節讀取*/*/uchar Single_Read_BH1750(uchar REG_Address) uchar REG_data; BH1750_Start(); BH1750_SendByte(SlaveAddress); BH1750_SendByte(RE
45、G_Address); BH1750_Start(); BH1750_SendByte(SlaveAddress+1); /發送設備地址+讀信號 REG_data=BH1750_RecvByte(); /讀出寄存器數據BH1750_SendACK(1); BH1750_Stop(); return REG_data; void Multiple_read_BH1750(void)/連續讀出BH1750內部數據 uchar i; BH1750_Start(); BH1750_SendByte(SlaveAddress+1); for (i=0; i3; i+) BUFi = BH1750_Rec
46、vByte(); if (i = 3) BH1750_SendACK(1); else BH1750_SendACK(0); /回應ACK BH1750_Stop(); / /停止信號 Delay5ms();void Init_BH1750()/初始化BH1750 Single_Write_BH1750(0 x01); /*BH1750程序段end*/*DHT11溫濕度傳感器*void read_init()DHT=0; delay_ms(21);DHT=1; delay_10us();delay_10us();delay_10us();delay_10us();DHT=1;if(!DHT)
47、flag=2;while(!DHT)&flag+); flag=2;while(DHT&flag+);tr_shiZ=read_datadht();tr_shiX=read_datadht();tr_wenZ=read_datadht();tr_wenX=read_datadht();check=read_datadht();DHT=0;delay(20);/采集完數據后 char read_datadht()uchar i,num,tempp;num=0;for(i=0;i8;i+)flag=2;while(!DHT)&flag+); delay_10us();/延時判斷0還是1delay_
48、10us();delay_10us(); delay_10us();if(DHT=1) tempp=1;flag=2;while(DHT&flag+);elsetempp=0;num0;i-)IO=ACC0;clk=1;clk=0;ACC=ACC1;return;uchar OutputByte() uchar i;for(i=8;i0;i-)ACC=ACC1;ACC7=IO;clk=1;clk=0; return(ACC);void write_ds1302(uchar add,uchar date) rst=0;_nop_();clk=0;_nop_();rst=1; InputByte(
49、add);_nop_();InputByte(date);clk=1;_nop_();rst=0;uchar read_ds1302(uchar add) uchar date;rst=0;_nop_();clk=0;_nop_();rst=1;InputByte(add);date=OutputByte();clk=1;_nop_();rst=0;return(date);void BCDTO(uchar num1,uchar num2) num2=(num1&0 x70)4)*10+(num1&0 x0f);/return(num2);void TOBCD(uchar num1,uchar
50、 num2)num1=(num2/10)4|(num2%10);/return(num1);void write_time()write_ds1302(0 x8e,0 x00);/TOBCD(nian1,nian);nian1=(nian/10)4|(nian%10);write_ds1302(0 x8c,nian1);/年/TOBCD(yue1,yue);yue1=(yue/10)4|(yue%10);write_ds1302(0 x88,yue1);/月/TOBCD(ri1,ri);ri1=(ri/10)4|(ri%10);write_ds1302(0 x86,ri1);/日/TOBCD(
51、xq1,xq);xq1=(xq/10)4|(xq%10);write_ds1302(0 x8A,xq1);/星期/TOBCD(shi1,shi);shi1=(shi/10)4|(shi%10);write_ds1302(0 x84,shi1);/時/TOBCD(fen1,fen);fen1=(fen/10)4|(fen%10);write_ds1302(0 x82,fen1);/分/TOBCD(miao1,miao);miao1=(miao/10)4)*10+(miao1&0 x0f);fen1=read_ds1302(0 x83);/分/BCDTO(fen1,fen);fen=(fen1&0
52、 x70)4)*10+(fen1&0 x0f);shi1=read_ds1302(0 x85);/時/BCDTO(shi1,shi);shi=(shi1&0 x70)4)*10+(shi1&0 x0f);xq1=read_ds1302(0 x8b);/BCDTO(xq1,xq);xq=(xq1&0 x70)4)*10+(xq1&0 x0f); /write_ds1302(0 x8a,xq+1);ri1=read_ds1302(0 x87);/BCDTO(ri1,ri);ri=(ri1&0 x70)4)*10+(ri1&0 x0f);yue1=read_ds1302(0 x89);/BCDTO(
53、yue1,yue);yue=(yue1&0 x70)4)*10+(yue1&0 x0f);nian1=read_ds1302(0 x8d);/BCDTO(nian1,nian);nian=(nian1&0 xf0)4)*10+(nian1&0 x0f);void xianxq(uchar xq) lcd_wcmd(0 x8e);if(xq=1)xianshi(一);if(xq=2)xianshi(二);if(xq=3)xianshi(三);if(xq=4)xianshi(四);if(xq=5)xianshi(五);if(xq=6)xianshi(六);if(xq=7)xianshi(日);uc
54、har keyscan()/鍵盤控制if(key1=0)delay(45);if(key1=0)while(!key1);k1+;switch(k1)case 1:lcd_wcmd(0 x92);lcd_wcmd(0 x0d );break;case 2:lcd_wcmd(0 x94);break;case 3:lcd_wcmd(0 x96);break;case 4:lcd_wcmd(0 x8e);break;case 5:lcd_wcmd(0 x9a);break;case 6:lcd_wcmd(0 x9c);break;case 7:lcd_wcmd(0 x9e);break;case
55、8:k1=0;lcd_wcmd(0 x0c);write_time(); break;if(k1!=0)if(key2=0)delay(45);if(key2=0)while(!key2);if(k1=1)/niannian+;if(nian=100)nian=0;/qiehuan(1,nian);/write_sj(0 x92,nian);write_sj1(nian);lcd_wcmd(0 x92);if(k1=2)/yueyue+;if(yue=13)yue=0;/qiehuan(1,yue);/write_sj(0 x94,yue);write_sj1(yue);lcd_wcmd(0
56、x94);if(k1=3)/riri+;if(ri=31)ri=0;/write_sj(0 x96,ri);/qiehuan(1,ri);write_sj1(ri);lcd_wcmd(0 x96);if(k1=4)/xqxq+;if(xq=8)xq=1;xianxq(xq);lcd_wcmd(0 x8e);if(k1=5)/shishi+;if(shi=24)shi=0;/write_sj(0 x9a,shi);/qiehuan(1,shi);write_sj1(shi);lcd_wcmd(0 x9a);if(k1=6)/fenfen+;if(fen=60)fen=0;/write_sj(0
57、x9c,fen);/qiehuan(1,fen);write_sj1(fen);lcd_wcmd(0 x9c);if(k1=7)/miaomiao+;if(miao=60)miao=0;/write_sj(0 x9e,miao);/qiehuan(1,miao);write_sj1(miao);lcd_wcmd(0 x9e);if(key3=0)delay(45);if(key3=0)while(!key3);if(k1=1)/niannian-;if(nian=-1)nian=99;/write_sj(0 x92,nian);/qiehuan(2,nian);write_sj1(nian);
58、lcd_wcmd(0 x92);if(k1=2)/yueyue-;if(yue=0)yue=12;/write_sj(0 x94,yue);/qiehuan(2,yue);write_sj1(yue);lcd_wcmd(0 x94);if(k1=3)/riri-;if(ri=-1)ri=30;/write_sj(0 x96,ri);/qiehuan(1,ri);write_sj1(ri);lcd_wcmd(0 x96);if(k1=4)/xqxq-;if(xq=0)xq=7;xianxq(xq);lcd_wcmd(0 x8e);if(k1=5)/shishi-;if(shi=-1)shi=23
59、;/write_sj(0 x9a,shi);/qiehuan(2,shi);write_sj1(shi);lcd_wcmd(0 x9a);if(k1=6)/fenfen-;if(fen=-1)fen=59;/write_sj(0 x9c,fen);/qiehuan(2,fen);write_sj1(fen);lcd_wcmd(0 x9c);if(k1=7)/miaomiao-;if(miao=-1)miao=59;/write_sj(0 x9e,miao);/qiehuan(2,miao);write_sj1(miao);lcd_wcmd(0 x9e);/*DS1302及按鍵時間調整階段end
60、*/*電動機*/uchar code FFW=0 x1f,0 x3f,0 x2f,0 x6f,0 x4f,0 xcf,0 x8f,0 x9f; /正轉數組uchar code REV= 0 x9f,0 x8f,0 xcf,0 x4f,0 x6f,0 x2f,0 x3f,0 x1f;/正轉數組void DelayMS(uint ms) uchar i; while(ms-) for(i=0;i2) flag_num=0; sum=sum*10+buf; for(i=0;i1) zidong=0; if(wangnianli1) wangnianli=0; for(i=0;i4;i+)/ 防止進入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有機肥料在提升土壤微生物對作物生長調節物質產生中的作用考核試卷
- 簡易呼吸器的使用 2
- 靜脈血液標本采集指南
- 遼寧輕工職業學院《大學生創新創業與就業指導》2023-2024學年第一學期期末試卷
- 洛陽職業技術學院《計算機網絡管理與安全》2023-2024學年第二學期期末試卷
- 江蘇省啟東市2024-2025學年高三下學期第二次模擬考試(期中)數學試題含解析
- 江蘇電子信息職業學院《大學生職業生涯規劃與就業指導(二)》2023-2024學年第二學期期末試卷
- 期貴州省畢節市重點中學2025屆初三第一次質量檢測試題物理試題含解析
- 遼寧省丹東33中學2024-2025學年初三下學期模擬(二)測試英語試題含答案
- XX學校課程改革與校本課程開發實施匯報范文
- 2025豬場轉讓合同范本
- 模特行業經紀人簽約協議
- 生育友好醫院建設指南2024
- 2025年度智能零售貨柜租賃與運營管理合同范本3篇
- 中醫外治法課件
- 常見血管活性藥物的臨床應用及注意事項考核試題及答案
- 碼頭操作管理制度
- 中國成人ICU鎮痛和鎮靜治療指南解讀
- 中國地質大學(北京)《GNSS測量原理及其應用》2022-2023學年第一學期期末試卷
- 護理專業實踐報告5000字范文
- 2024年度昌平區養老院食堂餐飲服務承包合同
評論
0/150
提交評論