一、系統方案 隨著科學技術的不斷發展帶動著電子行業的地位越來越重,現在電子產品幾乎在社會的各個領域都可以見到。這些技術的發展有效的帶動著社會生產力的發展和信息化的提高,同時電子產品也越來越智能。 本設計采用AT89C51單片機為主控芯片,采用數字型防水溫度傳感器DS18B20制作溫度檢測報警器,通過四位數碼管顯示溫度值,系統設立幾個按鍵,可以通過按鍵進行設置溫度的上、下限值,當所采集溫度超過設定值時,系統會控制蜂鳴器和對應LED發出聲光報警。這個設計簡單、成本低、具有實用性。
1.png (6.89 KB, 下載次數: 33)
下載附件
2023-7-21 17:52 上傳
二、硬件設計 原理圖如下:
2.png (18.07 KB, 下載次數: 34)
下載附件
2023-7-21 17:52 上傳
三、單片機軟件設計 1、首先是串口初始化: void Uart_init() {
TMOD=0x20;//定時器0工作方式1
EA=1;//開總中斷
TH1=0xfd; TL1=0xfd; TR1=1; ET1=0; SM0=0; SM1=1; REN=1; EA=1; ES=1; }
2、中斷服務程序 void Usart() interrupt 4 { receiveData=SBUF;//出去接收到的數據 RI = 0;//清除接收中斷標志位 ES=0; SBUF=receiveData;//將接收到的數據放入到發送寄存器 while(!TI); //等待發送數據完成 TI=0; //清除發送完成標志位 ES=1; } 3、按鍵檢測程序 /*****外部中斷0服務程序*****/ void int0(void) interrupt 0 { EX0=0; //關外部中斷0 if(DEC==0&&set_st==1) { BEEP=0; Delay(2000); BEEP=1; do { Disp_alarm(shangxian); } while(DEC==0); if(H_ZF==0&&L_ZF==0) { shangxian--; if(shangxian<=xiaxian+1) shangxian=xiaxian+1; } else if(H_ZF==0&&L_ZF==1) { shangxian--; if(shangxian<0&&xiaxian==1) { shangxian=0; H_ZF=0; } else if(shangxian<0&&xiaxian>1) { shangxian=1; H_ZF=1; } } else if(H_ZF==1) { shangxian++; if(shangxian>=xiaxian-1) shangxian=xiaxian-1; } } else if(DEC==0&&set_st==2) { BEEP=0; Delay(2000); BEEP=1; do { Disp_alarm(xiaxian); } while(DEC==0); if(L_ZF==0) { xiaxian--; if(xiaxian<0) { xiaxian=1; L_ZF=1; } } else if(L_ZF==1) { xiaxian++; if(xiaxian>=55) { xiaxian=55; } } } } /*****外部中斷1服務程序*****/ void int1(void) interrupt 2 { EX1=0; //關外部中斷1 if(ADD==0&&set_st==1) { BEEP=0; Delay(2000); BEEP=1; do { Disp_alarm(shangxian); } while(ADD==0); if(H_ZF==0) { shangxian++; if(shangxian>=125)shangxian=125; } else if(H_ZF==1) { shangxian--; if(shangxian<=0) { shangxian=0; H_ZF=0; } } } else if(ADD==0&&set_st==2) { BEEP=0; Delay(2000); BEEP=1; do { Disp_alarm(xiaxian); } while(ADD==0); if(L_ZF==0) { xiaxian++; if(xiaxian>=shangxian-1) xiaxian=shangxian-1; } else if(H_ZF==0&&L_ZF==1) { xiaxian--; if(xiaxian<=0) { if(shangxian==0) { xiaxian=1; L_ZF=1; } else { xiaxian=0; L_ZF=0; } } } else if(H_ZF==1&&L_ZF==1) { xiaxian--; if(xiaxian<=shangxian+1) xiaxian=shangxian+1; } } } 4、核心算法程序 /*****讀取溫度*****/ 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; t<<=8; t=t|a; if(t&0xf800) { t=~t+1; fuhao=1; } else fuhao=0; tt=t*0.0625; t= tt*10+0.5; //放大10倍輸出并四舍五入 return(t); } 四、proteus仿真設計 Proteus軟件是一款應用比較廣泛的工具,它可以在沒有硬件平臺的基礎上通過自身的軟件仿真出硬件平臺的運行情況,這樣就可以通過軟件仿真來驗證我們設計的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達到我們設定的目的,避免我們搭建實物的時候,如果當初選擇的方案有問題,我們器件都已經焊接好了,再去卸載下去,再去焊接新的方案的器件,測試,這樣會浪費人力和物力,也給開發者帶來一定困惑,Proteus仿真軟件就很好的解決這個問題,我們在設計之初,就使用該軟件進行模擬仿真,測試,選擇滿足我們設計的最優方案。最后根據測試沒問題的仿真圖紙,焊接實物,調試,最終完成本設計的作品。
3.png (76.95 KB, 下載次數: 36)
下載附件
2023-7-21 17:52 上傳
|