本窗簾設(shè)計(jì)帶手動(dòng)和自動(dòng)切換,自動(dòng)模式LED亮,手動(dòng)模式LED滅。
所有資料51hei提供下載:
基于單片機(jī)浴室窗簾控制系統(tǒng)-1.7z
(77.33 KB, 下載次數(shù): 390)
2022-4-13 16:21 上傳
點(diǎn)擊文件名下載附件
壓縮包內(nèi)包涵程序圖以及程序代碼
單片機(jī)自動(dòng)窗簾仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- #include<reg51.h>
- #include"delay.h"
- #include"lcd602.h"
- #include"adc0832.h"
- /*****************************數(shù)組定義*******************************/
- uchar code tab1[]={"Now_G: "}; //
- uchar code tab5[]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xff7,0xf6}; //1-2勵(lì)磁順序表 //半步
- /************************端口定義**************************/
- sbit k1 = P2^0; // 手-正
- sbit k2 = P2^1; // 手-反
- sbit k3 = P2^2; // 手-停
- sbit k4 = P2^3; // 自-上
- sbit k5 = P2^4; // 自-下
- sbit led = P3^3; // 自-手-lED
- sbit k6 = P3^4; // 自-手
- /************************變量定義*****************************/
- uint sec,min,h; //BCD碼格式
- int second,minute,hour; //十進(jìn)制
- double youliang = 0;
- uchar i = 0;
- bit flag = 0; //暫停開(kāi)始標(biāo)志
- bit flag1 = 0; //正反轉(zhuǎn)標(biāo)志
- bit flag2 = 0;
- bit flag3 = 0;
- bit mode = 1;
- /*************************按鍵*******************************/
- void key()
- {
- if(k1==0)
- {
- delayxms(5);
- while(k1==0);
- flag1 = 0; flag = 1;
- write_zifu(1,15,'Z');
- }
- if(k2==0)
- {
- delayxms(5);
- while(k2==0);
- flag1 = 1; flag = 1;
- write_zifu(1,15,'F');
- }
- if(k3==0)
- {
- delayxms(5);
- while(k3==0);
- flag = 0;
- }
- }
- void key1()
- {
- if(k4==0)
- {
- delayxms(5);
- while(k4==0);
- flag = 0;
- write_zifu(1,15,'T');
- flag2 = 1; flag3 = 0;
- }
- if(k5==0)
- {
- delayxms(5);
- while(k5==0);
- flag = 0;
- write_zifu(1,15,'T');
- flag2 = 0; flag3 = 1;
- }
- }
- /*******************定時(shí)器T0初始化********************/
- void T0_init()
- {
- TMOD=TMOD | 0x01; //設(shè)T0為方式1
- TH0=(65535-50000)/256; //計(jì)數(shù)50000個(gè)
- TL0=(65535-50000)%256;
- EA=1; //開(kāi)啟總中斷
- ET0=1; //允許T0中斷
- //TR0=1; //啟動(dòng)
- }
- /**************************************************************
- 主程序
- **************************************************************/
- void main()
- {
- chushihua(); //LCD1602初始化
- write_string(1,0,tab1);
- T0_init();
- while(1)
- {
- /*自動(dòng)和手動(dòng)判斷*/
- if(k6==0)
- {
- delayxms(5);
- while(k6==0);
- mode = ~mode;
- }
- /*重力計(jì)算 0-100*/
- youliang = adc0832()/2.55;
- write_num3(1,7,youliang); //重力顯示
- /*手動(dòng)模式*/
- if(mode == 1)
- {
- flag2 = 0; flag3 = 0;
- led = 1; //LED關(guān)
- key(); //按鍵檢測(cè)
- if(flag == 0)
- {TR0 = 0; write_zifu(1,15,'T');}
- else
- {TR0 = 1;}
- }
- /*自動(dòng)模式*/
- if(mode == 0)
- {
- led = 0; //LED開(kāi)
- key1(); //按鍵檢測(cè)
- if(flag == 0)
- {TR0 = 0;}
- else
- {TR0 = 1;}
- /*根據(jù)重力判斷正反轉(zhuǎn)*/
- if(youliang > 50 && flag2 == 0) //正轉(zhuǎn)
- {
- flag = 1; flag1 = 0;
- write_zifu(1,15,'Z');
- }
- if(youliang <= 50 && flag3 == 0) //反轉(zhuǎn)
- {
- flag = 1; flag1 = 1;
- write_zifu(1,15,'F');
- }
- if(flag == 0)
- {TR0 = 0;}
- else
- {TR0 = 1;}
- }
- }
- }
- /**************************定時(shí)器T0中斷服務(wù)函數(shù)************************************/
- void T0_time() interrupt 1
- {
- TR0 = 0;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- if(i > 7)
- {i = 0;}
- if(flag1 == 0)
- {P1 = tab5[i];} //正轉(zhuǎn)
- else
- {P1 = tab5[7-i];} //反轉(zhuǎn)
- i += 1;
- TR0 = 1;
- }
復(fù)制代碼
隨著人民生活水平的不斷提高,人們對(duì)家庭生活舒適性的需求越來(lái)越強(qiáng)烈,窗簾作為每個(gè)家庭生活中最必須的家居用品之一,自然也需要滿(mǎn)足人民更舒適性的需求。窗簾最基本的作用無(wú)非是保護(hù)業(yè)主的個(gè)人隱私以及遮陽(yáng)擋塵等功能,但傳統(tǒng)的窗簾您必須手動(dòng)去開(kāi)關(guān),每天早開(kāi)晚關(guān)也是挺麻煩的,特別是別墅或復(fù)式房的大窗簾,比較長(zhǎng),而且重,用時(shí)需要很大的力才能開(kāi)關(guān)窗簾,特別不方便;于是遙控電動(dòng)窗簾在最近幾年被廣泛應(yīng)用于高級(jí)公寓,只要遙控器輕按一下,窗簾就自動(dòng)開(kāi)合,非常方便;當(dāng)然,如果采用智能窗簾控制系統(tǒng)還可以實(shí)現(xiàn)窗簾的定時(shí)開(kāi)關(guān),場(chǎng)景控制等更多高級(jí)的窗簾控制功能,真正讓窗簾成為現(xiàn)代家居的一道亮麗"風(fēng)景線(xiàn)". 1 系統(tǒng)總體設(shè)計(jì)與工作原理 PWM是一種模擬控制方式,其根據(jù)相應(yīng)載荷的變化來(lái)調(diào)制晶體管柵極或基極的偏置,來(lái)實(shí)現(xiàn)開(kāi)關(guān)穩(wěn)壓電源輸出晶體管或晶體管導(dǎo)通時(shí)間的改變,這種方式能使電源的輸出電壓在工作條件變化時(shí)保持恒定,是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù)。 本系統(tǒng)由單片機(jī)、紅外接收、光敏測(cè)光、電機(jī)驅(qū)動(dòng)、數(shù)碼管顯示以及鳴響提示模塊組成。主要應(yīng)用模塊的選擇包括電動(dòng)機(jī)驅(qū)動(dòng)模塊的、PWM調(diào)速方式、PWM調(diào)脈寬方式、PWM軟件實(shí)現(xiàn)方式的選擇。其中,電機(jī)驅(qū)動(dòng)模塊的選擇采用由達(dá)林頓管組成的H型PWM電路;PWM調(diào)速工作方式采用單極性工作制;PWM調(diào)脈寬方式選擇采用定頻調(diào)寬方式;PWM軟件實(shí)現(xiàn)方式采用軟件延時(shí)方式。系統(tǒng)總體框圖如圖1所示。
AT89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。 該窗簾控制系統(tǒng)采用AT89S52單片機(jī)的最小系統(tǒng)設(shè)計(jì),可以實(shí)現(xiàn)使用紅外遙控器進(jìn)行遠(yuǎn)程手動(dòng)開(kāi)、手動(dòng)關(guān)和手動(dòng)?刂,數(shù)碼管顯示窗簾的開(kāi)、關(guān),可以通過(guò)自行設(shè)定相應(yīng)的數(shù)字表示;也可以按事先輸入的開(kāi)啟時(shí)間和關(guān)閉時(shí)間進(jìn)行時(shí)間控制,但只能順序顯示,顯示一遍后,略等片刻,再顯示下一遍時(shí)間;還可以根據(jù)室外環(huán)境亮度實(shí)現(xiàn)光控,由驅(qū)動(dòng)數(shù)碼管顯示出當(dāng)時(shí)的狀態(tài)。每一組數(shù)據(jù)由5個(gè)數(shù)字組成,前4個(gè)數(shù)字順序顯示時(shí)十位、時(shí)個(gè)位、分十位、分個(gè)位,第5個(gè)數(shù)字包含工作方式和工作狀態(tài):顯示"一"(1橫)表示手動(dòng)方式;"二"(2橫)表示半手動(dòng)方式;"三"(3橫)表示光控方式;不顯示橫則表示時(shí)控方式。左上角的"豎"點(diǎn)亮表示電機(jī)工作時(shí)發(fā)出鳴響提示,不點(diǎn)亮表示電機(jī)工作無(wú)提示;右上角的"豎"點(diǎn)亮表示整點(diǎn)報(bào)時(shí)開(kāi)啟,不點(diǎn)亮表示無(wú)整點(diǎn)報(bào)時(shí)。左下角"豎"點(diǎn)亮表示窗簾正在打開(kāi),右下角"豎"點(diǎn)亮表示窗簾正在關(guān)閉。 2 硬件電路設(shè)計(jì) 該窗簾控制系統(tǒng)電路分為8個(gè)部分:電源、顯示、光控電路測(cè)光、電機(jī)控制執(zhí)行、紅外接收、鳴響提示、數(shù)據(jù)存儲(chǔ)、單片機(jī)主控器件。其中,電源部分通過(guò)外接插座輸入交流12 V或者直流13 V~14 V電壓供電,經(jīng)過(guò)三端集成穩(wěn)壓器穩(wěn)壓后輸出5 V電壓,為鳴響電路、紅外接收電路、顯示電路提供電源。使用2節(jié)5號(hào)普通電池提供直流電源。 2.1 光采集電路設(shè)計(jì) 測(cè)光電路如圖2所示,由GM1、C3、V3組成。GM1采用光敏二極管[1],C3和GM1組成RC充放電回路。當(dāng)P3.4處于高電平時(shí),P3.4的高電壓通過(guò)GM1的正向電阻向C3充電;當(dāng)P3.4被單片機(jī)拉低為低電平時(shí),C3通過(guò)光敏元件放電。光敏二極管工作在反向電壓狀態(tài)下,此時(shí)環(huán)境亮度決定了光敏二極管的光阻值,光阻值大,C3放電速度慢,反之放電速度快。適當(dāng)控制P3.4的拉低脈沖寬度,使得C3放電工作在線(xiàn)性比較好的工作段上。P3.5用來(lái)檢測(cè)C3在P3.4拉成低電平期間的放電電壓狀態(tài),當(dāng)C3電壓降到小于1/2VCC后,P3.5測(cè)得數(shù)據(jù)"0",反之測(cè)得數(shù)據(jù)"1".
2.2 紅外接收電路及數(shù)據(jù)存儲(chǔ)部分設(shè)計(jì) 紅外接收電路使用型號(hào)為HS3008的集成型紅外接收器,靜態(tài)時(shí)輸出端輸出高電平,當(dāng)接收到紅外信號(hào)后,按紅外信號(hào)的數(shù)據(jù)波形輸出負(fù)脈沖數(shù)據(jù)信號(hào),紅外信號(hào)輸出到單片機(jī)的P3.2口,該口對(duì)應(yīng)的第二功能是外部中斷0(INT0),利用該功能,一旦紅外信號(hào)到來(lái),P3.2被拉成低電平,使單片機(jī)中止當(dāng)前的工作并轉(zhuǎn)到接收及處理紅外信號(hào)。開(kāi)啟中斷功能的目的是:既減輕了單片機(jī)的工作負(fù)擔(dān),又保證接收到的紅外信號(hào)的完整性,同時(shí)在手動(dòng)工作狀態(tài)下,單片機(jī)進(jìn)入睡眠后,利用外部中斷功能完成對(duì)單片機(jī)的喚醒。紅外接收電路和數(shù)據(jù)存儲(chǔ)電路如圖3所示。
2.3 窗簾框架構(gòu)造設(shè)計(jì) 窗簾框架構(gòu)造設(shè)計(jì)包括窗簾微動(dòng)開(kāi)關(guān)連接電路設(shè)計(jì)和窗簾架的制作與設(shè)計(jì)。本設(shè)計(jì)中的微動(dòng)開(kāi)關(guān)通過(guò)電容、電阻組成的復(fù)位電路與單片機(jī)的復(fù)位引腳相連,微動(dòng)開(kāi)關(guān)安裝在窗簾滑桿上,當(dāng)窗簾移動(dòng)到預(yù)定位置時(shí),觸動(dòng)微動(dòng)開(kāi)關(guān),使單片機(jī)復(fù)位,此時(shí)電機(jī)停轉(zhuǎn),窗簾停到指定位置。窗簾架的制作方法如下:先加工兩只滑輪作為主動(dòng)輪和從動(dòng)輪,輪子類(lèi)似皮帶輪,底徑約為25 mm,槽寬和槽深約為4 mm;1根曬衣繩,直徑約為4 mm;在主動(dòng)輪的槽底用膠水粘一圈薄膠皮以增加摩擦力;將主動(dòng)輪固定在電動(dòng)機(jī)軸上,而將電動(dòng)機(jī)固定在窗簾盒的一端,將從動(dòng)輪固定在窗簾盒的另一端,固定時(shí)最好調(diào)節(jié)裝置,用以繃緊拉繩。窗簾桿選用19 mm的不銹鋼管,采用2根桿其目的在于左右窗簾能重合。窗簾架的構(gòu)成及窗簾的布置如圖4所示。
3 系統(tǒng)軟件設(shè)計(jì) 本系統(tǒng)中單片機(jī)微處理器的主要任務(wù)是完成對(duì)HS3008接收到的紅外信號(hào)的控制與處理,從而完成對(duì)相應(yīng)控制單元的控制。主程序首先完成初始化,然后啟動(dòng)HS3008等待接收控制指令,進(jìn)行相應(yīng)的輸出操作。系統(tǒng)流程圖如圖5所示。
單片機(jī)對(duì)接收到的紅外信號(hào)控制指令通過(guò)P3.2口來(lái)完成,其對(duì)應(yīng)第二功能時(shí)為外部中斷0(INT0),通過(guò)接收到不同的紅外信號(hào)脈沖實(shí)現(xiàn)相應(yīng)的操作。程序中重要的子程序有:串口初始化、串口接收中斷以及紅外信號(hào)處理子程序等。當(dāng)串口設(shè)置完畢、程序初始化后,程序?qū)3.2口進(jìn)行實(shí)時(shí)檢測(cè),一旦檢測(cè)到有低脈沖到來(lái),則進(jìn)行解碼后,提取相應(yīng)的子程序以實(shí)現(xiàn)對(duì)電機(jī)的控制。當(dāng)接收到手動(dòng)控制信號(hào)時(shí),則直接對(duì)電機(jī)進(jìn)行控制,實(shí)現(xiàn)窗簾的拉開(kāi)、關(guān)閉或停止;當(dāng)接收到半自動(dòng)控制信號(hào)時(shí),操作者只需按下拉開(kāi)或關(guān)閉按鈕來(lái)程序執(zhí)行,從而實(shí)現(xiàn)窗簾拉開(kāi)或關(guān)閉。對(duì)于電機(jī)如何停止的問(wèn)題,本設(shè)計(jì)在窗簾滑桿上安裝了微動(dòng)開(kāi)關(guān),一旦窗簾拉動(dòng)到指定位置就會(huì)觸碰微動(dòng)開(kāi)關(guān),從而送給單片機(jī)一個(gè)低脈沖,單片機(jī)在接收到低脈沖后,則認(rèn)為窗簾已完全拉開(kāi)或關(guān)閉,調(diào)用程序?qū)崿F(xiàn)電機(jī)的停止轉(zhuǎn)動(dòng);當(dāng)接收到光控信號(hào)時(shí),單片機(jī)調(diào)用相應(yīng)的程序,驅(qū)動(dòng)光敏二極管檢測(cè)環(huán)境亮度,根據(jù)檢測(cè)結(jié)果,實(shí)現(xiàn)窗簾的拉開(kāi)或關(guān)閉。 基于單片機(jī)的智能遙控窗簾的設(shè)計(jì),在實(shí)時(shí)性要求較低的測(cè)控與采集系統(tǒng)的應(yīng)用中具有很好的發(fā)展前景和應(yīng)用價(jià)值。在國(guó)內(nèi)外,自動(dòng)調(diào)光窗簾成為人們家居生活的首選布置。本文介紹的自動(dòng)調(diào)光窗簾利用紅外遙控實(shí)現(xiàn)了其控制功能,在設(shè)計(jì)過(guò)程中遇到了一些典型的問(wèn)題,但采取了相應(yīng)的措施: 。1)電機(jī)驅(qū)動(dòng)問(wèn)題。電機(jī)的驅(qū)動(dòng)電壓為5 V,但是經(jīng)過(guò)三極管的降壓后,電機(jī)驅(qū)動(dòng)能力明顯下降,為了增大電機(jī)驅(qū)動(dòng)能力,在控制部分與電機(jī)執(zhí)行部分加了4N25光耦隔離,將兩部分隔離開(kāi)來(lái),外接12 V電壓,以增大電機(jī)的驅(qū)動(dòng)能力。(2)電機(jī)停機(jī)問(wèn)題。單獨(dú)靠程序來(lái)實(shí)現(xiàn)電機(jī)的停機(jī),對(duì)時(shí)間控制的要求非常高,且不易實(shí)現(xiàn)。如果通過(guò)繼電器來(lái)實(shí)現(xiàn)停機(jī)也可以,但由于繼電器響應(yīng)時(shí)間慢、機(jī)械結(jié)構(gòu)易損壞、壽命較短、可靠性不高,故采用了微動(dòng)開(kāi)關(guān),通過(guò)送單片機(jī)低脈沖來(lái)實(shí)現(xiàn)電機(jī)停機(jī),實(shí)時(shí)性也很好。
|