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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機下位機與上位機程序溫度檢測程序

[復制鏈接]
跳轉到指定樓層
樓主
1、本實驗所用單片機已經將DS18B20的數據腳連接到單片機的P3.7,所以只需要將板子連接到電腦即可,不需要接其他線。

2、打開上位機.exe文件,選擇COM3-連接,溫度窗口就會有溫度輸出。

源碼:
/*********************************************************************************************
功能:下位機通過串口把DS18B20的監測數據發送到上位機并顯示
/**********************************************************************************************/

#include<reg52.h>

#define uint  unsigned int
#define uchar unsigned char

sbit DQ=P3^7;                            // 接DS18B20的數據端

/***********************************
   函數:DelayMs(uint z)
----------------------
   說明:毫秒級的延時
   參數:z 代表要延時的毫秒數
返回值:無
***********************************/
void DelayMs(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}


/***********************************
   void ReSet(void)
------------------
   說明:復位啟動DS18B20
   參數:無
返回值:無
***********************************/
void ReSet(void)
{
        uint i;
        DQ=0;
        i=100;
        while(i--);
        DQ=1;
        i=4;
        while(i--);
        while(DQ);
        while(~DQ);
        i=4;
        while(i--);
}



/***********************************
   uchar ReadByte(void)
------------------
   說明:讀取DS18B20的一個字節
   參數:無
返回值:返回讀取到的字節
***********************************/
uchar ReadByte(void)
{
        uchar i,j,b,dat=0;
        for(j=0;j<8;j++)
        {                                                
                DQ=0;
                i++;
                DQ=1;        
                i=3;                // 延時15us
                while(--i);
                b=DQ;
                i=10;
                while(i--);
                dat=(b<<7)|(dat>>1);
        }
        return(dat);
}


/************************************************
   void WriteByte(uchar b)
------------------
   說明:寫數據的一個字節,滿足寫1和寫0的時隙要求
   參數:b代表要寫入到DS18B20的內容
返回值:無
************************************************/
void WriteByte(uchar b)
{
        uint i;
        uchar j;
        bit btmp;
        for(j=0;j<8;j++)
        {
                btmp=b&0x01;
                b=b>>1;                         // 取下一位(由低位向高位)
                if(btmp)
                {
                        DQ=0;
                        i++;
                        i++;
                        DQ=1;
                        i=10;
                        while(i--);                // 整個寫1時隙不低于60us
                }
                else
                {
                        DQ=0;
                        i=10;
                        while(i--);         // 保持低在60us到120us之間
                        DQ=1;
                        i++;
                        i++;
                }
        }
}




/************************************************
   uint ReadTemp(void)
------------------
   說明:讀取溫度值
   參數:無
返回值:返回讀取到的溫度
************************************************/
uint ReadTemp(void)
{
        uchar TempLow,TempHig;         // 溫度值低位、高位字節
        float tt;
        uint temp;
        ReSet();                                // 產生復位脈沖,初始化DS18B20
        WriteByte(0xcc);                // skip rom 命令
        WriteByte(0x44);                // convert T 命令
        ReSet();
        WriteByte(0xcc);                // skip rom 命令
        WriteByte(0xbe);                // read 溫度命令
        TempLow=ReadByte();                // 溫度值低位字節(其中低4位為二進制的"小數"部分)
        TempHig=ReadByte();                // 高位值高位字節(其中高5位為符號位)
        temp=TempHig;
        temp<<=8;
        temp=temp|TempLow;
        tt=temp*0.0625;
        temp=tt*10+0.5;
        return (temp);
}



/***********************************
   函數:void send(uint dat)
---------------------------
   說明:將測得的距離通過串口發送出去
   參數:dat是測得的距離
返回值:無
***********************************/        
void Send(uint dat)
{
        SBUF=(dat/1000)+ 48;                // 發送 千 位
        while(!TI);
        TI=0;
        SBUF=(dat%1000/100)+ 48;        // 發送 百 位
        while(!TI);
        TI=0;
        SBUF=(dat%100/10)+48;                // 發送 十 位
        while(!TI);
        TI=0;
        SBUF=(dat%10)+48;                        // 發送 個 位
        while(!TI);
        TI=0;
}

/***********************************
   函數:void InitUart()
----------------------
   說明:對串口進行初始化
   參數:無
返回值:無
***********************************/
void InitUart()
{
    SCON = 0x50;        //串口工作方式1,允許串口接收(SCON = 0x40 時禁止串口接收)
        PCON = 0x80;        //波特率倍頻(屏蔽本句波特率為2400)
        TMOD = 0x20;        //定時器T/C1工作方式2
        TH1 = 0xF3;        //定時器初值高8位設置
        TL1 = 0xF3;        //定時器初值低8位設置
        EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)
        ES = 1; //允許UART串口的中斷        
        TR1 = 1;        //定時器啟動  
}



/***********************
   函數:void main(void)
----------------------
   說明:主函數
   參數:無
返回值:無
***********************/
void main()
{
        uint temp;                                        // 用來保存讀取到的溫度值
        InitUart();
        while(1)
        {
                                
                        temp=ReadTemp();
                        Send(temp);
                        DelayMs(200);

        }
}

/*****************************************************************************/
/*****************************************************************************/
篇幅原因只展示部分代碼,詳細代碼以及上位機程序請下載查看。


單片機代碼下載: 溫度檢測系統.zip (59.84 KB, 下載次數: 24)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区精品 | 最新中文字幕一区 | 欧美aaa| 狠狠操狠狠色 | 亚洲成人日韩 | 精品亚洲一区二区三区四区五区 | 97视频精品 | 久在草| 国产日韩一区 | 久久久久国产精品一区二区 | 国产欧美精品一区二区三区 | 久久婷婷香蕉热狠狠综合 | 九九热免费在线观看 | 久久福利电影 | 91久久国产综合久久 | 成av在线 | h视频在线免费观看 | 91av在线免费| 免费在线观看一区二区三区 | 亚洲免费av一区 | 精品一区二区三区在线观看国产 | 亚州中文| 亚洲第一在线视频 | 久久久久久毛片免费观看 | 日本一区二区三区免费观看 | 精品国产一区二区三区久久 | 一级黄色片一级黄色片 | 天天射影院 | 国产精品日日夜夜 | www成人免费视频 | 免费午夜电影 | 国产精品久久久久久久久久久久 | 黄色网址在线免费观看 | 一级片av | 91一区二区| 久久成人综合 | 天天躁日日躁狠狠很躁 | 久久精品日产第一区二区三区 | 国产一区二区在线91 | 超碰最新在线 | 欧美午夜精品 |