日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年01月21日(星期二)

正在發(fā)生

2020年01月21日 | 編程實現(xiàn)單片機ds18b20溫度測量及顯示系統(tǒng)

發(fā)布者:算法之手 來源: 51hei關(guān)鍵字:編程  單片機  ds18b20  溫度測量  顯示系統(tǒng) 手機看文章 掃描二維碼
隨時隨地手機看文章
  • 利用開發(fā)板上的ds18b20傳感器測量當前溫度,利用數(shù)碼管輸出當前溫度值。

實現(xiàn)結(jié)果:

測試結(jié)果顯示當前攝氏溫度25.3度。

實現(xiàn)原理:

(1)獨立數(shù)碼管

數(shù)碼管分為共陽極和共陰極數(shù)碼管

通過控制數(shù)碼管中的8個二極管,來顯示數(shù)字。

(2)多位共陰數(shù)碼管和共陽數(shù)碼管

本項目使用的是6位共陰數(shù)碼管。

數(shù)碼管控制主要通過段鎖存和位鎖存控制顯示要顯示的數(shù)字如溫度。段鎖存是指6位共陰極數(shù)碼管段輸出端連接鎖存器74HC573的輸出端,鎖存器的輸入端連接單片機接口P0。位鎖存是指6位數(shù)碼管位置輸出端連接鎖存器74HC573的輸出端,鎖存器的輸入端連接單片機接口P0。段鎖存器片選端接單片機接口P2.6,位鎖存器片選端接單片機接口P2.7。

連接圖如下:





程序分析:溫度傳感器DS18B20接單片機P2.2,段鎖存接P2.6,位鎖存接P2.7,unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

顯示段碼值0~9,Unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

分別對應(yīng)相應(yīng)的數(shù)碼管點亮,即位碼。

溫度傳感器的程序有測溫的程序,測得的溫度通過數(shù)碼管顯示出來。其中使用了延時和中斷子程序。

  • 用液晶屏1602實現(xiàn)溫度顯示。

  • 利用按鍵實現(xiàn)攝氏溫度和華氏溫度的轉(zhuǎn)換,并顯示。

實現(xiàn)結(jié)果:

按下S2,顯示攝氏溫度如下

按下S2,顯示華氏溫度如下



實現(xiàn)原理:

在之前的溫度顯示模塊加入按鍵功能程序,利用兩種溫度轉(zhuǎn)換公式華氏溫度=(攝氏溫度*9/5)+32實現(xiàn)轉(zhuǎn)換。

相關(guān)程序如下:

void display(uint temp,uint hstemp)                                          //顯示程序

{


   if(s2==0)                           

   {


   ser=temp/10;

   SBUF=ser;

   A1=temp/100;

   A2t=temp%100;

   A2=A2t/10;

   A3=A2t%10;

   dula=0;

   P0=table[A1];                            //顯示百位

   dula=1;

   dula=0;


   wela=0;

   P0=0x7e;

   wela=1;

   wela=0;

   delay(1);


   dula=0;

   P0=table1[A2];                            //顯示十位

   dula=1;

   dula=0;


   wela=0;

   P0=0x7d;

   wela=1;

   wela=0;

   delay(1);


   P0=table[A3];                            //顯示個位

   dula=1;

   dula=0;


   P0=0x7b;

   wela=1;

   wela=0;

   delay(1);

   }

   if(s3==0)

   {

             

   ser1=hstemp/10;

   SBUF=ser1;

   A11=hstemp/100;

   A21t=hstemp%100;

   A21=A21t/10;

   A31=A21t%10;

   dula=0;

   P0=table[A11];                            //顯示百位

   dula=1;

   dula=0;


   wela=0;

   P0=0x7e;

   wela=1;

   wela=0;

   delay(1);


   dula=0;

   P0=table1[A21];                            //顯示十位

   dula=1;

   dula=0;


   wela=0;

   P0=0x7d;

   wela=1;

   wela=0;

   delay(1);


   P0=table[A31];                            //顯示個位

   dula=1;

   dula=0;


   P0=0x7b;

   wela=1;

   wela=0;

   delay(1);

   }

}


程序分析:s2,s3代表按鍵分別接在單片機P3.4,p3.5上,當按鍵按下時單片機相應(yīng)接口顯示低電平,松開顯示高電平。當檢測到S2按下時,顯示攝氏溫度。當檢測到S3按下時,顯示華氏溫度。主程序如下:

if(s2==0)

  {

  SendByte(A1*10+A2);

  SendStr(".");

  SendByte(A3);


  }

  if(s3==0)

  {            

                SendByte(A11*10+A21);

                 SendStr(".");

  SendByte(A3);

  }

  • 利用串口將當前溫度值發(fā)送至電腦,電腦端利用串口助手進行接收和顯示。

實現(xiàn)原理:

連接好串口或者usb轉(zhuǎn)串口至電腦,下載該程序,打開電源, 打開串口調(diào)試程序,將波特率設(shè)置為9600,無奇偶校驗,晶振11.0592MHz,發(fā)送和接收使用的格式相同。

串口通訊程序包括串口初始化,輸出字節(jié)函數(shù),輸出字符串函數(shù),主函數(shù)。溫度傳感器測得的溫度數(shù)值通過串口通訊程序輸出顯示在電腦上。

實現(xiàn)結(jié)果:

當按下S2按鍵,電腦顯示如下:

發(fā)送和接收都是16進制,1B=1*16+11*1=27,2E代表小數(shù)點,01=1,所以顯示溫度27.2攝氏度。

當按下S3按鍵,電腦顯示如下:

發(fā)送和接收都是16進制,51=5*16+1*1=81,2E代表小數(shù)點,03=3,所以顯示溫度81.3華氏。

單片機源程序如下:

//安裝目錄下的EXE文件打開后可在電腦上顯示當前溫度值

#include

#define uchar unsigned char

#define uint unsigned int

sbit DS=P2^2;           //define interface

uint temp;             // variable of temperature

uchar flag1;            // sign of the result positive or negative

sbit dula=P2^6;

sbit wela=P2^7;

sbit s2=P3^4;

sbit s3=P3^5;

uchar A1,A2,A2t,A3,ser,A11,A21,A21t,A31,ser1;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,

                        0x87,0xff,0xef};



void SendStr(unsigned char *s);

/*------------------------------------------------

                    串口初始化

------------------------------------------------*/

void InitUART  (void)

{


    SCON  = 0x50;                                    // SCON: 模式 1, 8-bit UART, 使能接收 

    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝

    TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz 

    TR1   = 1;                  // TR1:  timer 1 打開                        

    EA    = 1;                  //打開總中斷

    //ES    = 1;                  //打開串口中斷

}        

void delay(uint count)      //delay

{

  uint i;

  while(count)

  {

    i=200;

    while(i>0)

    i--;

    count--;

  }

}

void DelayUs2x(unsigned char t)

{  

while(--t);

}

/*------------------------------------------------

mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值

unsigned char 是定義無符號字符變量,其值的范圍是

0~255 這里使用晶振12M,精確延時請使用匯編

------------------------------------------------*/

void DelayMs(unsigned char t)

{


while(t--)

{

     //大致延時1mS

     DelayUs2x(245);

              DelayUs2x(245);

}

}

///////功能:串口初始化,波特率9600,方式1///////

void Init_Com(void)

{

     TMOD = 0x20;

     PCON = 0x00;

     SCON = 0x50;

     TH1 = 0xFd;

     TL1 = 0xFd;

     TR1 = 1;

}


void dsreset(void)       //send reset and initialization command

{

  uint i;

  DS=0;

  i=103;

  while(i>0)i--;

  DS=1;

  i=4;

  while(i>0)i--;

}


bit tmpreadbit(void)       //read a bit

{

   uint i;

   bit dat;

   DS=0;i++;          //i++ for delay

   DS=1;i++;i++;

   dat=DS;

   i=8;while(i>0)i--;

   return (dat);

}


uchar tmpread(void)   //read a byte date

{

  uchar i,j,dat;

  dat=0;

  for(i=1;i<=8;i++)

  {

    j=tmpreadbit();

    dat=(j<<7)|(dat>>1);   //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在DAT里

  }

  return(dat);

}


void tmpwritebyte(uchar dat)   //write a byte to ds18b20

{

  uint i;

  uchar j;

  bit testb;

  for(j=1;j<=8;j++)

  {

    testb=dat&0x01;

    dat=dat>>1;

    if(testb)     //write 1

    {

      DS=0;

      i++;i++;

      DS=1;

      i=8;while(i>0)i--;

    }

    else

    {

      DS=0;       //write 0

      i=8;while(i>0)i--;

      DS=1;

      i++;i++;

    }


  }

}


void tmpchange(void)  //DS18B20 begin change

{

  dsreset();

  delay(1);

  tmpwritebyte(0xcc);  // address all drivers on bus

  tmpwritebyte(0x44);  //  initiates a single temperature conversion

}


uint tmp()               //get the temperature

{

  float tt;

  uchar a,b;

  dsreset();

  delay(1);

  tmpwritebyte(0xcc);

  tmpwritebyte(0xbe);

  a=tmpread();

  b=tmpread();

  temp=b;

  temp<<=8;             //two byte  compose a int variable

  temp=temp|a;

  tt=temp*0.0625;

  temp=tt*10+0.5;

  return temp;

}


void readrom()          //read the serial

{

  uchar sn1,sn2;

  dsreset();

  delay(1);

  tmpwritebyte(0x33);

  sn1=tmpread();

  sn2=tmpread();

}



void delay10ms()            //delay

  {

    uchar a,b;

    for(a=10;a>0;a--)

      for(b=60;b>0;b--);

   }


void display(uint temp,uint hstemp)                                          //顯示程序

{


   if(s2==0)                           

   {


   ser=temp/10;

   SBUF=ser;

   A1=temp/100;

   A2t=temp%100;

   A2=A2t/10;

   A3=A2t%10;

   dula=0;

   P0=table[A1];                            //顯示百位

   dula=1;

   dula=0;


   wela=0;

   P0=0x7e;

   wela=1;

   wela=0;

[1] [2]
關(guān)鍵字:編程  單片機  ds18b20  溫度測量  顯示系統(tǒng) 引用地址:編程實現(xiàn)單片機ds18b20溫度測量及顯示系統(tǒng)

上一篇:基于狀態(tài)機的51單片機獨立按鍵檢測與消抖思路
下一篇:16x16音樂頻譜(源代碼 原理圖)

推薦閱讀

一位酷派內(nèi)部人士在接受《證券日報》記者采訪時表示:“目前樂視方面的人已經(jīng)全部退出酷派,酷派暫不會放棄手機業(yè)務(wù),而在接下來一段時間里酷派將著重發(fā)力海外市場。”雖然酷派方面表態(tài)不會放棄手機業(yè)務(wù),但剛剛進駐的新東家醉翁之意或許不在“手機”,而在其地產(chǎn)資源。有接近酷派人士透露,新東家的進入,主要是看中酷派在全國擁有的價值百億元的土地資源...
與來自美國、加拿大、巴西與西班牙的企業(yè)領(lǐng)導(dǎo)者相比,中國內(nèi)地與中國香港地區(qū)的企業(yè)領(lǐng)導(dǎo)者更加愿意公開討論合規(guī)問題。然而,對許多中國內(nèi)地與中國香港地區(qū)的企業(yè)來說,履行各司法管轄區(qū)的合規(guī)義務(wù)依然是一項挑戰(zhàn),46%的中國跨國公司已意識到監(jiān)管機構(gòu)尚未發(fā)現(xiàn)的合規(guī)問題。盡管全球平均水平顯示僅有1/5的企業(yè)以綜合方式管理合規(guī),但中國內(nèi)地與中國香港地區(qū)的...
在前兩篇文章中我們介紹了IO口模擬串口發(fā)送數(shù)據(jù)和接收數(shù)據(jù),前兩種方法都是使用定時器來進行發(fā)送和接收,沒有用到中斷,優(yōu)點是邏輯簡單,但是缺點很明顯,只能進行單個字節(jié)的發(fā)送和接收,而且不能同時工作。因此在實際工程中沒有什么作用,僅供學(xué)習(xí)使用。使用中斷方式我們可以發(fā)送和接收多個字節(jié)的數(shù)據(jù)。1、使用中斷方式進行IO口模擬串口發(fā)送和接收數(shù)據(jù)的...
在往期的文章中,小編對伺服電機、力矩電機、變頻電機均有所介紹。但是,你知道電機依據(jù)功能還有其它類型嗎?為增進大家對電機的認識程度,本文將對微控電機以及滿盤電機予以介紹。如果你對電機抑或本文即將介紹的兩種電機具有興趣,不妨繼續(xù)往下閱讀哦。一、微控電機微控電機是具有特定功能的小功率旋轉(zhuǎn)電機。控制電機在控制系統(tǒng)中作為執(zhí)行元件、檢測元件...

史海拾趣

小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved