久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
ds18b20溫度報警器單片機源代碼
[打印本頁]
作者:
xiaojingheze
時間:
2017-4-12 10:55
標題:
ds18b20溫度報警器單片機源代碼
ds18b20 溫度液晶顯示
0.png
(48.38 KB, 下載次數(shù): 84)
下載附件
2017-4-12 15:54 上傳
單片機源代碼:
//------------------------------------------------------
//用數(shù)碼管與DS18B20設(shè)計溫度報警器
//------------------------------------------------------
//本例將報警溫度設(shè)為高:40度 低:-3度,當(dāng)DS18B20感知到溫度達到此臨界值時
//系統(tǒng)發(fā)出報警聲
#include <REG52.H>
#include <intrins.h>
#include "delay.h"
#include "DS18B20.h"
uchar display_digit[4]={0,0,0,0}; //待顯示的各溫度數(shù)位
uchar LCD_display[16]=" "; //LCD顯示的溫度值
uchar LCD_alarm_display[16]="H: L: "; //顯示報警溫度
bit HI_Alarm=0,LO_Alarm=0; //高低溫報警標志
bit DS18B20_IS_OK; //傳感器正常標志
//溫度小數(shù)位對照表
uchar code df_table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
//報警溫度上下限,為進行正負數(shù)比較,此處注意設(shè)為char類型
//取值范圍為-128~+127,DS18B20支持范圍為-50~+125
char Alarm_temp_HL[4]={30,-3,0,0};//報警溫度預(yù)設(shè)及存儲
uchar currentT=0; //當(dāng)前讀取的溫度整數(shù)部分
uchar temp_value[]={0x00,0x00}; //從DS18B20讀取的溫度值
//初始化DS18B20
uchar init_DS18B20()
{
uchar status;
DQ=1; delay(8);
DQ=0; delay(90);
DQ=1; delay(8);
status=DQ;
delay(100);
DQ=1;
return status; //初始化成功時返回0
}
//讀一字節(jié)
uchar readonebyte()
{
uchar i,dat=0;
DQ=1; _nop_();
for(i=0;i<8;i++)
{
DQ=0;dat>>=1;
DQ=1;_nop_();_nop_();//拉高,延時進行采樣 單總線是進行與的
if(DQ) dat|=0x80; //如果DQ是1,把1存到dat里
delay(30);DQ=1;
}
return dat;
}
//寫一字節(jié)
void writeonebyte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;DQ=dat&0x01; //先取最低位,先讀的也是最低位
delay(5);DQ=1;dat>>=1;
}
}
//讀取溫度值
void read_temp()
{
if(init_DS18B20()==1) //DS18B20故障
DS18B20_IS_OK=0;
else
{
writeonebyte(0xcc); //跳過序列號
writeonebyte(0x44); //啟動溫度轉(zhuǎn)換
init_DS18B20();
writeonebyte(0xcc); //跳過序列號
writeonebyte(0xbe); //讀取溫度寄存器
temp_value[0]=readonebyte(); // 溫度低8位
temp_value[1]=readonebyte(); // 溫度高8位
Alarm_temp_HL[2]=readonebyte(); //報警溫度TH
Alarm_temp_HL[3]=readonebyte(); //報警溫度TL
DS18B20_IS_OK=1;
}
}
//設(shè)置DS18B20溫度報警值
void set_Alarm_temp()
{
init_DS18B20();
writeonebyte(0xcc); //跳過序列號
writeonebyte(0x4e); //將設(shè)定的溫度報警值寫入DS18B20
writeonebyte(Alarm_temp_HL[0]); //寫TH
writeonebyte(Alarm_temp_HL[1]); //寫TL
writeonebyte(0x7f); //12位精度
init_DS18B20();
writeonebyte(0xcc); //跳過序列號
writeonebyte(0x48); //溫度報警值存入DS18B20
}
//在液晶上顯示溫度處理
void chuli_temp()
{
//------------------顯示溫度處理-------------------------
uchar ng=0; //負數(shù)標識
uchar t=150; //延時值
char signed_current_temp; //注意類型為char
//如果為負數(shù)則取反加1,并設(shè)置負號標識及負號顯示位置
if((temp_value[1]&0xf8)==0xf8)
{
temp_value[1]=~temp_value[1];
temp_value[0]=~temp_value[0]+1;
if(temp_value[0]==0x00) temp_value[1]++;
ng=1;
}
//查表得到溫度小數(shù)部分
display_digit[0]=df_table[temp_value[0]&0x0f];
//獲取溫度整數(shù)部分(無符號)
currentT=((temp_value[0]&0xf0)>>4)|((temp_value[1]&0x07)<<4);
//有符號的當(dāng)前溫度值,注意定義為char,其值可為-128~+127
signed_current_temp=ng?-currentT:currentT;
//高低溫報警標志設(shè)置(與定義為char類型的Alarm_temp_HL比較,這樣可區(qū)分正負比較)
HI_Alarm=signed_current_temp>=Alarm_temp_HL[2]? 1 : 0;
LO_Alarm=signed_current_temp<=Alarm_temp_HL[3]? 1 : 0;
//將整數(shù)部分分解為三位待顯示數(shù)字
display_digit[3]=currentT/100;
display_digit[2]=currentT%100/10;
display_digit[1]=currentT%10;
//LCD顯示數(shù)據(jù)
LCD_display[2]=display_digit[3]+'0'; //bai
LCD_display[3]=display_digit[2]+'0'; //shi
LCD_display[4]=display_digit[1]+'0'; //ge
LCD_display[5]='.';
LCD_display[6]=display_digit[0]+'0'; //xiaoshu
LCD_display[7]=0xdf; //。
LCD_display[8]=0x43; // C
if(display_digit[3]==0)
{
LCD_display[2]=' '; //高位為0則不顯示
if(display_digit[2]==0)
{
LCD_display[3]=' ';
}
}
//負號顯示在恰當(dāng)位置
if(ng)
{
if(LCD_display[3]==' ')
LCD_display[3]='-';
else if(LCD_display[2]==' ')
LCD_display[2]='-';
else LCD_display[1]='-';
}
//------------------------------------------------------
}
void chuli_alarm_temp()
{
//---------------------報警溫度處理---------------------
uchar ng;
//由于Alarm_temp_HL類型為char 故可以直接進行正負比較
//高溫報警值
ng=0;
if(Alarm_temp_HL[2]<0)
{
Alarm_temp_HL[2]=~Alarm_temp_HL[2]+1;
ng=1;
}
//分解高溫各數(shù)位到待顯示數(shù)組中
LCD_alarm_display[3]=Alarm_temp_HL[2]/100+'0';
LCD_alarm_display[4]=Alarm_temp_HL[2]%100/10+'0';
LCD_alarm_display[5]=Alarm_temp_HL[2]%10+'0';
//屏蔽高位不為0的
if(LCD_alarm_display[3]=='0') LCD_alarm_display[3]=' ';
if(LCD_alarm_display[3]==' ' && LCD_alarm_display[4]=='0')
LCD_alarm_display[4]=' ';
//'-' 顯示
if(ng)
{
if(LCD_alarm_display[4]==' ') LCD_alarm_display[4]='-';
else
if(LCD_alarm_display[3]==' ') LCD_alarm_display[3]='-';
else LCD_alarm_display[2]='-';
}
//低溫報警值
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
完整代碼下載:
ds18b20液晶顯示.zip
(63.44 KB, 下載次數(shù): 177)
2017-4-12 10:54 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
dicdoctor
時間:
2018-5-10 20:19
好帖,頂一個
作者:
user2402168
時間:
2018-6-27 15:29
好帖,頂一個
作者:
a358828564
時間:
2019-9-9 11:46
謝謝,找這個來參考一下
作者:
jnshuhe
時間:
2019-9-9 12:39
非常感謝!
作者:
火言life
時間:
2019-9-10 11:25
很好很強大
作者:
cjjsohu
時間:
2019-9-10 11:37
非常感謝
作者:
zbxiaowu
時間:
2019-9-28 09:28
感謝分享
作者:
ycycy
時間:
2020-4-26 13:38
絕世好帖,謝謝,解決了我很多疑惑的地方
作者:
拉風(fēng)……
時間:
2020-6-22 17:50
絕世好貼!點贊+1
作者:
旁觀者
時間:
2021-3-16 15:26
謝謝,找這個來參考一下
作者:
usaboy
時間:
2021-3-17 04:44
great job, thank you so much.
作者:
meili-rose
時間:
2023-4-8 22:20
需要源代碼下載學(xué)習(xí)!
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩欧美黄色
|
成人午夜精品
|
亚洲欧洲在线视频
|
国产成人精品一区二区三区在线
|
91国产视频在线
|
久久久久亚洲精品
|
久久99精品久久久久久
|
国产精品美女久久久久久免费
|
久久久91精品国产一区二区精品
|
国产成人a亚洲精品
|
在线看亚洲
|
亚洲一级黄色
|
黄色在线观看网址
|
视频在线一区二区
|
国产精品久久久久无码av
|
成人在线视频网站
|
久久99精品国产自在现线小黄鸭
|
最新日韩精品
|
成人在线观看免费
|
国产伦精品一区二区三区高清
|
91精品无人区卡一卡二卡三
|
操操网站
|
国产成人福利在线
|
第四色播日韩第一页
|
九色av
|
精品一级毛片
|
亚洲免费一区二区
|
成人免费在线
|
国产一二区视频
|
亚洲精品福利视频
|
国产免费福利小视频
|
日韩在线一区二区三区
|
欧美日韩一区二区三区在线观看
|
国内精品久久久久
|
日韩影院在线观看
|
久草资源
|
丁香婷婷成人
|
成人天堂噜噜噜
|
成年人黄色一级毛片
|
日本高清视频在线播放
|
成人毛片在线观看
|