久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12177|回復: 7
打印 上一主題 下一主題
收起左側

51單片機自動窗簾系統(tǒng)源程序+proteus仿真+設計詳解(手動和自動模式)

  [復制鏈接]
跳轉到指定樓層
樓主
ID:413133 發(fā)表于 2018-10-22 11:02 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本窗簾設計帶手動和自動切換,自動模式LED亮,手動模式LED滅。

所有資料51hei提供下載:
基于單片機浴室窗簾控制系統(tǒng)-1.7z (77.33 KB, 下載次數: 390)

單片機自動窗簾仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機源程序如下:
  1. #include<reg51.h>
  2. #include"delay.h"
  3. #include"lcd602.h"
  4. #include"adc0832.h"
  5. /*****************************數組定義*******************************/
  6. uchar code tab1[]={"Now_G: "};         //
  7. uchar code tab5[]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xff7,0xf6};  //1-2勵磁順序表 //半步
  8. /************************端口定義**************************/
  9. sbit k1 = P2^0;        // 手-正
  10. sbit k2 = P2^1;        // 手-反
  11. sbit k3 = P2^2;        // 手-停
  12. sbit k4 = P2^3;        // 自-上
  13. sbit k5 = P2^4;        // 自-下
  14. sbit led = P3^3; // 自-手-lED
  15. sbit k6 = P3^4; // 自-手
  16. /************************變量定義*****************************/
  17. uint sec,min,h;        //BCD碼格式
  18. int second,minute,hour; //十進制
  19. double youliang = 0;
  20. uchar i = 0;
  21. bit flag = 0; //暫停開始標志
  22. bit flag1 = 0; //正反轉標志
  23. bit flag2 = 0;
  24. bit flag3 = 0;
  25. bit mode = 1;
  26. /*************************按鍵*******************************/
  27. void key()
  28. {
  29.           if(k1==0)
  30.           {
  31.                      delayxms(5);
  32.                    while(k1==0);
  33.                    flag1 = 0; flag = 1;
  34.                    write_zifu(1,15,'Z');
  35.           }
  36.           if(k2==0)        
  37.           {
  38.                         delayxms(5);
  39.                         while(k2==0);
  40.                         flag1 = 1; flag = 1;
  41.                         write_zifu(1,15,'F');
  42.           }
  43.           if(k3==0)        
  44.           {
  45.                         delayxms(5);
  46.                         while(k3==0);
  47.                         flag = 0;
  48.           }
  49. }

  50. void key1()
  51. {
  52.           if(k4==0)
  53.           {
  54.                      delayxms(5);
  55.                    while(k4==0);
  56.                    flag = 0;
  57.                    write_zifu(1,15,'T');
  58.                    flag2 = 1; flag3 = 0;
  59.           }
  60.           if(k5==0)        
  61.           {
  62.                         delayxms(5);
  63.                         while(k5==0);
  64.                         flag = 0;
  65.                         write_zifu(1,15,'T');
  66.                         flag2 = 0; flag3 = 1;
  67.           }
  68. }
  69. /*******************定時器T0初始化********************/
  70. void T0_init()
  71. {
  72.           TMOD=TMOD | 0x01;              //設T0為方式1
  73.           TH0=(65535-50000)/256;       //計數50000個
  74.           TL0=(65535-50000)%256;
  75.           EA=1;                        //開啟總中斷         
  76.           ET0=1;                       //允許T0中斷
  77.           //TR0=1;                       //啟動
  78. }
  79. /**************************************************************
  80.                       主程序
  81. **************************************************************/
  82. void main()
  83. {
  84.   chushihua(); //LCD1602初始化
  85.   write_string(1,0,tab1);
  86.   T0_init();
  87.   while(1)
  88.   {
  89.                             /*自動和手動判斷*/
  90.                             if(k6==0)
  91.                                 {
  92.                                              delayxms(5);
  93.                                            while(k6==0);
  94.                                            mode = ~mode;
  95.                                 }
  96.                                 /*重力計算 0-100*/
  97.                         youliang = adc0832()/2.55;
  98.                         write_num3(1,7,youliang); //重力顯示
  99.                                 /*手動模式*/
  100.                                 if(mode == 1)
  101.                                 {
  102.                                    flag2 = 0; flag3 = 0;
  103.                                    led = 1; //LED關
  104.                                    key(); //按鍵檢測
  105.                                    if(flag == 0)
  106.                                    {TR0 = 0; write_zifu(1,15,'T');}
  107.                                    else
  108.                                    {TR0 = 1;}
  109.                                 }
  110.                                 /*自動模式*/
  111.                                 if(mode == 0)
  112.                                 {
  113.                                    led = 0; //LED開
  114.                                    key1(); //按鍵檢測
  115.                                    if(flag == 0)
  116.                                    {TR0 = 0;}
  117.                                    else
  118.                                    {TR0 = 1;}
  119.                                    /*根據重力判斷正反轉*/
  120.                                    if(youliang > 50 && flag2 == 0) //正轉
  121.                                    {
  122.                                              flag = 1; flag1 = 0;
  123.                                           write_zifu(1,15,'Z');
  124.                                    }
  125.                                    if(youliang <= 50 && flag3 == 0) //反轉
  126.                                    {
  127.                                              flag = 1; flag1 = 1;
  128.                                           write_zifu(1,15,'F');
  129.                                    }
  130.                                    if(flag == 0)
  131.                                    {TR0 = 0;}
  132.                                    else
  133.                                    {TR0 = 1;}
  134.                                 }
  135.   }
  136. }
  137. /**************************定時器T0中斷服務函數************************************/
  138. void T0_time() interrupt 1   
  139. {
  140.           TR0 = 0;
  141.       TH0=(65535-50000)/256;      
  142.           TL0=(65535-50000)%256;     
  143.           if(i > 7)
  144.           {i = 0;}
  145.           if(flag1 == 0)
  146.           {P1 = tab5[i];} //正轉
  147.           else
  148.           {P1 = tab5[7-i];} //反轉
  149.           i += 1;
  150.           TR0 = 1;
  151. }
復制代碼

隨著人民生活水平的不斷提高,人們對家庭生活舒適性的需求越來越強烈,窗簾作為每個家庭生活中最必須的家居用品之一,自然也需要滿足人民更舒適性的需求。窗簾最基本的作用無非是保護業(yè)主的個人隱私以及遮陽擋塵等功能,但傳統(tǒng)的窗簾您必須手動去開關,每天早開晚關也是挺麻煩的,特別是別墅或復式房的大窗簾,比較長,而且重,用時需要很大的力才能開關窗簾,特別不方便;于是遙控電動窗簾在最近幾年被廣泛應用于高級公寓,只要遙控器輕按一下,窗簾就自動開合,非常方便;當然,如果采用智能窗簾控制系統(tǒng)還可以實現窗簾的定時開關,場景控制等更多高級的窗簾控制功能,真正讓窗簾成為現代家居的一道亮麗"風景線".

  1 系統(tǒng)總體設計與工作原理

  PWM是一種模擬控制方式,其根據相應載荷的變化來調制晶體管柵極或基極的偏置,來實現開關穩(wěn)壓電源輸出晶體管或晶體管導通時間的改變,這種方式能使電源的輸出電壓在工作條件變化時保持恒定,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。

  本系統(tǒng)由單片機、紅外接收、光敏測光、電機驅動、數碼管顯示以及鳴響提示模塊組成。主要應用模塊的選擇包括電動機驅動模塊的、PWM調速方式、PWM調脈寬方式、PWM軟件實現方式的選擇。其中,電機驅動模塊的選擇采用由達林頓管組成的H型PWM電路;PWM調速工作方式采用單極性工作制;PWM調脈寬方式選擇采用定頻調寬方式;PWM軟件實現方式采用軟件延時方式。系統(tǒng)總體框圖如圖1所示。

  AT89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲器。使用Atmel 公司高密度非易失性存儲器技術制造,與工業(yè)80C51 產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52在眾多嵌入式控制應用系統(tǒng)中得到廣泛應用。

  該窗簾控制系統(tǒng)采用AT89S52單片機的最小系統(tǒng)設計,可以實現使用紅外遙控器進行遠程手動開、手動關和手動停控制,數碼管顯示窗簾的開、關,可以通過自行設定相應的數字表示;也可以按事先輸入的開啟時間和關閉時間進行時間控制,但只能順序顯示,顯示一遍后,略等片刻,再顯示下一遍時間;還可以根據室外環(huán)境亮度實現光控,由驅動數碼管顯示出當時的狀態(tài)。每一組數據由5個數字組成,前4個數字順序顯示時十位、時個位、分十位、分個位,第5個數字包含工作方式和工作狀態(tài):顯示"一"(1橫)表示手動方式;"二"(2橫)表示半手動方式;"三"(3橫)表示光控方式;不顯示橫則表示時控方式。左上角的"豎"點亮表示電機工作時發(fā)出鳴響提示,不點亮表示電機工作無提示;右上角的"豎"點亮表示整點報時開啟,不點亮表示無整點報時。左下角"豎"點亮表示窗簾正在打開,右下角"豎"點亮表示窗簾正在關閉。

  2 硬件電路設計

  該窗簾控制系統(tǒng)電路分為8個部分:電源、顯示、光控電路測光、電機控制執(zhí)行、紅外接收、鳴響提示、數據存儲、單片機主控器件。其中,電源部分通過外接插座輸入交流12 V或者直流13 V~14 V電壓供電,經過三端集成穩(wěn)壓器穩(wěn)壓后輸出5 V電壓,為鳴響電路、紅外接收電路、顯示電路提供電源。使用2節(jié)5號普通電池提供直流電源。

  2.1 光采集電路設計

  測光電路如圖2所示,由GM1、C3、V3組成。GM1采用光敏二極管[1],C3和GM1組成RC充放電回路。當P3.4處于高電平時,P3.4的高電壓通過GM1的正向電阻向C3充電;當P3.4被單片機拉低為低電平時,C3通過光敏元件放電。光敏二極管工作在反向電壓狀態(tài)下,此時環(huán)境亮度決定了光敏二極管的光阻值,光阻值大,C3放電速度慢,反之放電速度快。適當控制P3.4的拉低脈沖寬度,使得C3放電工作在線性比較好的工作段上。P3.5用來檢測C3在P3.4拉成低電平期間的放電電壓狀態(tài),當C3電壓降到小于1/2VCC后,P3.5測得數據"0",反之測得數據"1".

  2.2 紅外接收電路及數據存儲部分設計

  紅外接收電路使用型號為HS3008的集成型紅外接收器,靜態(tài)時輸出端輸出高電平,當接收到紅外信號后,按紅外信號的數據波形輸出負脈沖數據信號,紅外信號輸出到單片機的P3.2口,該口對應的第二功能是外部中斷0(INT0),利用該功能,一旦紅外信號到來,P3.2被拉成低電平,使單片機中止當前的工作并轉到接收及處理紅外信號。開啟中斷功能的目的是:既減輕了單片機的工作負擔,又保證接收到的紅外信號的完整性,同時在手動工作狀態(tài)下,單片機進入睡眠后,利用外部中斷功能完成對單片機的喚醒。紅外接收電路和數據存儲電路如圖3所示。

  2.3 窗簾框架構造設計

  窗簾框架構造設計包括窗簾微動開關連接電路設計和窗簾架的制作與設計。本設計中的微動開關通過電容、電阻組成的復位電路與單片機的復位引腳相連,微動開關安裝在窗簾滑桿上,當窗簾移動到預定位置時,觸動微動開關,使單片機復位,此時電機停轉,窗簾停到指定位置。窗簾架的制作方法如下:先加工兩只滑輪作為主動輪和從動輪,輪子類似皮帶輪,底徑約為25 mm,槽寬和槽深約為4 mm;1根曬衣繩,直徑約為4 mm;在主動輪的槽底用膠水粘一圈薄膠皮以增加摩擦力;將主動輪固定在電動機軸上,而將電動機固定在窗簾盒的一端,將從動輪固定在窗簾盒的另一端,固定時最好調節(jié)裝置,用以繃緊拉繩。窗簾桿選用19 mm的不銹鋼管,采用2根桿其目的在于左右窗簾能重合。窗簾架的構成及窗簾的布置如圖4所示。

  3 系統(tǒng)軟件設計

  本系統(tǒng)中單片機微處理器的主要任務是完成對HS3008接收到的紅外信號的控制與處理,從而完成對相應控制單元的控制。主程序首先完成初始化,然后啟動HS3008等待接收控制指令,進行相應的輸出操作。系統(tǒng)流程圖如圖5所示。

  單片機對接收到的紅外信號控制指令通過P3.2口來完成,其對應第二功能時為外部中斷0(INT0),通過接收到不同的紅外信號脈沖實現相應的操作。程序中重要的子程序有:串口初始化、串口接收中斷以及紅外信號處理子程序等。當串口設置完畢、程序初始化后,程序對P3.2口進行實時檢測,一旦檢測到有低脈沖到來,則進行解碼后,提取相應的子程序以實現對電機的控制。當接收到手動控制信號時,則直接對電機進行控制,實現窗簾的拉開、關閉或停止;當接收到半自動控制信號時,操作者只需按下拉開或關閉按鈕來程序執(zhí)行,從而實現窗簾拉開或關閉。對于電機如何停止的問題,本設計在窗簾滑桿上安裝了微動開關,一旦窗簾拉動到指定位置就會觸碰微動開關,從而送給單片機一個低脈沖,單片機在接收到低脈沖后,則認為窗簾已完全拉開或關閉,調用程序實現電機的停止轉動;當接收到光控信號時,單片機調用相應的程序,驅動光敏二極管檢測環(huán)境亮度,根據檢測結果,實現窗簾的拉開或關閉。

  基于單片機的智能遙控窗簾的設計,在實時性要求較低的測控與采集系統(tǒng)的應用中具有很好的發(fā)展前景和應用價值。在國內外,自動調光窗簾成為人們家居生活的首選布置。本文介紹的自動調光窗簾利用紅外遙控實現了其控制功能,在設計過程中遇到了一些典型的問題,但采取了相應的措施:

  (1)電機驅動問題。電機的驅動電壓為5 V,但是經過三極管的降壓后,電機驅動能力明顯下降,為了增大電機驅動能力,在控制部分與電機執(zhí)行部分加了4N25光耦隔離,將兩部分隔離開來,外接12 V電壓,以增大電機的驅動能力。(2)電機停機問題。單獨靠程序來實現電機的停機,對時間控制的要求非常高,且不易實現。如果通過繼電器來實現停機也可以,但由于繼電器響應時間慢、機械結構易損壞、壽命較短、可靠性不高,故采用了微動開關,通過送單片機低脈沖來實現電機停機,實時性也很好。



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏15 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發(fā)
ID:417062 發(fā)表于 2018-10-29 13:58 | 只看該作者
設計很合理,謝謝樓主
回復

使用道具 舉報

板凳
ID:436886 發(fā)表于 2018-12-1 22:26 | 只看該作者
樓主、您好 我想問一下您的那個自動窗簾設設計 就是圖中有幾個零件不是很懂 可以為我講解下嗎  
回復

使用道具 舉報

地板
ID:349040 發(fā)表于 2018-12-2 18:02 | 只看該作者
樓主,有些問題想請教你,真誠,希望你可以指導一下
回復

使用道具 舉報

5#
ID:661737 發(fā)表于 2019-12-11 21:23 | 只看該作者
多謝分享
回復

使用道具 舉報

6#
ID:766592 發(fā)表于 2020-6-2 11:16 | 只看該作者
有詳細的解答嗎
回復

使用道具 舉報

7#
ID:753910 發(fā)表于 2020-7-1 16:24 | 只看該作者
仿真運行怎么不亮呀
回復

使用道具 舉報

8#
ID:1017407 發(fā)表于 2022-4-13 09:43 | 只看該作者
直接仿真不了啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品免费 | 成人性生交大片免费看r链接 | 美日韩免费视频 | 久久久久成人精品 | 91视频国产一区 | 成年免费大片黄在线观看一级 | 国产91视频免费 | 日韩一区二区视频 | 91视频在线观看免费 | 国产精品区二区三区日本 | 日韩成人一区 | 久久久精品一区二区 | 99精品久久99久久久久 | 日韩精品免费在线观看 | 国产99在线 | 欧美 | 亚洲午夜精品久久久久久app | 久久精品综合网 | 日本精品一区二区 | 日韩精品在线看 | 欧美一区二区三区免费在线观看 | 亚洲精品高清视频 | 成人在线视频免费看 | 91精品国产色综合久久 | 九色在线 | a在线免费观看 | 性xxxxx| 国产欧美精品一区二区三区 | www.日韩在线 | 不卡欧美| 影视先锋av资源噜噜 | 99精品欧美一区二区三区 | 国产一二三区在线 | 日本一区二区三区精品视频 | 2021天天干夜夜爽 | 国产高清在线精品 | 久久精品一区 | 久久久久久亚洲精品 | 91夜色在线观看 | 亚洲精品女人久久久 | 免费一级片| 国产高清视频在线观看 |