下面是51單片機數碼管顯示溫度測量設計源程序,測量范圍-9.9℃~99.9℃,當溫度高于定值時,蜂鳴器發出滴、滴、滴報警志響,同時發光二極管閃光。溫度低于-9.9℃時,顯示 “L L .L C” ,溫度高于99.9℃時,顯示 “H H.H C”。
下載:
單片機數碼管顯示溫度測量報警程序.zip
(2.05 MB, 下載次數: 389)
2017-7-13 20:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
如下列圖所示:
溫度低于-10度.jpg (312.31 KB, 下載次數: 170)
下載附件
2017-7-13 20:51 上傳
溫度為零下時的情況.jpg (308.57 KB, 下載次數: 117)
下載附件
2017-7-13 20:51 上傳
溫度大于0度時的情況.jpg (310.22 KB, 下載次數: 99)
下載附件
2017-7-13 20:51 上傳
溫度大于設置值時的情況.jpg (312.48 KB, 下載次數: 113)
下載附件
2017-7-13 20:51 上傳
實物試驗.jpg (321.53 KB, 下載次數: 120)
下載附件
2017-7-13 20:51 上傳
源程序:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char //宏定義
sbit DQ=P3^7; //定義DS18B20 的 I/O
sbit DIAN = P0^7; //顯示小數點用
sbit LED=P1^7;
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit BEEP=P3^6;
uchar x=0; //計數器
signed char m; //溫度值全局變量
uchar n,zf,l; //溫度值全局變量
uint z;
int c;
uint gaowen=28; //高溫報警溫度,默認值為35
uint diwen=0; //低溫報警溫度,默認值0
uchar code LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar Data[]={0,0,0};
/*****延時子程序*****/
void Delay_DS18B20(int num)
{
while(num--) ;
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ復位
Delay_DS18B20(8); //稍做延時
DQ = 0; //單片機將DQ拉低
Delay_DS18B20(80); //精確延時,大于480us
DQ = 1; //拉高總線
Delay_DS18B20(14);
x = DQ; //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗
Delay_DS18B20(20);
}
/*****讀一個字節*****/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; //給脈沖信號
dat>>=1;
DQ = 1; //給脈沖信號
if(DQ)
dat|=0x80;
Delay_DS18B20(4);
}
return(dat);
}
/*****寫一個字節*****/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay_DS18B20(5);
DQ = 1;
dat>>=1;
}
}
/*****讀取溫度*****/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
int b=0;
int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0x44); //啟動溫度轉換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器
a=ReadOneChar(); //讀低8位
b=ReadOneChar(); //讀高8位
t=b; //高8位轉移到t
t<<=8; //t數據左移8位
t=t|a; //將t和a按位或,得到一個16位的數
tt=t*0.0625; //將t乘以0.0625得到實際溫度值
//(溫度傳感器設置12位精度,最小分辨率是0.0625)
t= tt*10+0.5; //放大10倍(將小數點后一位顯示出來)輸出并四舍五入
return(t); //返回溫度值
}
/*****延時子程序*****/
void Delay(uint num)
{
while( --num );
}
/*****讀取溫度*****/
void check_wendu(void)
{
int a,b;
c=ReadTemperature(); //獲取溫度值
if(c<0) //溫度正負值判斷處理
{
c=-(c-1);
zf=1;
}
else
{
zf=0;
}
a=c/100; //計算得到十位數字
b=c/10-a*10; //計算得到個位數字
m=c/10; //計算得到整數位
if(m<=0) //如果溫度小于0,限制顯示為0
{
m=0;
}
n=c-a*100-b*10; //計算得到小數位
Data[0]=LEDData[n]; //顯示小數位
Data[1]=LEDData[m%10]; //顯示個位
............................................................................................
需要完整源程序的請自己下載
|