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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3174|回復: 3
收起左側

51單片機 IAP15W4K58S4 DS18B20檢測溫度 C語言

[復制鏈接]
ID:520103 發表于 2019-4-24 23:35 | 顯示全部樓層 |閱讀模式
/**************************************************************************************
程序名稱:DS18B20檢測溫度
程序功能:下載程序后,8位七段數碼管前四位顯示當前溫度,后四位顯示濕度(濕度未完成暫時顯示為H00.0)
溫度超過80,或小于10攝氏度,蜂鳴器響

使用平臺:STC15W/IAP15W
硬件連線:JP10>>J12, JP11>>J16, P3.6>>J8,
DS18B20:DQ>>P3.1, Vcc>>3.3V, GND
時間:2019/4/24 23:20
作者:璃落彼岸
***************************************************************************************/
#include "STC15.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit FMQ=P4^2;
sbit DQ = P3^1;
bit ReadTempFlag;
u8 code SEG_Code[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//num 0~9
0x7f,0xc6,0x89};//symble “.”,“C”,"H"
//0x88,0x83,,0xa1,0x86,0x8e,0xff
u8 code Bit_Code[]=
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//bit 0~7
/************************************
get Temp and HR from sensors
*************************************/
u8 Temp_HR[8]={0,0,0,11,12,0,0,0};//00.0C H00.0
/**************************************
Declare global function
******************************************/
void Pin_Mode(void);
void SEG7_1Bit_Display(u8 num,u8 Position);
void Beep(void);
void Delay_nms(u16 nms);
void delayms(u16 xms);
void delay_xus(u8 n);
u8 Init(void);
u8 readByte();
void writeByte(u8 dat);
float getTmpValue(void);
void transform(long v);

void main(void)
{
u8 i=0;
// u8 j;
Pin_Mode();
Init();//Initialize DS18B20

        while(1)
        {
   transform(getTmpValue()); //get and transfer temp_value
  for(j=0;j<200;j++)//穩定顯示,約1s刷機一次
  {
   SEG7_1Bit_Display(Temp_HR[i++],8-i);
     Delay_nms(2);
     i=i%8;
  }
  if(Temp_HR[0]>8)//溫度大于80
   {
   Beep();Delay_nms(3);
   }
   else if(Temp_HR[0]<1)//溫度小于10
   {
   Beep();Delay_nms(3);
   }
  }
}
/**************************************
Initialize Pin
******************************************/
void Pin_Mode(void)
{
P0M1 = 0x00;P0M0 = 0x00;
P2M1 = 0x00;P2M0 = 0x00;
P3M1 = 0x00;P3M0 = 0x00;
P4M1 = 0x00;P4M0 = 0x00;
}
void SEG7_1Bit_Display(u8 num,u8 Position)
{
P2=0xff;
P0=~SEG_Code[num];
P2=Bit_Code[Position];
if(Position==6||Position==1)//在8位數碼管第2、7位添加小數點
{
  P0=P0+0x80;
}
}
void Beep(void)
{
u8 i;
for(i=0;i<10;i++)
{
  delay_xus(500);
  FMQ=~FMQ;
}
FMQ=1;
}
/*****s_delay*****/
void Delay_nms(u16 nms) //65535nms
{
u16 i,t;
for(i=0;i<nms;i++)
{
  for(t=0;t<1080;t++);
  }
}
/*****ms_delay***
void delayms(u16 xms)
{
u16 i,j;
for(i=xms;i>0;i--)
  for(j=110;j>0;j--);
}
*/
/*****us_delay****/
void delay_xus(u8 n)
{
while(n--)
{
  _nop_();
  _nop_();
}
}
/**************************************
get Temp from DS18B20
Time_delay is serious!
******************************************/
/*****DS18B20初始化函數*****/
u8 Init(void)
{
u16 CONT_1 = 0;
u8 Flag_1 = 1;
u8 Status = 0x00;
    DQ = 1;
DQ = 0;
delay_xus(495);//495us
DQ = 1;
while((DQ != 0)&&(Flag_1 == 1)) //wait for the response of ds18B20,avoid overtime
    {                                       
        CONT_1++;
delay_xus(10); //60us
        if(CONT_1 > 8000)Flag_1 = 0;
        Status = DQ;
    }
  delay_xus(100);  //240us
    DQ = 1;
    return Status;      //initial
}
/*****讀一個字節數據函數*****/
u8 readByte()
{
u16 i;
u8 Value = 0x00;
DQ = 1;
delay_xus(10);
for(i=1;i<=8;i++)
{
  Value >>= 1;
  DQ = 0;
  delay_xus(1);
  DQ = 1;
  delay_xus(1);
  if(DQ == 1)
   Value |= 0x80;
  delay_xus(60);
}
return Value;
}
/*****寫一個字節數據函數*****/
void writeByte(u8 dat)
{
u16 j;
for(j=1;j<=8;j++)
{
  if((dat & 0x01))      
  {
   DQ = 0;
   delay_xus(1);
   DQ = 1;
   delay_xus(60);
  }  
  else     
  {
   DQ = 0;
   delay_xus(60);
   DQ = 1;
   delay_xus(1);
  }
  dat>>=1;
}
}
/*****得到溫度值函數*****/
float getTmpValue(void)
{
u8 low,high;
u16 temp;
float fValue;
Init();
writeByte(0xcc);
writeByte(0x44);
Init();
writeByte(0xcc);
writeByte(0xbe);
low = readByte();
high = readByte();
if(high&0xFC)
{
  ReadTempFlag = 1;
  temp = ((high<<8)|low);
  temp = ~temp + 1;
}
else
{
  ReadTempFlag = 0;
  temp = ((high<<8)|low);
}
fValue = temp*0.0625;
temp = fValue*10+0.5; //>0 +0.5;<0 -0.5
fValue = temp+0.05;
return fValue;         
}
/*****溫度轉換函數*****/
void transform(long v)
{
v = v%1000;
Temp_HR[0] = v/100;  //ten
v = v%100;
Temp_HR[1] = v/10;  //個位
v = v%10;
Temp_HR[2] = v/1;    //小數位

}

實驗現象

實驗現象

評分

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

查看全部評分

回復

使用道具 舉報

ID:521034 發表于 2019-4-25 08:23 | 顯示全部樓層

謝謝樓主
回復

使用道具 舉報

ID:284488 發表于 2019-4-25 08:59 | 顯示全部樓層
DS18B20不是溫度傳感器,可作濕度嗎?程序內容跟作DHT11溫濕度傳感器蠻相似的,學習了,感謝樓主分享!
回復

使用道具 舉報

ID:982170 發表于 2021-12-7 16:57 | 顯示全部樓層
lon7085 發表于 2019-4-25 08:59
DS18B20不是溫度傳感器,可作濕度嗎?程序內容跟作DHT11溫濕度傳感器蠻相似的,學習了,感謝樓主分享!

樓主,求dht11的程序。我改了好久都顯示不出來
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成a| 国产人成精品一区二区三 | 中文字幕日韩欧美一区二区三区 | cao视频| 久草免费在线视频 | 国产精品日本一区二区不卡视频 | 免费黄色大片 | 亚洲国产成人久久综合一区,久久久国产99 | 亚洲视频在线观看 | 不卡欧美 | 97视频精品 | 亚洲一区在线观看视频 | 精产国产伦理一二三区 | 国产亚洲精品精品国产亚洲综合 | 三级视频国产 | 国产日韩欧美精品一区二区 | 国内精品久久精品 | 国产精品国产精品国产专区不片 | 亚洲一区二区在线电影 | 成人精品鲁一区一区二区 | 精品国产乱码久久久久久影片 | 成人av播放 | 草草视频在线观看 | 久久免费观看视频 | 久久伊人精品一区二区三区 | 成人精品鲁一区一区二区 | 一区二区三区在线免费 | 欧美视频免费在线 | 成人网av| 91在线网| 欧美精品久久久久 | 成人精品视频在线 | 中文字幕视频在线看5 | 男人天堂网址 | 欧美日韩视频 | 欧美综合国产精品久久丁香 | 99久久精品免费看国产四区 | 亚洲最新网址 | 伊人性伊人情综合网 | 亚洲一在线 | 成年人精品视频在线观看 |