資源簡介
有關51單片機測量溫度的例程,本文適用于51單片機初學者

代碼片段和文件信息
/**************************************************************************************
* ??????????????DS18B20溫度傳感器實驗 ??*
實現現象:下載程序后,在溫度傳感器接口處,按照絲印方向插好溫度傳感器,數碼管就會顯示
檢測的溫度值,
注意事項: ??
***************************************************************************************/
#include?“reg52.h“ ?//此文件中定義了單片機的一些特殊功能寄存器
#include“temp.h“
typedef?unsigned?int?u16; ??//對數據類型進行聲明定義
typedef?unsigned?char?u8;
sbit?LSA=P2^2;
sbit?LSB=P2^3;
sbit?LSC=P2^4;
char?num=0;
u8?DisplayData[8];
u8?code?smgduan[10]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};
/*******************************************************************************
*?函?數?名?????????:?delay
*?函數功能 ???:?延時函數,i=1時,大約延時10us
*******************************************************************************/
void?delay(u16?i)
{
while(i--);
}
/*******************************************************************************
*?函?數?名?????????:?datapros()
*?函數功能 ???:?溫度讀取處理轉換函數
*?輸????入?????????:?temp
*?輸????出?????????:?無
*******************************************************************************/
void?datapros(int?temp)? ?
{
??? float?tp;??
if(temp0) //當溫度值為負數
?? {
DisplayData[0]?=?0x40;? ??//???-
//因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
//后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
//算加上0.5,還是在小數點后面。
?
?? }
? else
?? {
DisplayData[0]?=?0x00;
tp=temp;//因為數據處理有小數點所以將溫度賦給一個浮點型變量
//如果溫度是正的那么,那么正數的原碼就是補碼它本身
temp=tp*0.0625*100+0.5;
//留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
//后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
//算加上0.5,還是在小數點后面。
}
DisplayData[1]?=?smgduan[temp?/?10000];
DisplayData[2]?=?smgduan[temp?%?10000?/?1000];
DisplayData[3]?=?smgduan[temp?%?1000?/?100]?|?0x80;
DisplayData[4]?=?smgduan[temp?%?100?/?10];
DisplayData[5]?=?smgduan[temp?%?10];
}
/*******************************************************************************
*?函數名?????????:DigDisplay()
*?函數功能 ?:數碼管顯示函數
*?輸入???????????:?無
*?輸出????????? ?:?無
*******************************************************************************/
void?DigDisplay()
{
u8?i;
for(i=0;i<6;i++)
{
switch(i) ?//位選,選擇點亮的數碼管,
{
case(0):
LSA=0;LSB=0;LSC=0;?break;//顯示第0位
case(1):
LSA=1;LSB=0;LSC=0;?break;//顯示第1位
case(2):
LSA=0;LSB=1;LSC=0;?break;//顯示第2位
case(3):
LSA=1;LSB=1;LSC=0;?break;//顯示第3位
case(4):
LSA=0;LSB=0;LSC=1;?break;//顯示第4位
case(5):
LSA=1;LSB=0;LSC=1;?break;//顯示第5位
}
P0=DisplayData[5-i];//發送數據
delay(100);?//間隔一段時間掃描
P0=0x00;//消隱
}
}
/*******************************************************************************
*?函?數?名???????:?main
*?函數功能 ?:?主函數
*?輸????入???????:?無
*?輸????出???? ?:?無
*******************************************************************************/
void?main()
{
while(1
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-04-18?22:41??實驗17:DS18B20溫度傳感器\
?????文件????????3555??2018-11-27?20:03??實驗17:DS18B20溫度傳感器\main.c
?????文件????????4005??2018-11-27?20:03??實驗17:DS18B20溫度傳感器\temp.c
?????文件?????????452??2018-11-27?20:03??實驗17:DS18B20溫度傳感器\temp.h
?????文件???????10256??2018-11-27?20:03??實驗17:DS18B20溫度傳感器\template
?????文件????????4765??2018-11-27?20:03??實驗17:DS18B20溫度傳感器\template.hex
?????文件???????71767??2019-04-18?22:41??實驗17:DS18B20溫度傳感器\template.uvgui.dell
?????文件????????5384??2019-02-12?18:03??實驗17:DS18B20溫度傳感器\template.uvopt
?????文件???????14006??2019-02-12?18:03??實驗17:DS18B20溫度傳感器\template.uvproj
評論
共有 條評論