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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+433M無線室內外溫度顯示裝置設計與制作 含實物與仿真圖

  [復制鏈接]
跳轉到指定樓層
樓主
作品:基于433M的無線溫度傳輸模塊,顯示在數碼管上,左邊為室外溫度,右邊為室內溫度(可以自己根據需要在代碼中調節左右顯示的內容),附件中含有發送部分和接收部分的代碼以及HC-12的使用說明書

制作出來的實物圖如下:


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



發送部分代碼:
  1. /*******************************************************************************
  2. *  標題:   基于433M的無線溫度傳輸模塊                         *
  3. *  時間  2018年11月6日12:24:58                                   *
  4. *                                                                              *
  5. *  實驗說明:本裝置用的是433M進行無線傳輸,理論距離在1KM左右,實際可能會短點, *
  6. 433的啟動電流在200mA,所以需要鋰電池或者USB進行供電。所以耗電量比較大。        *
  7.                                                                                *
  8. ********************************************************************************
  9. * 實驗心得:代碼中的數碼管顯示部分,在proteus中是不顯示的,因為DS18B20的溫度采 *
  10. 集在ms級別,而數碼管全顯的刷新時間是在μs級別。所以在仿真中不會成功顯示,但是按 *
  11. 照仿真焊接的實物圖可以成功顯示。如果想讓protues也成功顯示,需要將數碼管顯示或者*
  12. 溫度采集的部分放入時間中斷里面,即可成功顯示。但是實際的實物效果不好,會出現跳 *
  13. 動的情況,費眼睛                                                                                                                           *
  14.                                                                                                                                                *
  15. ********************************************************************************/
  16. #include<reg51.h>
  17. #include "ds18b20.h"

  18. unsigned char TP[2];
  19. int Temp;
  20. sbit LED = P1^0;
  21. //--聲明全局函數--//
  22. void UsartConfiguration();
  23. void Delay10ms(unsigned int c);   //誤差 0us

  24. /*******************************************************************************
  25. * 函 數 名         : main
  26. * 函數功能                   : 主函數
  27. * 輸    入         : 無
  28. * 輸    出         : 無
  29. *******************************************************************************/

  30. void main()
  31. {
  32.         unsigned char i;
  33.         float tp;
  34.         UsartConfiguration();
  35.         LED = 0;
  36.         while(1)
  37.         {
  38.                 Temp = Ds18b20ReadTemp();
  39.                 if(Temp< 0)                                //當溫度值為負數
  40.                   {
  41.                         Temp=Temp-1;
  42.                         tp=~Temp;
  43.                         Temp=tp*0.0625*10+0.5;        
  44.                         //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
  45.                         //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  46.                         //算由?.5,還是在小數點后面。
  47.                         TP[0] = Temp/256;
  48.                         TP[1] = Temp%256;
  49.          
  50.                   }
  51.                   else
  52.                   {
  53.                     tp = Temp;                        
  54.                         Temp=tp*0.0625*10+0.5;        
  55.                         //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
  56.                         //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  57.                         //算加上0.5,還是在小數點后面。
  58.                         TP[0] = Temp/256;
  59.                         TP[1] = Temp%256;
  60.                 }
  61.                 for(i=0; i<2; i++)
  62.                 {
  63.                         SBUF = TP[i];   //將要發送的數據放入到發送寄存器
  64.                         while(!TI);                  //等待發送數據完成
  65.                         TI=0;
  66.                         Delay10ms(100);                  //延時一下再發                          //清除發送完成標志位
  67.                 }
  68.         
  69.             //Delay10ms(10);        
  70.         }
  71. }
  72. /*******************************************************************************
  73. * 函 數 名         :UsartConfiguration()
  74. * 函數功能                   :設置串口
  75. * 輸    入         : 無
  76. * 輸    出         : 無
  77. *******************************************************************************/

  78. void UsartConfiguration()
  79. {
  80.         SCON=0X50;                        //設置為工作方式1
  81.         TMOD=0X20;                        //設置計數器工作方式2
  82.         PCON=0X00;                        //波特率加倍
  83.         TH1=0XFA;                    //計數器初始值設置,注意波特率是4800的
  84.         TL1=0XFA;
  85.         EA=1;                                                //打開總中斷
  86.         TR1=1;                                            //打開計數器
  87. }

  88. /*******************************************************************************
  89. * 函 數 名         : Delay10ms
  90. * 函數功能                   : 延時函數,延時10ms
  91. * 輸    入         : 無
  92. * 輸    出         : 無
  93. *******************************************************************************/

  94. void Delay10ms(unsigned int c)   //誤差 0us
  95. {
  96.     unsigned char a, b;

  97.         //--c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了--//
  98.     for (;c>0;c--)
  99.         {
  100.                 for (b=38;b>0;b--)
  101.                 {
  102.                         for (a=130;a>0;a--);
  103.                 }         
  104.         }      
  105. }

復制代碼
接收部分代碼:
  1. #include <reg51.h>
  2. #include "ds18b20.h"

  3. //--定義使用的IO--//
  4. #define GPIO_DIG P0

  5. sbit LSA=P2^0;
  6. sbit LSB=P2^1;
  7. sbit LSC=P2^2;
  8. sbit E = P1^0;
  9. sbit AB = P2^3;

  10. //--定義全局變量--//
  11. unsigned char TP[8];
  12. int Temp;
  13. int i;
  14. int j = -1;
  15. int receiveData;
  16. unsigned char receive[2];


  17. unsigned char code DIG_CODE[17]={
  18. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  19. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  20. //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼
  21. unsigned char DisplayData[8];
  22. //用來存放要顯示的8位數的值

  23. //--聲明全局函數--//
  24. void DigDisplay();         //動態顯示函數           
  25. void UsartConfiguration();
  26. /*******************************************************************************
  27. * 函 數 名         : main
  28. * 函數功能                   : 主函數
  29. * 輸    入         : 無
  30. * 輸    出         : 無
  31. *******************************************************************************/

  32. void main()
  33. {
  34.         float tp;
  35.         UsartConfiguration();
  36.         E = 1;
  37.         AB = 1;        
  38.         while(1)
  39.         {
  40.                 Temp = Ds18b20ReadTemp();
  41.                 if(Temp< 0)                                //當溫度值為負數
  42.                   {
  43.                         Temp=Temp-1;
  44.                         tp=~Temp;
  45.                         Temp=tp*0.0625*10+0.5;        
  46.                         //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
  47.                         //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  48.                         //算由?.5,還是在小數點后面。
  49.                         TP[4] = (Temp%1000)/100;
  50.                         TP[5] = ((Temp%1000)%100)/10;
  51.                         TP[6] = Temp%10;
  52.                         TP[7] =  12;
  53.          
  54.                   }
  55.                   else
  56.                   {
  57.                     tp = Temp;                        
  58.                         Temp=tp*0.0625*10+0.5;        
  59.                         //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
  60.                         //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  61.                         //算加上0.5,還是在小數點后面。
  62.                         TP[4] = (Temp%1000)/100;
  63.                         TP[5] = ((Temp%1000)%100)/10;
  64.                         TP[6] = Temp%10;
  65.                         TP[7] =  12;
  66.                 }
  67. //
  68.                 if(RI == 1)                                //查看是否接收到數據
  69.                 {
  70.                         j++;  
  71.                         receive[j] = SBUF;        //讀取數據
  72.                         if(j==2)
  73.                         {
  74.                             j = 0;
  75.                                 receiveData = 256*receive[0]+receive[1];
  76.                                 receive[0] = SBUF;
  77.                                 TP[0] =  (receiveData%1000)/100;
  78.                                 TP[1] =  ((receiveData%1000)%100)/10;
  79.                                 TP[2] =  receiveData%10;
  80.                                 TP[3] =  12;
  81.                         }
  82.                         RI = 0;        
  83.                         
  84.                 }
  85.             DigDisplay();
  86.         //        P0 = 0xef;
  87.         
  88.                
  89.         }
  90. }
  91. /*******************************************************************************
  92. * 函 數 名         :UsartConfiguration()
  93. * 函數功能                   :設置串口
  94. * 輸    入         : 無
  95. * 輸    出         : 無
  96. *******************************************************************************/

  97. void UsartConfiguration()
  98. {
  99.         SCON=0X50;                        //設置為工作方式1
  100.         TMOD=0X20;                        //設置計數器工作方式2
  101.         //PCON=0X80;                        //波特率加倍
  102.         PCON=0x00;                        //波特率未加倍
  103.         TH1=0XFA;                    //計數器初始值設置,注意波特率是4800的
  104.         TL1=0XFA;
  105.         TR1=1;                                            //打開計數器
  106. }
  107. /*******************************************************************************
  108. * 函 數 名         : DigDisplay
  109. * 函數功能                   : 使用數碼管顯示
  110. * 輸    入         : 無
  111. * 輸    出         : 無
  112. *******************************************************************************/
  113. void DigDisplay()
  114. {
  115.         unsigned char i;
  116.         unsigned int j;
  117.         for(i=0;i<8;i++)
  118.         {
  119.                 switch(i)         //位選,選擇點亮的數碼管,
  120.                 {
  121.                         case(0):
  122.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  123.                         case(1):                                                                                                                                                                                                                           
  124.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  125.                         case(2):
  126.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  127.                         case(3):
  128.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  129.                         case(4):
  130.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  131.                         case(5):
  132.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位
  133.                         case(6):
  134.                                 LSA=0;LSB=1;LSC=1; break;//顯示第6位
  135.                         case(7):
  136.                                 LSA=1;LSB=1;LSC=1; break;//顯示第7位        
  137.                 }
  138.                 if(i!=1 && i!=5)
  139.                 GPIO_DIG=DIG_CODE[TP[i]];//發送段碼
  140.                 else if(i==1 || i==5)
  141.                 GPIO_DIG=DIG_CODE[TP[i]]+0x80;
  142.                 j=30;                                                 //掃描間隔時間設定.
  143.                 while(j--);        
  144.                 GPIO_DIG=0x00;//消隱   
  145.         }
  146. }

復制代碼


433M無線溫度系統的全部設計資料51hei下載地址:
基于433M室內外無線溫度傳輸模塊.zip (1.62 MB, 下載次數: 97)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:243076 發表于 2019-1-14 16:50 | 只看該作者
樓主你好,我想問一下你仿真的圖片顯示的是P3.7  這個是接受的嗎?   發送的是不是只需要接P3.6就可以了
回復

使用道具 舉報

板凳
ID:372961 發表于 2019-1-19 23:36 | 只看該作者
tw081531 發表于 2019-1-14 16:50
樓主你好,我想問一下你仿真的圖片顯示的是P3.7  這個是接受的嗎?   發送的是不是只需要接P3.6就可以了

仿真圖不支持433模擬,所以仿真圖中我沒有放入串口通信的部分。P3.7是用于ds18b20的,另外433這邊只支持半雙工,同一時間只能由一個設備發送。從全雙工改下就可以
回復

使用道具 舉報

地板
ID:483019 發表于 2019-3-1 22:53 | 只看該作者
哇!好耶,很想學習。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产福利视频 | 在线日韩av电影 | 亚洲精品久久久蜜桃网站 | 日韩一区二区免费视频 | 亚洲欧洲激情 | 久草在线免费资源 | 台湾a级理论片在线观看 | 亚洲一区二区在线电影 | 国产精品国产精品国产专区不卡 | 日本成人午夜影院 | 国产午夜影院 | 视频精品一区 | 91精品国产高清久久久久久久久 | 久久久久久久久91 | 国产精品美女久久久久久免费 | 日本 欧美 国产 | 亚洲欧美日韩中文在线 | 精品日韩 | 成人av网页 | 久久精品一区二区视频 | 青青草社区| 欧产日产国产精品99 | 成人久久久久 | 亚洲男人的天堂网站 | 91免费看片| 浴室洗澡偷拍一区二区 | 亚洲一区二区免费看 | 亚洲三级在线 | 欧美日韩精品中文字幕 | 日韩一区二区在线免费观看 | 一级毛片免费看 | 亚洲 欧美 另类 日韩 | 欧美h | 一级欧美日韩 | 中文字幕二区三区 | 国产伦精品一区二区三区精品视频 | 午夜影院操 | 国产精品久久久久久久久久久久 | japanhd美女动 | 国产精品不卡一区二区三区 | 成人h电影在线观看 |