【001】基于51单片机的DS18B20温度检测与报警装置的proteus仿真设计
生活随笔
收集整理的這篇文章主要介紹了
【001】基于51单片机的DS18B20温度检测与报警装置的proteus仿真设计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、設計資料內容(私信獲取)
1. 包含proteus仿真一份;
2. keil源代碼一份;
3. 包含基于51單片機的DS18B20溫度監測與報警的proteus仿真設計課程報告一份;
4. 包含基于51單片機的DS18B20溫度監測與報警的proteus仿真設計視頻講解一份;
二、設計要求
?本系統使用51系列單片機設計了一款基于DS18B20的溫度監測與報警裝置,系統采用4位數碼管顯示采集的溫度數據、低溫閾值以及高溫閾值,并包含了低溫和高溫的聲光報警裝置,報警的低溫與高溫的閾值可以通過按鍵進行調節。溫度范圍可根據傳感器輸出在0-99攝氏度調節。
三、資料截圖
?
?
四、視頻講解
私信獲取全部內容?
部分源代碼
#include <reg51.h> // #define uint unsigned int #define uchar unsigned char //宏定義 sbit SET = P3^1; //定義調整鍵 sbit DEC = P3^2; //定義減少鍵 sbit ADD = P3^3; //定義增加鍵 sbit BEEP = P3^6; //定義蜂鳴器 sbit ALAM = P1^2; //定義燈光報警 sbit key1=P1^7; //光柵 sbit led1=P1^6; sbit DQ = P3^7; //定義DS18B20總線I/O bit shanshuo_st; //閃爍間隔標志 bit beep_st; //蜂鳴器間隔標志 bit flag1,flag2; unsigned int count=0,cos=0; sbit DIAN = P0^5; //小數點 uchar x=0; //計數器 signed char m; //溫度值全局變量 uchar n; //溫度值全局變量 uchar set_st=0; //狀態標志 signed char shangxian=30; //上限報警溫度 signed char xiaxian=10; //下限報警溫度 //uchar code LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; uchar code LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};//延時子程序 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); //精確延時,大于480usDQ = 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;unsigned char b=0;unsigned 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位轉移到tt<<=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 ); } //初始化定時器0 void InitTimer(void) {TMOD=0x1;TH0=0x3c;TL0=0xb0; //50ms(晶振12M) }//讀取溫度 void check_wendu(void) {uint a,b,c;c=ReadTemperature(); //獲取溫度值a=c/100; //計算得到十位數字b=c/10-a*10; //計算得到個位數字m=c/10; //計算得到整數位n=c-a*100-b*10; //計算得到小數位if(m<0){m=0;n=0;} //設置溫度顯示上限if(m>99){m=99;n=9;} //設置溫度顯示上限 } //數碼管初始化 void Disp_init(void) {P0 = ~0x80; //顯示----P2 = 0x7F;Delay(200);P2 = 0xDF;Delay(200); P2 = 0xF7;Delay(200);P2 = 0xFD;Delay(200);P2 = 0xFF; //關閉顯示 }總結
以上是生活随笔為你收集整理的【001】基于51单片机的DS18B20温度检测与报警装置的proteus仿真设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android安卓仿 win桌面 开源,
- 下一篇: MacBook Pro 时间机器备份(完