欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14052|回復: 14
收起左側

DS18B20溫度傳感器protues仿真程序

  [復制鏈接]
ID:161768 發表于 2017-2-19 00:56 | 顯示全部樓層 |閱讀模式
DS18B20信真圖.gif

  1. /*-------------------------------
  2. 作者:小新
  3. qq:405228062
  4. email:xuxing1261207@126.com
  5. --------------------------------*/
  6. #include <reg51.h>//用AT89C51時就用這個頭文件
  7. //#include <reg52.h>
  8. #include <absacc.h>
  9. #include <ctype.h>
  10. #include <math.h>
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include <DS18B20.h>
  14. #include "LCD1602.h"                        ////液晶顯示頭文件
  15. sbit Key1=P1^0;
  16. sbit Key2=P1^1;
  17. sbit Up  =P1^2;
  18. sbit Down=P1^3;
  19. unsigned char t[2],*pt;                                //用來存放溫度值,測溫程序就是通過這個數組與主函數通信的
  20. unsigned char  TempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0'};
  21.                                                                 //顯示實時溫度,上電時顯示+125.00C
  22. unsigned char  TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,
  23.                                                                 0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'};
  24.                                                                 //顯示溫度上下限,上電時顯示TH:+125 TL:+124C                                                       
  25. unsigned char code dotcode[4]={0,25,50,75};
  26. /***因顯示分辨率為0.25,但小數運算比較麻煩,故采用查表的方法*******
  27. 再將表值分離出十位和個位后送到十分位和百分位********************/


  28. void covert0( unsigned char TH, unsigned char TL)        //將溫度上下限轉換為LCD顯示的數據
  29. {
  30.    if(TH>0x7F)                    //判斷正負,如果為負溫,將其轉化為其絕對值
  31.    {
  32.     TempBuffer0[3]=0x2d;             //0x2d為"-"的ASCII碼
  33.         TH=~TH;
  34.         TH++;
  35.    }
  36.    else TempBuffer0[3]=0x2b;        //0x2B為"+"的ASCII碼

  37.    if(TL>0x7f)
  38.    {
  39.    TempBuffer0[11]=0x2d;             //0x2d為"-"的ASCII碼
  40.    TL=~TL+1;
  41.    }
  42.    else TempBuffer0[11]=0x2b;        //0x2B為"+"的ASCII碼

  43.   TempBuffer0[4]=TH/100+0x30;                             //分離出TH的百十個位
  44.   if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位數消隱
  45.   TempBuffer0[5]=(TH%100)/10+0x30;                                //分離出十位
  46.   TempBuffer0[6]=(TH%100)%10+0x30;                                 //分離出個位
  47.   TempBuffer0[12]=TL/100+0x30;                             //分離出TL的百十個位
  48.   if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; //百位數消隱
  49.   TempBuffer0[13]=(TL%100)/10+0x30;                                //分離出十位
  50.   TempBuffer0[14]=(TL%100)%10+0x30;                                 //分離出個位
  51. }


  52. void covert1(void)        //將溫度轉換為LCD顯示的數據
  53. {
  54.    unsigned char x=0x00,y=0x00;
  55.    t[0]=*pt;
  56.    pt++;
  57.    t[1]=*pt;
  58.    if(t[1]>0x07)                    //判斷正負溫度
  59.    {
  60.     TempBuffer1[0]=0x2d;             //0x2d為"-"的ASCII碼
  61.         t[1]=~t[1];                         /*下面幾句把負數的補碼*/
  62.         t[0]=~t[0];                  /* 換算成絕對值*********/
  63.         x=t[0]+1;                                 /***********************/
  64.         t[0]=x;                                         /***********************/
  65.         if(x>255)                /**********************/
  66.         t[1]++;                                 /*********************/
  67.    }
  68.    else TempBuffer1[0]=0x2b;        //0xfe為變"+"的ASCII碼
  69.   t[1]<<=4;                //將高字節左移4位
  70.   t[1]=t[1]&0x70;                //取出高字節的3個有效數字位
  71.   x=t[0];                                        //將t[0]暫存到X,因為取小數部分還要用到它
  72.   x>>=4;                                        //右移4位
  73.   x=x&0x0f;                                        //和前面兩句就是取出t[0]的高四位       
  74.   t[1]=t[1]|x;                        //將高低字節的有效值的整數部分拼成一個字節
  75.   TempBuffer1[1]=t[1]/100+0x30;                             //+0x30 為變 0~9 ASCII碼
  76.    if( TempBuffer1[1]==0x30) TempBuffer1[1]=0xfe; //百位數消隱
  77.   TempBuffer1[2]=(t[1]%100)/10+0x30;                                //分離出十位
  78.   TempBuffer1[3]=(t[1]%100)%10+0x30;                                 //分離出個位
  79.   t[0]=t[0]&0x0c;                                                        //取有效的兩位小數
  80.   t[0]>>=2;                                                                        //左移兩位,以便查表
  81.   x=t[0];                                                                               
  82.   y=dotcode[x];                                                                        //查表換算成實際的小數
  83.   TempBuffer1[5]=y/10+0x30;                                                        //分離出十分位
  84.   TempBuffer1[6]=y%10+0x30;                                                        //分離出百分位
  85. }                       

  86. void delay(unsigned int i)
  87. {
  88.         while(i--);
  89. }

  90. main()
  91. {
  92. unsigned char TH=50,TL=10,temp=0;                                            //下一步擴展時可能通過這兩個變量,調節上下限
  93.                                                                                 //測溫函數返回這個數組的頭地址
  94. Beep=0;Relay=0;
  95. while(1)
  96. {       
  97.     if(Key1==0)
  98.         {
  99.            while(!Key1);
  100.            TH++;
  101.         }
  102.         if(Key2==0)
  103.         {
  104.                 while(!Key2);
  105.                 TH--;
  106.         }
  107.        
  108.         if(Up==0)
  109.         {
  110.            while(!Up);
  111.            TL++;
  112.         }
  113.         if(Down==0)
  114.         {
  115.                 while(!Down);
  116.                 TL--;
  117.         }
  118.         pt=ReadTemperature(TH,TL,0x3f);                 //上限溫度-22,下限-24,分辨率10位,也就是0.25C
  119.                                                                                  //讀取溫度,溫度值存放在一個兩個字節的數組
  120.    
  121.     if((t[1]>TH)|(t[1]<TL))
  122.         {
  123.             Beep=1;
  124.                 Relay=1;
  125.        
  126.         }
  127.         else
  128.         {
  129.             Beep=0;
  130.                 Relay=0;
  131.         }
  132.         delay(10000);
  133.         covert1();
  134.         covert0(TH,TL);
  135.         LCD_Initial();                                                        //第一個參數列號,第二個為行號,為0表示第一行
  136.                                                                                         //為1表示第二行,第三個參數為顯示數據的首地址
  137.         LCD_Print(0,0,TempBuffer0);       
  138.         LCD_Print(0,1,TempBuffer1);                                
  139. }
  140. }

復制代碼
0.png


DS18B20溫度傳感器.rar

110.04 KB, 下載次數: 456, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:4810 發表于 2017-2-19 10:42 | 顯示全部樓層
學習學習
回復

使用道具 舉報

無效樓層,該帖已經被刪除
無效樓層,該帖已經被刪除
ID:248620 發表于 2017-11-12 16:15 | 顯示全部樓層
學習學習
回復

使用道具 舉報

ID:324052 發表于 2018-5-7 11:33 | 顯示全部樓層
感謝                  
回復

使用道具 舉報

ID:295227 發表于 2018-5-15 11:47 | 顯示全部樓層
謝謝分享~~~
回復

使用道具 舉報

ID:361418 發表于 2018-6-28 22:39 | 顯示全部樓層
下載不了啊
回復

使用道具 舉報

9#
無效樓層,該帖已經被刪除
ID:442582 發表于 2018-12-10 17:35 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:230847 發表于 2018-12-14 13:54 | 顯示全部樓層
正需要這個,自己寫的程序讀不出數據,不知道是哪里的問題,參考一下。謝謝
回復

使用道具 舉報

ID:449534 發表于 2018-12-19 08:45 | 顯示全部樓層
學習一下
回復

使用道具 舉報

13#
無效樓層,該帖已經被刪除
14#
無效樓層,該帖已經被刪除
ID:302712 發表于 2019-6-25 21:13 | 顯示全部樓層
這個不錯哦
回復

使用道具 舉報

ID:152913 發表于 2020-4-3 15:38 | 顯示全部樓層
[SPICE] TRAN:  Timestep too small; timestep = 1.73472e-018: trouble with node #00059.
報錯這個怎么解決嘞
回復

使用道具 舉報

ID:742058 發表于 2020-5-2 00:04 | 顯示全部樓層
太棒棒了
回復

使用道具 舉報

18#
無效樓層,該帖已經被刪除
ID:785363 發表于 2020-6-21 19:32 | 顯示全部樓層
太好了
回復

使用道具 舉報

20#
無效樓層,該帖已經被刪除
ID:787318 發表于 2020-6-23 09:06 | 顯示全部樓層
編譯 顯示 有 兩個錯誤    應該是  沒有。h  文件
回復

使用道具 舉報

22#
無效樓層,該帖已經被刪除
ID:981034 發表于 2021-11-17 16:35 | 顯示全部樓層
正需要這個,自己寫的程序讀不出數據,不知道是哪里的問題,參考一下。謝謝
回復

使用道具 舉報

24#
無效樓層,該帖已經被刪除
25#
無效樓層,該帖已經被刪除
26#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表