標題: 51單片機數碼管顯示溫度測量資料程序 [打印本頁]
作者: 51mcu 時間: 2017-7-13 20:59
標題: 51單片機數碼管顯示溫度測量資料程序
下面是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]; //顯示個位
............................................................................................
需要完整源程序的請自己下載
作者: mnbvcxzlkjhgfds 時間: 2017-10-21 19:12
感謝完美程序
作者: asusyt 時間: 2017-10-22 14:47
感謝樓主的分享
作者: lygweifeng 時間: 2018-2-26 10:54
感謝作者
作者: qjzyx 時間: 2018-2-26 12:00
收藏,謝謝分享
作者: kkfy888 時間: 2018-3-14 18:00
謝謝樓主,收藏一份了
作者: 情誼森林 時間: 2018-3-29 11:26
感謝分享
作者: 627532822lin 時間: 2018-7-11 09:26
謝謝樓主,感謝感謝
作者: 1304078500 時間: 2018-12-27 23:42
樓主我想要完整程序,
作者: 1304078500 時間: 2018-12-27 23:51
情誼森林 發表于 2018-3-29 11:26
感謝分享
有程序嗎
作者: unsigned_char_ 時間: 2018-12-30 19:32
謝謝樓主,想請問您的位選頻率大概是多少?我用您這個圖和程序顯示不出來溫度值,只有初始的----和關閉顯示。數碼管八位顯示的高低電平是變化的,但是位選信號改變頻率極低,且幾乎一直保持高電平,所以沒有顯示……
作者: lsj123 時間: 2019-1-17 16:41
好帖子 就是沒黑幣不能下完整的
作者: 怎么滴 時間: 2019-1-17 20:00
感謝分享加油
作者: GRD 時間: 2019-3-17 22:35
同志我和你問題一樣 ,如果你解決了的話 ,麻煩也給我解下惑 不勝感激
作者: 丶Atlantis 時間: 2019-5-10 10:16
感謝作者的分享
作者: isg111 時間: 2019-5-29 09:11
感謝作者
作者: 316004322 時間: 2019-6-9 21:28
感謝作者
作者: choudary 時間: 2019-11-5 09:52
感謝作者
作者: z0913 時間: 2019-11-19 16:10
剛需 謝謝樓主分享
作者: 撼地神牛雨 時間: 2020-6-3 23:02
學習學習,不錯的代碼
作者: 小小徐白 時間: 2020-6-10 10:48
有protues仿真文件嗎,搭出一樣的圖,但功能顯示不了
作者: lirit 時間: 2020-6-26 17:33
謝謝分享
作者: paran 時間: 2020-6-29 19:09
這是液晶吧,還數碼管坑人
作者: 陳潤源home 時間: 2020-6-29 20:31
感謝樓主,數碼管太坑了,準備用液晶,看到你的又準備用數碼管了
作者: 475749848 時間: 2020-7-1 16:01
unsigned_char_ 發表于 2018-12-30 19:32
謝謝樓主,想請問您的位選頻率大概是多少?我用您這個圖和程序顯示不出來溫度值,只有初始的----和關閉顯示 ...
我跟你一樣 不能顯示
作者: 475749848 時間: 2020-7-1 16:02
unsigned_char_ 發表于 2018-12-30 19:32
謝謝樓主,想請問您的位選頻率大概是多少?我用您這個圖和程序顯示不出來溫度值,只有初始的----和關閉顯示 ...
跟你一樣不行 不能顯示
作者: yang02 時間: 2020-7-3 19:04
數碼管不顯示是為什么啊
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
黄色大片免费观看
|
91在线看片|
亚洲一区二区在线
|
日韩欧美在线观看
|
成人一区二区电影
|
亚洲成人免费视频
|
狠狠艹|
日本在线看片
|
99热热99
|
国产成人综合在线
|
www.日本在线|
玖玖视频
|
国产 日韩 欧美 在线
|
a爱视频
|
操操网站
|
国产精品178页
|
欧美一区二区三区精品免费
|
亚洲一区日韩
|
一区二区三区四区视频
|
久久久久久久91
|
欧美一区二区三区精品
|
亚洲一二三区精品
|
国产精品亚洲一区
|
国产不卡一区
|
狠狠干av
|
操操日|
最新午夜综合福利视频
|
午夜精品一区二区三区在线观看
|
欧美午夜视频
|
精品久久久久香蕉网
|
婷婷免费在线
|
久久黄色|
久久99精品久久久水蜜桃
|
中文字幕综合
|
欧美日韩国产一区二区三区不卡
|
国产精品99久
|
亚洲精品一区二区在线观看
|
国产极品粉嫩美女呻吟在线看人
|
成人国产精品一级毛片视频毛片
|
欧美色图另类
|
黄色av大片
|