本設計以AT89C51單片機為核心,設計了一個溫度測量報警系統,可以方便的實現溫度采集和顯示。它使用起來相當方便,具有精度高、量程寬、靈敏度高、體積小、功耗低等優點,適合于我們日常生活和工農業中的溫度測量及報警。本設計由AT89C51單片機、DS18B20溫度傳感器和LED顯示器組成,可以直觀的顯示測量的溫度。本設計運行過程中,如果外界溫度低于-20℃或高于70℃,系統將出發蜂鳴器,產生報警聲音,且對應的LED同步閃爍。 部分程序 #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int
sbit DQ = P3^6; sbit BEEP = P3^7; sbit HI_LED = P1^4; sbit LO_LED = P1^5;
//共陰數碼管段碼及空白顯示 uchar code DSY_CODE[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00 }; //溫度小數位對照表 uchar code df_Table = {0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9 }; //------------------------------------------------------------------- //報警溫度上下限,為進行正負數比較,此處設為char類型 //取值范圍為-128~+127,DS18B20支持范圍為-50~+125 //-------------------------------------------------------------------
char Alarm_Temp_HL[2] = {70,-20}; uchar CurrentT = 0; //當前讀取的溫度整數部分 uchar Temp_Value[] = {0x00,0x00}; //從DS18B20讀取的溫度值 uchar Display_Digit[] = {0,0,0,0}; //待顯示的各溫度數位 bit HI_Alarm = 0,LO_Alarm = 0; //高低溫報警標志 bit DS18B20_IS_OK = 1; //傳感器正常標志 uint Time0_Count = 0; //定時器延時累加 //------------------------------------------------------------------- //延時 //------------------------------------------------------------------- void Delay(uint x) { while( --x ); } //------------------------------------------------------------------- //初始化DS18B20 //------------------------------------------------------------------- uchar Init_DS18B20() { uchar status; DQ =1;Delay(8); DQ =0;Delay(90); DQ =1;Delay(8); status = DQ; Delay(100); DQ = 1; returnstatus; }
|