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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4146|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

基于51單片機的窗簾設(shè)計(可實現(xiàn)紅外遙控和溫度檢測)源程序+原理圖PCB文件

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:541150 發(fā)表于 2020-3-20 16:23 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機作為簡單的控制核心,可以實現(xiàn)一些功能的控制。本次設(shè)計的智能窗簾主要功能如下:
1.通過溫度傳感器來自動的控制窗簾的關(guān)閉與開啟;
2.通過紅外遙控器來手動控制窗簾的關(guān)閉,開啟,暫停,啟動,加速,減速以及智能與人工的轉(zhuǎn)換;
3.測得的溫度與相應(yīng)的步進電機的速度可以通過LCD1602顯示出來

基于stc89c52的智能窗簾,可以通過 ds18b20溫度傳感器控制,并且可以通過紅外按鍵控制,最后通過lcd1602顯示溫度,速度。
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)



1.    項目的實現(xiàn)思路和實現(xiàn)方法
隨著科技的深化發(fā)展,人民生活水平的日益提高,自控系統(tǒng)從安防、采暖、采光、烹煮等領(lǐng)域不斷擴展,家居智能化的趨勢越來越明顯。本文針對的,是智能窗簾這一塊,它的任務(wù)是通過簡單省力的操作來實現(xiàn)室內(nèi)采光自動變化,解決一些實際的困難與需求。
例如:已經(jīng)上床睡覺,卻發(fā)現(xiàn)窗簾沒關(guān);小朋友、殘疾者拉窗簾的不便;外出旅游,需要房間保持定時采光,去濕去霉;希望早上窗簾到點打開,用明亮的陽光來喚醒自己;由于生活的緊湊,沒有精力管理窗簾又希望室內(nèi)采光自動保持在舒適的程度;飄窗、高窗、懸窗、落地窗等窗簾的拉不動或夠不著;希望非觸碰地拉動層層疊疊的窗簾,保持其造型的美觀….這種種問題,通過使用智能電動窗簾便能輕松解決,從而使現(xiàn)代生活變得更方便舒適。
2項目的硬件工作原理分析和調(diào)試,各模塊介紹
2.1分析項目的硬件工作原理
1.通過溫度傳感器來自動的控制窗簾的關(guān)閉與開啟;
2.通過紅外遙控器來手動控制窗簾的關(guān)閉,開啟,暫停,啟動,加速,減速以及智能與人工的轉(zhuǎn)換;
3.測得的溫度與相應(yīng)的步進電機的速度可以通過LCD1602顯示出來。
2.2介紹該項目中使用的模塊,及其作用
2.2.1步進電機
步進電動機是一種將電脈沖信號轉(zhuǎn)換成角位移或線位移的機電元件。步進電動機的輸入量是脈沖序列,輸出量則為相應(yīng)的增量位移或步進運動。正常運動情況下,它每轉(zhuǎn)一周具有固定的步數(shù);做連續(xù)步進運動時,其旋轉(zhuǎn)轉(zhuǎn)速與輸入脈沖的頻率保持嚴(yán)格的對應(yīng)關(guān)系,不受電壓波動和負(fù)載變化的影響。
2.2.2DS18B20
DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴展的二進制補碼讀數(shù)形式提供,以 0.0625℃/LSB形式表達(dá),其中S為符號位。
這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0, 這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際 溫度。 例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FE6FH,-55℃的數(shù)字輸出為FC90H。
2.3系統(tǒng)整體框架


3.軟件實現(xiàn)原理和調(diào)試以及聯(lián)合調(diào)試的總結(jié)
3.1DS18B20
  1. /******************************************************************/
  2. /*                    讀一個字節(jié)  , 低位開始                     */
  3. /******************************************************************/
  4. unsigned char ReadOneByte(void)
  5. {
  6.       unsigned char i;
  7.     unsigned char value=0;
  8.     for(i=0;i<8;i++)
  9.     {
  10.          value >>=1;
  11.         DQ = 0;
  12.         _nop_();
  13.         _nop_();
  14.         DQ = 1;
  15.         _nop_();
  16.         _nop_();
  17.         _nop_();
  18.         _nop_();
  19.         _nop_();
  20.         _nop_();
  21.         _nop_();
  22.         if(DQ == 1)
  23.         {value |= 0x80;}
  24.         Delay60us();

  25.     }
  26.     return value;
  27. }

  28. /******************************************************************/
  29. /*                 寫一個字節(jié)    先寫低位                         */
  30. /******************************************************************/
  31. void WriteOneByte(unsigned char dat)
  32. {
  33.      unsigned char i;
  34.     for(i=0;i<8;i++)
  35.     {
  36.         DQ =0;
  37.         _nop_();
  38.         _nop_();
  39.         if(dat&0x01)
  40.         {DQ =1;}
  41.         else
  42.          DQ = 0;
  43.         Delay60us();
  44.         DQ = 1;//釋放總線   
  45.         dat>>=1;
  46.     }
  47.       
  48. }

  49. /******************************************************************/
  50. /*                   讀取溫度                                     */
  51. /******************************************************************/
  52. unsigned int ReadTemperature(void)
  53. {

  54.    unsigned int a,b,t;
  55.    EA =0;
  56.    bsp_InitDs18b20();
  57.    WriteOneByte(0xcc);
  58.    WriteOneByte(0x44);
  59.    delay_ms(200);
  60.    bsp_InitDs18b20();
  61.    WriteOneByte(0xcc);
  62.    WriteOneByte(0xbe);
  63.    a= ReadOneByte(); //低字節(jié)
  64.    b= ReadOneByte(); //高字節(jié)
  65.    b=b<<8;
  66.    t= a+b;
  67.    EA =1;
  68.    return t;
  69. }
  70. 3.2LCD1602
  71. /*------------------------------------------------
  72.                 清屏函數(shù)
  73. ------------------------------------------------*/
  74. void LCD_Clear(void)
  75. {
  76.     bsp_LcdWriteComand(0x01);
  77.     delay_ms(5);
  78. }

  79. void bsp_LcdWriteData(unsigned char dat)
  80. {
  81.     //delay_ms(5);
  82.     while(bsp_LcdCheckBusy()&0x80);
  83.       RS =1;
  84.     RW =0;
  85.     LCDPORT = dat;
  86.     EN =1;
  87.     delay_us(10);
  88.     EN =0;
  89. }


  90. void bsp_LcdWriteComand(unsigned char com)
  91. {
  92.     //delay_ms(5);
  93.     while(bsp_LcdCheckBusy()&0x80);
  94.        RS =0;
  95.     RW =0;
  96.     LCDPORT = com;
  97.     EN =1;
  98.     delay_us(10);
  99.     EN =0;
  100. }


  101. void bsp_LcdInit(void)
  102. {
  103.      delay_ms(15);
  104.     bsp_LcdWriteComand(0x38);
  105.     delay_ms(5);
  106.     bsp_LcdWriteComand(0x38);
  107.     delay_ms(5);
  108.     bsp_LcdWriteComand(0x38);
  109.     delay_ms(5);
  110.     bsp_LcdWriteComand(0x38);
  111.     delay_ms(5);
  112.     bsp_LcdWriteComand(0x08);
  113.     delay_ms(5);
  114.     bsp_LcdWriteComand(0x01);
  115.     delay_ms(5);
  116.     bsp_LcdWriteComand(0x06);
  117.     delay_ms(5);
  118.     bsp_LcdWriteComand(0x0c);
  119. }


  120. void bsp_LcdShowChar(unsigned char x,unsigned char y,unsigned char a)
  121. {
  122.     if(y ==0)
  123.          bsp_LcdWriteComand(0x80+x);
  124.     else
  125.         bsp_LcdWriteComand(0xC0+x);
  126.      
  127.     bsp_LcdWriteData(a);   
  128. }


  129. void bsp_LcdShowString(unsigned char x,unsigned char y,unsigned char *s)
  130. {
  131.      if(y ==0)
  132.          bsp_LcdWriteComand(0x80+x);
  133.     else
  134.         bsp_LcdWriteComand(0xC0+x);
  135.     while(*s)
  136.     {
  137.         bsp_LcdWriteData(*s);
  138.         s++;   
  139.     }
  140. }


  141. unsigned char bsp_LcdCheckBusy(void)
  142. {
  143.     unsigned char temp;
  144.      RS =0;
  145.     RW =1;
  146.     EN =1;
  147.     temp =LCDPORT;
  148.     delay_us(10);
  149.     EN =0;
  150.     return temp;
  151. }


  152. void bsp_LcdFillCGRAM(void)     //0x40
  153. {
  154.     unsigned char i=0;
  155.        bsp_LcdWriteComand(0x40);
  156.     for(i=0;i<48;i++)
  157.     {
  158.         bsp_LcdWriteData(my[i]);
  159.     }   
  160. }


  161. void bsp_LcdShowCGRAM(unsigned char x,unsigned char y,unsigned char index)//x 橫坐標(biāo) y 縱坐標(biāo)     index 0-7
  162. {
  163.     if(y ==0)
  164.          bsp_LcdWriteComand(0x80+x);
  165.     else
  166.         bsp_LcdWriteComand(0xC0+x);
  167.         bsp_LcdWriteData(index);
  168. }

  169. 3.3步進電機
  170. void ISR_TIMER1(void) interrupt 3  //1ms
  171. {
  172.     static unsigned int num = 0;
  173.     static unsigned char times = 0,i = 0;
  174.     TH1=(65536-1000)/256;          //重新賦值 1ms
  175.     TL1=(65536-1000)%256;
  176.    
  177.     if(!StopFlag)
  178.     {
  179.       if(times == (10-Speed))
  180.       {
  181.         times=0;
  182.         if(TurnFlag == 0)
  183.         {
  184.             switch(i)  //逆時針轉(zhuǎn)動
  185.             {
  186.                 case 0:Coil_A1;i++;break;
  187.                 case 1:Coil_AB1;i++;break;
  188.                 case 2:Coil_B1;i++;break;
  189.                 case 3:Coil_BC1;i++;break;
  190.                 case 4:Coil_C1;i++;break;
  191.                 case 5:Coil_CD1;i++;break;
  192.                 case 6:Coil_D1;i++;break;
  193.                 case 7:Coil_DA1;i++;break;
  194.                 case 8:i=0;break;
  195.                 default:break;
  196.             }
  197.         }
  198.         else if(TurnFlag == 1)
  199.         {
  200.             switch(i)    //順時針轉(zhuǎn)動
  201.             {
  202.                 case 0:Coil_DA1;i++;break;
  203.                 case 1:Coil_D1;i++;break;
  204.                 case 2:Coil_CD1;i++;break;
  205.                 case 3:Coil_C1;i++;break;
  206.                 case 4:Coil_BC1;i++;break;
  207.                 case 5:Coil_B1;i++;break;
  208.                 case 6:Coil_AB1;i++;break;
  209.                 case 7:Coil_A1;i++;break;
  210.                 case 8:i=0;break;
  211.                 default:break;
  212.             }
  213.             
  214.         }
  215.      }
  216.      times++;
  217.     }
  218.     num++;
  219.     if(num==600)        
  220.     {
  221.         num=0;
  222.         ReadTempFlag=1; //讀標(biāo)志位置1
  223.     }
  224. }
復(fù)制代碼

4.總結(jié)(收獲,缺陷,改進,提高)
本設(shè)計介紹了基于STC89C52的智能窗簾控制系統(tǒng)的工作原理及實現(xiàn)過程,我在這個星期內(nèi)閱讀大量有關(guān)如何通過電機轉(zhuǎn)動來控制窗簾的關(guān)閉和開啟,以及數(shù)字溫度計原理及設(shè)計的相關(guān)資料,設(shè)計了實現(xiàn)采集與顯示功能的軟件程序,完成了基于STC89C52的智能窗簾控制系統(tǒng)的設(shè)計。設(shè)計中采用最常用的單片機STC89C52作為主控模塊,單總線數(shù)字溫度傳感器DS18B20用來測量溫度,溫度數(shù)據(jù)采用LCD1602顯示。本設(shè)計的特點是構(gòu)成系統(tǒng)的硬件器件少,操作簡單,數(shù)據(jù)處理功能強。
智能化設(shè)計重點就在于軟件算法的設(shè)計,雖然以前還做過這樣的設(shè)計但這次設(shè)計,但都比較簡單程序也不是很長也不需要有很巧妙的程序算法。這次軟件設(shè)計中讓我充分理解到了利用子程序的好處。在設(shè)計中也遇到很多問題比如相關(guān)設(shè)備的初始化,經(jīng)過多次調(diào)試修改終于顯示成功。還有很多下問題則不必累述。通過這次項目使我學(xué)習(xí)到了很多的東西,不僅加深了對專業(yè)知識的理解,而且更好地把理論知識與實踐相結(jié)合,提高了自身的動手能力和實踐水平,增強了學(xué)習(xí)單片機系統(tǒng)開發(fā)與設(shè)計的興趣。


全部資料51hei下載地址:
智能窗簾.zip (5.87 MB, 下載次數(shù): 101)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:328014 發(fā)表于 2020-3-25 02:21 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

板凳
ID:678436 發(fā)表于 2020-4-12 21:29 | 只看該作者
好東西,正好需要這個紅外,謝謝大佬
回復(fù)

使用道具 舉報

地板
ID:678436 發(fā)表于 2020-4-12 21:30 | 只看該作者
謝謝,正好需要這個紅外代碼
回復(fù)

使用道具 舉報

5#
ID:653838 發(fā)表于 2020-4-12 23:04 | 只看該作者
這些東西真需要,學(xué)習(xí)了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线高清 | 日韩精品在线观看视频 | 亚洲视频在线一区 | 在线观看免费黄色片 | 亚洲精品久久久一区二区三区 | 怡红院成人在线视频 | 一区二区三区亚洲 | 国产精品一区二区三区在线播放 | 久久国产精品一区二区三区 | 一级做a爰片久久毛片免费看 | 人成在线视频 | www.av在线 | a级毛片基地 | 久久久久久电影 | 国产精品1区2区3区 欧美 中文字幕 | 久久久久久国产精品免费免费狐狸 | 自拍第一页 | 精品一区二区三区在线播放 | 国产精品久久久久久吹潮 | 中文字幕日韩一区 | 亚洲综合天堂 | 五月天婷婷丁香 | 久久综合伊人 | 国产精品日产欧美久久久久 | 欧美成人一区二区 | 国产精品中文字幕在线 | 精品九九在线 | 伊人伊人网| 午夜三区 | h在线免费观看 | 免费午夜电影 | 国产91网址| 天堂av在线影院 | 亚洲美女在线一区 | 成人午夜精品 | 国产黄色麻豆视频 | 成人免费观看视频 | 久久精品视频免费观看 | 成人激情视频网 | 精品国产乱码久久久久久1区2区 | 久视频在线 |