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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

溫度采集DS18B20(LCD)

[復制鏈接]
跳轉到指定樓層
樓主
ID:169534 發表于 2020-7-8 04:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int

sbit DQ = P3^6;            //DS18B20數據口
uchar FLAG=0;   //正負溫度標志

unsigned char TMPH,TMPL;

//這三個引腳參考資料
sbit E=P2^7;                //1602使能引腳
sbit RW=P2^6;                //1602讀寫引腳       
sbit RS=P2^5;                //1602數據/命令選擇引腳


void delay_1()
{
        int i,j;
        for(i=0; i<=10; i++)
        for(j=0; j<=2; j++)
;
}


// 1602命令函數
void enable(uchar del)
{
        P0 = del;
        RS = 0;
        RW = 0;
        E = 0;
        delay_1();
        E = 1;
        delay_1();
}


void write(uchar del)
{
        P0 =del;
        RS = 1;
        RW = 0;
        E = 0;
        delay_1();
        E = 1;
        delay_1();
}

// 1602初始化,請參考1602的資料
void L1602_init(void)
{
        enable(0x01);
        enable(0x38);
        enable(0x0c);
        enable(0x06);
        enable(0xd0);
}


//改變液晶中某位的值,如果要讓第一行,第五個字符顯示"b" ,調用該函數如下 L1602_char(1,5,'b')
void L1602_char(uchar hang,uchar lie,char sign)
{
        uchar a;
        if(hang == 1) a = 0x80;
        if(hang == 2) a = 0xc0;
        a = a + lie - 1;
        enable(a);
        write(sign);
}

//改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調用該函數如下L1602_string(1,5,"ab cd ef;")
void L1602_string(uchar hang,uchar lie,uchar *p)
{
        uchar a;
        if(hang == 1) a = 0x80;
        if(hang == 2) a = 0xc0;
        a = a + lie - 1;
        enable(a);
        while(1)
        {
                if(*p == '\0') break;
                write(*p);
                p++;
        }
}

void delay(uint N)
{
        int i;
        for(i=0; i<N; i++)
        ;
}

Init_Ds18b20()
{
   bit Status_Ds18b20;
   DQ=1;
   DQ=0;
   delay(250);
   DQ=1;
   delay(20);
   if(!DQ)
     Status_Ds18b20=0;
        else
         Status_Ds18b20=1;
   delay(250);
   DQ=1;
   return Status_Ds18b20;
}
uchar Read_Ds18b20()
{
   uchar i=0,dat=0;
   for(i=0;i<8;i++)
     {
           DQ=1;
           DQ=0;
           dat>>=1;
           DQ=1;
           if(DQ)
             dat|=0x80;
           DQ=1;
           delay(25);
         }
           return dat;
}

void Witie_Ds18b20(uchar dat)
{
   uchar i=0;
   for(i=0;i<8;i++)
   {
          DQ=1;
          dat>>=1;
          DQ=0;
          DQ=CY;
          delay(25);
          DQ=1;
   }
}

void chuli()
{
                  uint temp;
            float tem;
                Init_Ds18b20();                                        //復位
                Witie_Ds18b20(0xcc);                 //寫跳過ROM命令
                Witie_Ds18b20(0x44);                    //開啟溫度轉換
                Init_Ds18b20();       
                Witie_Ds18b20(0xcc);
                Witie_Ds18b20(0xbe);            //讀暫存器
                TMPL = Read_Ds18b20();
                TMPH = Read_Ds18b20();
               
                temp = TMPH;
                temp <<= 8;      
                temp = temp | TMPL;
                if(TMPH>=8)
                {
                   temp=~temp+1;
                   FLAG=1;
                }
                else FLAG=0;         
                tem=temp*0.0625;
                temp=tem*100;

                if((temp/10000)==0)                                 //當高位為0時不顯示0
                     L1602_char(2,5,' ');
                else
                     L1602_char(2,5,temp/10000 + 48);
                if((temp/10000)==0&&(temp/1000%10)==0)                                 //當高位為0時不顯示0
                     L1602_char(2,6,' ');
                else
                     L1602_char(2,6,temp/1000%10 + 48);
            L1602_char(2,7,temp/100%10 + 48);
       
            L1602_char(2,8,0x2e);         
                L1602_char(2,9,temp/10%10 + 48);
                L1602_char(2,10,temp%10 + 48);          
                L1602_char(2,11,0xdf);                   //溫度符號C前的圈
                if(FLAG==1)
                          L1602_char(2,4,0x2d); //輸出-號
                else
                    L1602_char(2,4,0x2b); //輸出+號
}
void main()
{
//        float tt;
//        uint temp;
        P2 = 0x00;
        L1602_init();
        L1602_string(1,1,"  DS18B20 TEST  ");
        L1602_string(2,1,"           C");
        while(1)
        {
        chuli();       
        }
}

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

使用道具 舉報

沙發
ID:818709 發表于 2021-12-9 17:57 | 只看該作者
代碼運行了不隨溫度改變呀 一直是0.06
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久草资源在线视频 | 日本一二三区高清 | 亚洲精品久久久久久国产精华液 | 91高清免费观看 | 日韩不卡视频在线观看 | 午夜精品在线观看 | 久久最新 | 欧美精品福利视频 | 天堂一区二区三区 | 日韩精品免费看 | 手机日韩 | 91精品久久久久久久久久入口 | 一区二区三区av | 91在线视频观看免费 | 成人三级电影 | 夜夜操av | 黄网站在线观看 | 精品久久久久久久久久久久久久 | 在线播放中文字幕 | 国产一区二区三区在线免费观看 | 一区二区福利视频 | 亚州精品天堂中文字幕 | 在线 丝袜 欧美 日韩 制服 | 午夜免费av | 精品国产免费人成在线观看 | 91成人免费看 | 久久久久久黄 | 日韩精品一区二区三区中文字幕 | 精品一区av | 午夜精品久久久久久久星辰影院 | 97精品超碰一区二区三区 | 中文字幕视频免费 | 久久久久久国产精品 | 午夜三区 | 国产一区视频在线 | 国产精品一区二区三区四区 | 一区中文字幕 | 欧美黄在线观看 | 91精品国产一区二区三区香蕉 | 自拍偷拍精品 | 中文字幕成人在线 |