色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>傳感器>

DS18B20測負(fù)溫度程序 - DS18b20如何讀取它的負(fù)溫度值呢?

2017年11月23日 15:24 網(wǎng)絡(luò)整理 作者: 用戶評論(0
關(guān)鍵字:DS18B20(80746)

  DS18B20測負(fù)溫度程序

  //main.c

  #include

  #include

  #include “18B20.h”

  #include“disp.h”

  #define uint unsigned int

  #define uchar unsigned char

  const uchar shu[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,

  0x82,0xF8,0x80,0x90};

  const uchar bshu[3]={0xff,0xf9,0xbf};

  //延時函數(shù)在4M時延時1ms

  void s_1ms(unsigned int ms)

  {

  unsigned int aa;

  for(;ms》=1;ms--)

  {

  for(aa=0;aa《=800;aa++)

  {;}

  }

  }

  void main()

  {

  uint wendu,xiao,ge,shi,bai;

  uchar fh;

  DDRA = 0xff;

  PORTA = 0xff;

  s_1ms(200); //延時200ms

  ds1820_reset(); //DS18B20復(fù)位

  while (1)

  {

  ds1820_start();

  wendu = ds1820_read_temp(); //讀取溫度數(shù)值

  fh=ds1820_fh();

  if(fh)

  {

  wendu=~(wendu)+1;

  wendu = (wendu * 10)/ 16; //數(shù)值處理

  wendu = wendu % 1000;

  shi= wendu / 100; //顯示第2位

  wendu = wendu % 100;

  ge= wendu / 10; //顯示ge位

  xiao=wendu % 10; // 顯示小數(shù)位

  display(0,shu[xiao]); //小數(shù)位

  display(1,shu[ge]&0x7f); //個位

  display(2,shu[shi]); //shi

  display(3,bshu[2]); //bai位,0不顯示

  }

  else

  {

  wendu = (wendu * 10) / 16; //數(shù)值處理

  bai = wendu / 1000; //bai位

  wendu = wendu % 1000;

  shi= wendu / 100; //顯示第2位

  wendu = wendu % 100;

  ge= wendu / 10; //顯示ge位

  xiao=wendu % 10; // 顯示小數(shù)位

  display(0,shu[xiao]); //小數(shù)位

  display(1,shu[ge]&0x7f); //個位

  display(2,shu[shi]); //shi

  display(3,bshu[bai]); //bai位,0不顯示

  }

  }

  }

  //18B20.h

  #define uchar unsigned char

  #define uint unsigned int

  //設(shè)置成輸入

  #define DQ_INPUT DDRC &= ~BIT(7)

  //設(shè)置成輸出

  #define DQ_OUT DDRC |= BIT(7)

  //設(shè)置成低電平

  #define DQ_LO PORTC &= ~BIT(7)

  //設(shè)置成高電平

  #define DQ_HI PORTC |= BIT(7)

  //讀出

  #define DQ_R PINC & BIT(7)

  //中斷標(biāo)志

  uchar init_f;

  //延時函數(shù)

  void delay_us(uint ms)

  {

  uchar tm;

  while(ms--)

  {

  for(tm=0;tm《2;tm++);

  }

  }

  //DS18B20復(fù)位

  void ds1820_reset(void)

  {

  uchar i;

  //中斷保護(hù)

  init_f = SREG;

  //關(guān)中斷

  CLI();

  DQ_OUT;

  DQ_LO;

  delay_us(80); //延時500us

  DQ_HI;

  DQ_INPUT;

  delay_us(10); //延時80us

  i = DQ_R;

  delay_us(80); //延時500us

  if (init_f & 0x80) //恢復(fù)中斷狀態(tài)

  {

  SEI();

  }

  }

  //DS18B20字節(jié)讀取

  uchar ds1820_read_byte(void)

  {

  uchar i;

  uchar value = 0;

  //中斷保護(hù)

  init_f = SREG;

  //關(guān)中斷

  CLI();

  for (i = 8; i != 0; i--) {

  value 》》= 1;

  DQ_OUT;

  DQ_LO;

  delay_us(2);

  DQ_HI;

  DQ_INPUT;

  if (DQ_R)

  {

  value|=0x80;

  }

  delay_us(10); //延時60us

  }

  if (init_f&&0x80) //恢復(fù)中斷狀態(tài)

  {

  SEI();

  }

  return(value);

  }

  //DS18B20字節(jié)寫入

  void ds1820_write_byte(unsigned char value)

  {

  uchar i;

  init_f = SREG;

  CLI();

  for (i = 8; i 》 0; i--)

  {

  DQ_OUT;

  DQ_LO;

  if (value & 0x01)

  {

  DQ_HI;

  }

  delay_us(10); //延時80us

  DQ_HI;

  value 》》= 1;

  }

  if (init_f & 0x80)//恢復(fù)中斷狀態(tài)

  {

  SEI();

  }

  }

  //啟動ds1820轉(zhuǎn)換

  void ds1820_start(void)

  {

  ds1820_reset();

  ds1820_write_byte(0xCC); //勿略ROM

  ds1820_write_byte(0x44); //啟動轉(zhuǎn)換

  }

  //讀溫度

  uint ds1820_read_temp(void)

  {

  uint i,wendu;

  uchar buf[2];

  ds1820_reset();

  ds1820_write_byte(0xCC); //勿略ROM

  ds1820_write_byte(0xBE); //讀溫度

  for (i = 0; i 《 2; i++)

  {

  buf[i] = ds1820_read_byte();

  }

  wendu = (buf[1]《《8)|buf[0];

  return wendu;

  }

  uint ds1820_fh(void) //讀正負(fù)溫度符號

  {

  uint i,bb;

  uchar buf[2];

  ds1820_reset();

  ds1820_write_byte(0xCC); //勿略ROM

  ds1820_write_byte(0xBE); //讀溫度

  for (i = 0; i 《 2; i++)

  {

  buf[i] = ds1820_read_byte();

  }

  bb=buf[1]&0xf0;

  return bb;

  }

  //disp.h

  #define uchar unsigned char

  #define uint unsigned int

  #define SHCP_0 PORTA&=~BIT(1)

  #define SHCP_1 PORTA|=BIT(1)

  #define DS_0 PORTA&=~BIT(3)

  #define DS_1 PORTA|=BIT(3)

  #define STCP_0 PORTA&=~BIT(2)

  #define STCP_1 PORTA|=BIT(2)

  void CKin()

  {

  SHCP_0;

  NOP();

  SHCP_1;

  }

  void Dataout() //并行輸出

  {

  STCP_0;

  NOP();

  STCP_1;

  }

  void Datein( uchar date ) //數(shù)據(jù)串行輸入

  {

  uchar i,mod;

  DDRA=0xff;

  for(i=0;i《8;i++)

  {

  mod=date&0x80;

  if(mod==0x80)

  {DS_1;}

  else

  {DS_0;}

  CKin();

  date《《=1;

  }

  Dataout(); //并行輸出

  }

  void weihao(uchar add)

  {

  DDRA=0xff;

  switch(add)

  {

  case 0:PORTA=0x1f;break;

  case 1:PORTA=0x1f|0x80;break;

  case 2:PORTA=0x1f|0x40;break;

  case 3:PORTA=0x1f|0xc0;break;

  case 4:PORTA=0x1f|0x20;break;

  case 5:PORTA=0x1f|0xA0;break;

  case 6:PORTA=0x1f|0x60;break;

  case 7:PORTA=0x1f|0xE0;break;

  default:break;

  }

  }

  void DELAY(uint tt)

  {

  uint mm;

  while(tt--)

  {

  for(mm=30;mm》0;mm--);

  }

  }

  void display(uchar wei,uchar data)

  {

  weihao(wei);

  Datein(data);

  DELAY(20);

  weihao(wei);

  Datein(0xff);

  }

非常好我支持^.^

(16) 94.1%

不好我反對

(1) 5.9%

( 發(fā)表人:李倩 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 国产亚洲精品久久久久久禁果TV | 国产精品亚洲专区在线播放| 99热最新网站| 中文字幕亚洲欧美在线视频| 伊人精品在线| 孕妇bbwbbwbbwbbw超清| 一个人高清在线观看日本免费| 亚洲不卡视频在线| 亚洲AV久久婷婷蜜臀无码不卡| 乌克兰14一18处交见血| 婷婷亚洲五月色综合久久| 熟女理发厅| 小SAO货边洗澡边CAO你动漫| 乌克兰少妇大胆大BBW| 我的美女房东未删减版免费观看| 甜性涩爱bt下载| 亚洲 制服 欧美 中文字幕| 性盈盈剧场| 亚洲无碼网站观看| 在线中文字幕网站| 879影视动漫h免费观看| 99久久国产综合精品国| 超碰caoporon最新视频| 国产成人高清精品免费5388密| 国产精品99re6热在线播放| 国产欧美另类久久久精品免费| 国产亚洲欧洲日韩在线观看| 交换邻居波多野结衣中文字幕 | 日韩插啊免费视频在线观看| 日产久久视频| 晓雪老师我要进你里面好爽| 亚洲成人精品| 中文在线观看免费网站| 99久久亚洲精品日本无码| 播色屋97超碰在人人| 国产精选视频在线观看| 久久国产视频网| 欧美亚洲日韩国产在线在线| 十九禁啊啪射视频在线观看| 亚洲国产欧美在线看片| 最近日本字幕免费高清|