實現功能: 設計基于51系列的單片機的智能火災報警系統,其主要模塊為煙霧傳感器、溫度傳感器、蜂鳴報警器以及2個16×16的點陣、6個按鍵。單片機一方面對運行的煙霧傳感器和溫度傳感器檢測環境傳過來的信號處理,并且通過點陣進行實時顯示,(點陣個數就按你說的用2個,這個顯示形式有靜止、移入移出,這個顯示形式能過通過按鍵進行選擇,所以這里需要1個按鍵來進行顯示形式的切換);單片機另一方面能夠通過與預設的煙 霧和溫度閾值進行比較并判斷是否要報警(報警就用蜂鳴器),通過加、減按鍵可設置報警的閾值,設置有緊急報警按鍵以應對突發情況(這里需要2對加減按鍵,1對用來對煙霧進行加減報警設置,另1對用力對溫度進行加減報警設置,外加1個緊急報警按鍵,所以整個系統是6個按鍵)。
電路圖
部分代碼
void delay(uchar us); //delay
float gettemp(void);
void delay(uchar us) //delay time
{while(us--) _nop_();
}
/*串口初始化*/
void serial_init ( unsigned char bt ) {
SCON = 0x50; /* mode 1: 8-bit UART, enable receiver */
TMOD = 0x21; /* timer 1 mode 2: 8-Bit reload */
switch(bt){
case 0: //38400
TH1=0xfd;
PCON=0x80;
break;
case 1: //19200
TH1=0xfd;
PCON=0;
break;
case 2: //9600
TH1=0xfa;
PCON=0;
break;
case 3: //4800
TH1=0xf4;
PCON=0;
break;
case 4: //2400
TH1=0xe8;
PCON = 0;
break;
case 5: //1200
TH1=208;
PCON = 0;
break;
case 6: //600
TH1=160;
PCON = 0;
break;
case 7: //300
TH1=64;
PCON = 0;
break;
default:
TH1=0xfa;
PCON=0;
break;
}
TR1 = 1; /* timer 1 run */
// ES = 1;
// EA=1;
}
void putbyte(char c)
{
SBUF=c;
while (!TI) _nop_();
TI=0;
}
void putint(unsigned int ui)
{unsigned char ls;
ls=(ui/10000+0x30);
putbyte(ls);
ls=((ui%10000)/1000+0x30);
putbyte(ls);
ls=((ui%1000)/100+0x30);
putbyte(ls);
ls=((ui%100)/10+0x30);
putbyte(ls);
ls=(ui%10+0x30);
putbyte(ls);
}
/*************************************/
/*發送一個字節的hex碼,分成兩個字節發。*/
unsigned char code hex_[]={"0123456789ABCDEF"};
puthex(unsigned char c)
{int ch;
ch=(c>>4)&0x0f;
putbyte(hex_[ch]);
ch=c&0x0f;
putbyte(hex_[ch]);
}
|