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

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51單片機(jī)多路DS18B20溫度測(cè)量程序

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年08月16日   【字體:


仿真圖:

仿真文件和完整源碼的下載地址:http://www.zg4o1577.cn/bbs/dpj-20600-1.html
源代碼:
#include<reg51.h>
#include<intrins.h>
#include <string.h>
#include <stdio.h>
#define uchar unsigned char
#define uint  unsigned int

sbit RS=  P2^0  ;       //液晶顯示引腳定義
sbit RW=  P2^1  ;
sbit EN=  P2^2  ;
uint  t=0,dian=0;
uchar LCD_LINE_ONE[16]={"tp1:           "};  //定義顯示屏幕
uchar LCD_LINE_TWO[16]={"tp2:           "};
//uchar LCD_LINE_THR[16]={"                "};

int Tm;
int  fushu=0 ;
sbit DQ= P3^3;            
static unsigned char get_serial[]={    //獲取的八個(gè)DS18B20內(nèi)部RAM64位序列號(hào)
   224, 0,0,0,  184,  197, 50, 40,
   215, 0,0,0,  184,  197, 51, 40
  //  82, 0,0,0,  184,  197, 52, 40
 // 101, 0,0,0,  184,  197,  53,40,
  //60, 0,0,0,  184,  197,  54,40,
   //11, 0,0,0,  184,  197,  55,40,
    //47, 0,0,0,  184,  197,  56,40,
  //185, 0,0,0,  184,  197,  49,40,
 };
void delay( ms )       //用于液晶顯示的延時(shí)函數(shù)
{
   int i ;
   while(ms--)
   {
        for(i=0 ;i<5 ;i++ )  ;

   }
}

uchar Read_LCD_State()      //讀取液晶顯示的狀態(tài)
{
  uchar state;
 RS=0;RW=1;EN=1;delay(1);
 state=P0;
 EN = 0;delay(1);
 return state;
}
void LCD_Busy_Wait()     //如果忙則等待函數(shù)
{
  while((Read_LCD_State()&0x80)==0x80);
 delay(5);
}

void Write_LCD_Zhilin(uchar zl)     //液晶顯示寫(xiě)指令函數(shù)
{
 LCD_Busy_Wait();
 RS=0;RW=0;
 EN=0;
 P0=zl;
 EN=1;
 delay(1);
 EN=0; 
}
void Write_LCD_shuju(uchar date)      //液晶顯示寫(xiě)數(shù)據(jù)函數(shù)
{
  LCD_Busy_Wait();
 RS=1;RW=0;
 EN=0;
 P0=date;
 EN=1;
 delay(1);
 EN=0; 
}
 void LCD_INIT()    //液晶顯示初始化
{
    Write_LCD_Zhilin(0x38);   // 顯示模式設(shè)置
 delay(1);     
 Write_LCD_Zhilin(0x01);   // 顯示清屏
 delay(1);    
 Write_LCD_Zhilin(0x06);   // 光標(biāo)移動(dòng)設(shè)置
 delay(1);
 Write_LCD_Zhilin(0x0c);   // 開(kāi)及光標(biāo)設(shè)置
 delay(1);
}
 void Display_LCD_String(uchar p,uchar *s)    //液晶顯示寫(xiě)入函數(shù)
{
  uchar i;
 Write_LCD_Zhilin(p|0x80) ;    //寫(xiě)地址高位為一
 //Write_LCD_Zhilin(0x40|0x80) ;
 for(i=0;i<16;i++)
 {
  Write_LCD_shuju(s[i]);
  delay(1);  
 }
}
/***************************************************************************************/
void delays(int us)        //用于DS18B20的延時(shí)函數(shù)
{ int s;
for ( s=0; s<us; s++);
}
void rst(void)      //DS18B20初始化
{
DQ = 1;
delays(2);
DQ = 0;
delays(30); //精確延時(shí) 480~960us
DQ = 1;
delays(8);
}
void write(unsigned char ku)  //DS18B20寫(xiě)函數(shù)
{
int i=0;
     for (i=0;i<8;i++)
    {
  DQ=0;
  DQ =ku&0x01;
  delays(3);
  DQ=1;
  ku>>=1;
    }
}
void match_rom(unsigned char *rom)   //DS18B20匹配ROM函數(shù)
{
 unsigned char i;
 rst();         //初始化
 write(0x55);       //匹配ROM
 for(i=8;i>0;i--)
 {
          write(*(rom+i-1));
 }

}
unsigned int read(void)     //DS18B20讀函數(shù),每次讀16位
{
 int i=0;
 unsigned int u=0;
    for (i=0;i<16;i++)
    {
  DQ=0;
  u>>=1;
  DQ=1;
  if(DQ) u|=0x8000;
  delays(4);
     }
    return (u);
}
int  read0(unsigned char *seria) //讀取對(duì)應(yīng)溫度值并轉(zhuǎn)換函數(shù)
{
     int temperature ;
    unsigned int tp;
    unsigned int lsb;
    rst();      //初始化
    write(0xCC);    //跳過(guò)RAM
 write(0x44);    //溫度轉(zhuǎn)換
 rst();      //再次初始化
 write(0xCC);
 match_rom(seria);    //匹配ROM函數(shù)調(diào)用
   write(0xBE);  //讀取存儲(chǔ)器指令
 tp=read();    //讀取溫度值
 if((tp&0xf800)==0xf800)  //判斷正負(fù)數(shù)
     {
       fushu=1 ;
        tp=~tp+1 ;
      lsb=(unsigned int)(tp*6.25);
   dian=lsb%100;    //取小數(shù)部分
  
       temperature=lsb/100;

  }
     else
     {
      fushu=0;
      lsb=(unsigned int)(tp*6.25);
   dian=lsb%100; 
  
       temperature=lsb/100;

      }
     return(temperature);
}
/*****************************************************************************************/
void main()
{
      uint i ;
   LCD_INIT();
   EA=0 ;   //使用DS18B20禁止任何中斷
   while(1)
  {  
       for(i=0;i<2;i++)
    { 
        Tm=read0(get_serial+i*8);
    if(i==0)       //判斷是第幾個(gè)的數(shù)據(jù)
    {
        if(fushu==0)        //判斷是否加負(fù)號(hào)
             sprintf(LCD_LINE_ONE+5," %d", Tm);
        if(fushu==1)
          sprintf(LCD_LINE_ONE+5,"-%d", Tm);
           sprintf(LCD_LINE_ONE+10,".%d",dian);  //加入小數(shù)部分
        Display_LCD_String(0x00,LCD_LINE_ONE);
     }
    if(i==1)
    { 
           if(fushu==0) 
              sprintf(LCD_LINE_TWO+5," %d", Tm);
        if(fushu==1)
           sprintf(LCD_LINE_TWO+5,"-%d", Tm);
           sprintf(LCD_LINE_TWO+10,".%d",dian);
        Display_LCD_String(0x40,LCD_LINE_TWO);
    }

    }

  
  }
}

 

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 国产毛片久久久久久久久春天 | 精品videossex高潮汇编 | 日韩α片 | 日韩免费视频一区二区 | 波多野结衣一二三区 | 亚洲视频国产 | 夜夜夜操 | 欧美 日韩 视频 | 99免费视频| 国产日韩欧美一区 | 亚洲国产成人精品久久久国产成人一区 | 激情三区 | 成人福利 | 亚洲一区二区黄 | 久久四虎| 国产精品 亚洲一区 | 91中文字幕在线 | 青青草一区 | 久久久久久久97 | 淫片专区 | 免费看国产一级特黄aaaa大片 | 91免费看片 | 久久精品男人的天堂 | 中文字幕一区在线观看视频 | 亚洲日韩欧美一区二区在线 | 超碰在线网站 | 九九热在线免费观看 | 91在线第一页 | 欧一区| 99re热精品视频 | 精品国产伦一区二区三区观看方式 | 香蕉视频在线播放 | 欧美激情久久久 | 亚洲一区中文字幕在线观看 | 久久久久国产一区二区三区 | 亚洲精品高清视频在线观看 | 日韩欧美三级电影在线观看 | 久久久久久国产精品久久 | 综合一区 | aaa天堂| 亚洲欧美日本在线 |