一、系統(tǒng)方案
隨著科學(xué)技術(shù)的不斷發(fā)展帶動(dòng)著電子行業(yè)的地位越來(lái)越重,現(xiàn)在電子產(chǎn)品幾乎在社會(huì)的各個(gè)領(lǐng)域都可以見(jiàn)到。這些技術(shù)的發(fā)展有效的帶動(dòng)著社會(huì)生產(chǎn)力的發(fā)展和信息化的提高,同時(shí)電子產(chǎn)品也越來(lái)越智能。
本設(shè)計(jì)采用AT89C51單片機(jī)為主控芯片,采用數(shù)字型防水溫度傳感器DS18B20制作溫度檢測(cè)報(bào)警器,通過(guò)四位數(shù)碼管顯示溫度值,系統(tǒng)設(shè)立幾個(gè)按鍵,可以通過(guò)按鍵進(jìn)行設(shè)置溫度的上、下限值,當(dāng)所采集溫度超過(guò)設(shè)定值時(shí),系統(tǒng)會(huì)控制蜂鳴器和對(duì)應(yīng)LED發(fā)出聲光報(bào)警。這個(gè)設(shè)計(jì)簡(jiǎn)單、成本低、具有實(shí)用性。
二、硬件設(shè)計(jì)
原理圖如下:
三、單片機(jī)軟件設(shè)計(jì)
1、首先是串口初始化:
void Uart_init()
{
TMOD=0x20;//定時(shí)器0工作方式1
EA=1;//開(kāi)總中斷
TH1=0xfd;
TL1=0xfd;
TR1=1;
ET1=0;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
2、中斷服務(wù)程序
void Usart() interrupt 4
{
receiveData=SBUF;//出去接收到的數(shù)據(jù)
RI = 0;//清除接收中斷標(biāo)志位
ES=0;
SBUF=receiveData;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
ES=1;
}
3、按鍵檢測(cè)程序
/*****外部中斷0服務(wù)程序*****/
void int0(void) interrupt 0
{
EX0=0; //關(guān)外部中斷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服務(wù)程序*****/
void int1(void) interrupt 2
{
EX1=0; //關(guān)外部中斷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); //跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0x44); //啟動(dòng)溫度轉(zhuǎn)換
Init_DS18B20();
WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
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仿真設(shè)計(jì)
Proteus軟件是一款應(yīng)用比較廣泛的工具,它可以在沒(méi)有硬件平臺(tái)的基礎(chǔ)上通過(guò)自身的軟件仿真出硬件平臺(tái)的運(yùn)行情況,這樣就可以通過(guò)軟件仿真來(lái)驗(yàn)證我們?cè)O(shè)計(jì)的方案有沒(méi)有問(wèn)題,如果有問(wèn)題,可以重新選擇器件,連接器件,直到達(dá)到我們?cè)O(shè)定的目的,避免我們搭建實(shí)物的時(shí)候,如果當(dāng)初選擇的方案有問(wèn)題,我們器件都已經(jīng)焊接好了,再去卸載下去,再去焊接新的方案的器件,測(cè)試,這樣會(huì)浪費(fèi)人力和物力,也給開(kāi)發(fā)者帶來(lái)一定困惑,Proteus仿真軟件就很好的解決這個(gè)問(wèn)題,我們?cè)谠O(shè)計(jì)之初,就使用該軟件進(jìn)行模擬仿真,測(cè)試,選擇滿(mǎn)足我們?cè)O(shè)計(jì)的最優(yōu)方案。最后根據(jù)測(cè)試沒(méi)問(wèn)題的仿真圖紙,焊接實(shí)物,調(diào)試,最終完成本設(shè)計(jì)的作品。
.
審核編輯 黃宇
-
單片機(jī)
+關(guān)注
關(guān)注
6023文章
44376瀏覽量
628342 -
藍(lán)牙
+關(guān)注
關(guān)注
114文章
5683瀏覽量
168076 -
報(bào)警系統(tǒng)
+關(guān)注
關(guān)注
5文章
644瀏覽量
74977
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論