欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機DS18B20溫度上下限報警源代碼和Proteus仿真原理圖
[打印本頁]
作者:
51黑電子happy
時間:
2017-4-5 04:04
標題:
單片機DS18B20溫度上下限報警源代碼和Proteus仿真原理圖
51單片機DS18B20溫度上下限報警的仿真原理圖,用74ls245驅動數碼管顯示(proteus仿真工程文件可到本帖附件下載):
0.png
(30.26 KB, 下載次數: 77)
下載附件
2017-4-5 04:00 上傳
51單片機DS18B20溫度上下限報警源代碼:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DIO=P1^7;
uchar data dis_buf[6]; //顯示緩沖區
uchar code table[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //顯示的代碼表
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00};
void dl_1ms( ) //延時1ms
{ data unsigned int d;
for(d=0;d<120;d++);
}
void display( ) //顯示函數
{ data uchar bitcode, i;
bitcode=0xfe;
for(i=0;i<6;i++)
{ P2=table[dis_buf[i]];
P3=bitcode;
dl_1ms( );
P3=0xff;
bitcode=bitcode<<1;
bitcode=bitcode|0x01;
}
}
void delay_5us(uchar y) //(2.17*y+5)微妙延時
{ while(--y);
}
void delay() //延時1000ms
{ uchar i;
for(i=0;i<140;i++)
{ display();
}
}
void OneWireWByte(uchar x) //向總線寫一個字節x
{ uchar i;
for(i=0;i<8;i++)
{ DIO=0; //拉低總線
_nop_(); //要求大于1微妙,但不超過15微妙
_nop_();
if(0x01&x)
{ DIO=1; //如果最低位為1,則將總線拉高
}
delay_5us(30); //延時60--120微妙
DIO=1; //釋放總線
_nop_(); //要求大于1微妙
x=x>>1; //移位,準備發送下一位
}
}
uchar OneWireRByte(void) //從一總線上讀一個字節,返回讀到的內容
{ uchar i,j;
j=0;
for(i=0;i<8;i++)
{ j=j>>1;
DIO=0; //拉低總線
_nop_(); //要求大于1微妙,但不超過15微妙
_nop_();
DIO=1; //釋放總線
_nop_();
_nop_();
if(DIO==1) //如果搞電平
{ j=j|0X80;
}
delay_5us(30); //延時60--120微妙
DIO=1; //釋放總線
_nop_(); //要求大于1微妙
}
return j;
}
void DS18B20_int(void) //初始化DS18B20
{ DIO=0;
delay_5us(255); // 延時480--960微妙
DIO=1; //釋放總線
delay_5us(30); //延時60--120微妙
if(DIO==0)
{ delay_5us(200); //要求釋放總線后480微妙內結束復位
DIO=1; //釋放總線
OneWireWByte(0xcc); //發送Skip ROM命令
OneWireWByte(0x4e); //發送寫暫存RAM命令
OneWireWByte(0x00); //溫度報警上限設為0
OneWireWByte(0x00); //溫度報警下限設為0
OneWireWByte(0x7f); //將DS18B20設為12位,精度為0.25
DIO=0;
delay_5us(255); // 延時480--960微妙
DIO=1; //釋放總線
delay_5us(240); //要求釋放總線后480微妙內結束復位
DIO=1; //釋放總線
}
}
uint DS18B20_readtemp() //讀DS18B20的溫度值
{ uint temp;
uchar DS18B20_temp[2]; //溫度數據
DIO=0;
delay_5us(255); // 延時480--960微妙
DIO=1; //釋放總線
delay_5us(30); //延時60--120微妙
if(DIO==0)
{ delay_5us(200); //要求釋放總線后480微妙內結束復位
DIO=1;
OneWireWByte(0xcc); //發送Skip ROM命令
OneWireWByte(0x44); //發送溫度轉換命令
DIO=1;
delay( ); //延時1000ms
DIO=0;
delay_5us(255); // 延時480--960微妙
DIO=1;
delay_5us(30); //延時60--120微妙
if(DIO==0)
{ delay_5us(200); //要求釋放總線后480微妙內結束復位
DIO=1;
OneWireWByte(0xcc); //發送Skip ROM命令
OneWireWByte(0xbe); //發送讀暫存RAM命令
DS18B20_temp[0]=OneWireRByte(); //讀溫度的低字節
DS18B20_temp[1]=OneWireRByte(); //讀溫度的高字節
temp=256*DS18B20_temp[1]+DS18B20_temp[0];
temp=temp/16;
DIO=0;
delay_5us(255); //// 延時480--960微妙
DIO=1;
delay_5us(240); //要求釋放總線后480微妙內結束復位
DIO=1;
}
return temp;
}
}
void main( ) //主函數
{ uint temp;
DS18B20_int();
dis_buf[0]=16; dis_buf[1]=16;
dis_buf[2]=0; dis_buf[3]=0;
dis_buf[4]=0; dis_buf[5]=0;
display( );
while(1)
{ temp=DS18B20_readtemp();
dis_buf[2]=temp/1000;
dis_buf[3]=(temp%1000)/100;
復制代碼
0.png
(61.23 KB, 下載次數: 70)
下載附件
2017-4-5 03:59 上傳
該系列源碼包含有很多非常經典,代碼風格十分規范,而且注釋詳細的單片機例程,還帶仿真,對于MCU學習特別是初學者是很有幫助的,全部源碼下載(共幾十個項目):
http://m.raoushi.com/bbs/dpj-80575-1.html
本例程下載(含proteus仿真工程文件與源碼):
單片機DS18B20溫度上下限報警.rar
(54.79 KB, 下載次數: 63)
2017-4-5 04:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
風散炊煙
時間:
2017-4-10 13:08
程序無法仿真。
作者:
毛毛123love
時間:
2017-4-27 10:48
怎么下載?
作者:
tranhunga
時間:
2017-5-3 19:26
沒有黑色錢下載
作者:
jiaojunh
時間:
2021-5-2 11:49
程序沒有上下限報警功能
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1