找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4310|回復(fù): 2
收起左側(cè)

單片機(jī)P0口接LCD1602顯示環(huán)境溫度,溫度檢測(cè)通過DS18B20實(shí)現(xiàn)。

[復(fù)制鏈接]
ID:432509 發(fā)表于 2018-11-24 18:53 | 顯示全部樓層 |閱讀模式
下面是模塊化程序:需要私我。
模塊.png

keilC51代碼:
  1. #include <reg51.h>
  2. #include<intrins.h>
  3. #include "18B20.h"
  4. #include "delay.h"
  5. #include "LCD1602.h"
  6. float TM;            //讀一個(gè)溫度時(shí)的溫度轉(zhuǎn)換中間     
  7. int tvalue;          //溫度值
  8. unsigned char tflag;    //溫度正負(fù)標(biāo)志
  9. unsigned char data disdata[5];      //溫度字型顯示中間變量

  10. void delay_18B20(unsigned int i)//延時(shí)1微秒
  11. {
  12.          while(i--);
  13. }

  14. void ds1820rst()     /*ds1820復(fù)位*/
  15. {  
  16.          unsigned char x=0;
  17.          DQ = 1;          //DQ復(fù)位
  18.          delay_18B20(4);  //延時(shí)
  19.          DQ = 0;          //DQ拉低
  20.          delay_18B20(80); //精確延時(shí)大于480us   540us
  21.          DQ = 1;          //拉高總線   15-60us
  22.          delay_18B20(20);
  23.    x=DQ;          //讀總線狀態(tài)   為0復(fù)位成功,1復(fù)位不成功
  24.    delay(30);
  25.    DQ=1;      //釋放總線         
  26. }  

  27. unsigned char ds1820rd()  /*讀數(shù)據(jù)*/
  28.   {
  29.                 unsigned char i=0;
  30.           unsigned char dat = 0;
  31.           for (i=8;i>0;i--)
  32.           {   
  33.                         DQ = 0; //給脈沖信號(hào)
  34.                   dat>>=1;
  35.                   DQ = 1; //給脈沖信號(hào)
  36.                   if(DQ)
  37.                   dat|=0x80;     //dat和0x80做“或”運(yùn)算(最高位1,其他位保持不變)
  38.                   delay_18B20(10);
  39.           }
  40.            return(dat);
  41.   }

  42. void ds1820wr(unsigned char wdata) /*寫數(shù)據(jù)*/
  43. {
  44.                 unsigned char i=0;
  45.     for (i=8; i>0; i--)
  46.     {
  47.                         DQ = 0;
  48.       DQ = wdata&0x01;      //
  49.       delay_18B20(10);
  50.       DQ = 1;
  51.       wdata>>=1;
  52.     }
  53. }
  54.         
  55. read_temp()/*讀取溫度值并轉(zhuǎn)換*/
  56. {
  57.         unsigned char a,b;
  58.   ds1820rst();   
  59.   ds1820wr(0xcc);//*跳過讀序列號(hào)*/
  60.   ds1820wr(0x44);//*啟動(dòng)溫度轉(zhuǎn)換*/
  61.   ds1820rst();   
  62.   ds1820wr(0xcc);//*跳過讀序列號(hào)*/
  63.   ds1820wr(0xbe);//*讀取溫度*/
  64.   a=ds1820rd();
  65.   b=ds1820rd();
  66.   tvalue=b;
  67.   tvalue<<=8;
  68.   tvalue=tvalue|a;
  69.         TM=tvalue*0.625;
  70.         tvalue=TM*1+0.5;
  71.   /*
  72.     if(tvalue<0x0FFF)
  73.     tflag=0;
  74.     else
  75.    {tvalue=~tvalue+1;
  76.          tflag=1;
  77.    }
  78.     tvalue=tvalue*(0.425);//溫度值擴(kuò)大10倍,精確到1位小數(shù)  */
  79.         return(tvalue);        
  80.   }

  81. void ds1820disp()//溫度值顯示
  82.         {
  83.                 unsigned char flagdat;
  84.           disdata[0]=tvalue/1000+0x30;//百位數(shù)
  85.     disdata[1]=tvalue%1000/100+0x30;//十位數(shù)
  86.     disdata[2]=tvalue%100/10+0x30;//個(gè)位數(shù)
  87.     disdata[3]=tvalue%10+0x30;//小數(shù)位
  88.    
  89.     if(tflag==0)
  90.             flagdat=0x20;//正溫度不顯示符號(hào)
  91.     else
  92.        flagdat=0x2d;//負(fù)溫度顯示負(fù)號(hào):-

  93.     if(disdata[0]==0x30)
  94.           {disdata[0]=0x20;//如果百位為0,不顯示
  95.                 if(disdata[1]==0x30)
  96.                 {disdata[1]=0x20;//如果百位為0,十位為0也不顯示
  97.                 }
  98.                 }

  99.            write_com(0x80+0x40);
  100.            write_date(flagdat);//顯示符號(hào)位
  101.            write_com(0x80+0x41);
  102.            write_date(disdata[0]);//顯示百位
  103.            write_com(0x80+0x42);
  104.            write_date(disdata[1]);//顯示十位         
  105.            write_com(0x80+0x43);
  106.            write_date(disdata[2]);//顯示個(gè)位         
  107.            write_com(0x80+0x44);
  108.            write_date(0x2e);//顯示小數(shù)點(diǎn)         
  109.            write_com(0x80+0x45);
  110.            write_date(disdata[3]);//顯示小數(shù)位
  111.            write_com(0x80+0x46);
  112.            write_date('C');
  113.    }
復(fù)制代碼

下載:http://www.torrancerestoration.com/bbs/dpj-143026-1.html

新手,大佬誤噴。

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:524762 發(fā)表于 2019-4-29 21:10 | 顯示全部樓層
為什么我的運(yùn)行有錯(cuò)呢
回復(fù)

使用道具 舉報(bào)

ID:118488 發(fā)表于 2021-7-30 13:46 | 顯示全部樓層
xiexie,xuexi~~~~~~~~~~
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表