一、系統(tǒng)方案 1、本設(shè)計(jì)采用51單片機(jī)作為主控器。 2、紅外傳感器檢測(cè)進(jìn)出人數(shù),液晶1602顯示。 3、按鍵最多容納人數(shù),煙霧報(bào)警。
1.png (6.05 KB, 下載次數(shù): 46)
下載附件
2023-11-14 20:45 上傳
二、硬件設(shè)計(jì) 原理圖如下:
2.png (43.41 KB, 下載次數(shù): 44)
下載附件
2023-11-14 20:45 上傳
三、單片機(jī)軟件設(shè)計(jì) 1、首先是系統(tǒng)初始化 void lcd_init() { lcd_write_com(0x38); lcd_write_com(0x0c); lcd_write_com(0x06); lcd_write_com(0x01);
} 2、液晶顯示程序 void check_busy() { P0=0xff; do { rs=0; wr=1; en=0; en=1; } while(busy==1); en=0; } /**** *******1602寫數(shù)據(jù)忙函數(shù) *****/ void lcd_write_date(uchar date) { check_busy(); en=0; LCD_PORT=date; rs=1; wr=0; en=1; en=0; } /**** *******1602寫命令函數(shù) *****/ void lcd_write_com(uchar com) { check_busy(); en=0; LCD_PORT=com; rs=0; wr=0; en=1; en=0; } /**** *******1602寫溫度函數(shù) *****/ void lcd_wendu(uchar add,uchar date) { uchar shi,ge; shi=date/10; ge=date%10; lcd_write_com(add); lcd_write_date(shi+'0'); lcd_write_date(ge+'0'); } 3、按鍵程序 void keyscan() {
if(K1==0) { delayms(10); //消除抖動(dòng) if(flag1==0) { flag1=1; count++; if(count>=100) count=99; buf_3[0]=count/10+'0'; buf_3[1]=count%10+'0'; lcd_write_str(0x80+0x40+8,buf_3);
} } else flag1=0;
if(K2==0) //檢測(cè)按鍵K2(反轉(zhuǎn))是否按下 { delayms(10); //消除抖動(dòng) if(flag2==0) { flag2=1; if(count>=1) count--; buf_3[0]=count/10+'0'; buf_3[1]=count%10+'0'; lcd_write_str(0x80+0x40+8,buf_3);
}
} else flag2=0; if(K3==0) //檢測(cè)按鍵K2(反轉(zhuǎn))是否按下 { delayms(10); //消除抖動(dòng) if(K3==0) { if(count >= set) LED = 0; else { BUZ = 0; delayms(500); BUZ = 1; delayms(500); BUZ = 0; delayms(500); BUZ = 1; delayms(500); } } while(!K3) //檢測(cè)按鍵是否松開 { delayms(3000); BUZ = 1; LED = 1; }
} if(s1==0) //檢測(cè)按鍵K2(反轉(zhuǎn))是否按下 { delayms(10); //消除抖動(dòng) if(s1==0) { set++; if(set>=100) set=99; buf_3[0]=set/10+'0'; buf_3[1]=set%10+'0'; lcd_write_str(0x80+8,buf_3); } while(!s1) //檢測(cè)按鍵是否松開 {
}
} if(s2==0) //檢測(cè)按鍵K2(反轉(zhuǎn))是否按下 { delayms(10); //消除抖動(dòng) if(s2==0) { if(set>=1) set--; buf_3[0]=set/10+'0'; buf_3[1]=set%10+'0'; lcd_write_str(0x80+8,buf_3); } while(!s2) //檢測(cè)按鍵是否松開 {
}
} }
4、核心算法程序 /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函數(shù)功能:主函數(shù) ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void main(void) { uint i; count = 0; TMOD = 0x01; //T0 16位工作方式 IR_1=1; //發(fā)射端口常態(tài)為高電平
lcd_init(); lcd_write_str(0x80,buf_1); lcd_write_str(0x80+0x40,buf_2); lcd_write_str(0x80+0x40+8,"00"); while(1) { keyscan(); if(yw==0) BUZ=0; else BUZ=1; } }
四、 proteus仿真設(shè)計(jì) Proteus軟件是一款應(yīng)用比較廣泛的工具,它可以在沒有硬件平臺(tái)的基礎(chǔ)上通過自身的軟件仿真出硬件平臺(tái)的運(yùn)行情況,這樣就可以通過軟件仿真來驗(yàn)證我們?cè)O(shè)計(jì)的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達(dá)到我們?cè)O(shè)定的目的,避免我們搭建實(shí)物的時(shí)候,如果當(dāng)初選擇的方案有問題,我們器件都已經(jīng)焊接好了,再去卸載下去,再去焊接新的方案的器件,測(cè)試,這樣會(huì)浪費(fèi)人力和物力,也給開發(fā)者帶來一定困惑,Proteus仿真軟件就很好的解決這個(gè)問題,我們?cè)谠O(shè)計(jì)之初,就使用該軟件進(jìn)行模擬仿真,測(cè)試,選擇滿足我們?cè)O(shè)計(jì)的最優(yōu)方案。最后根據(jù)測(cè)試沒問題的仿真圖紙,焊接實(shí)物,調(diào)試,最終完成本設(shè)計(jì)的作品。
|