一、系統(tǒng)方案 主程序中main函數(shù)主要是引腳的初始化,給單片機(jī)引腳初始化,初始化LCD1602,初始化紅外對(duì)管,通過對(duì)LCD1602賦值,采集進(jìn)入教室的人數(shù),顯示在LCD1602上面進(jìn)出人數(shù)我們采用按鍵的形式,檢測(cè)完畢后按下確認(rèn)鍵確認(rèn)是否在我們需要的人數(shù)范圍內(nèi),當(dāng)少于我們需要的人數(shù)時(shí),蜂鳴器會(huì)報(bào)警三秒,反之,則會(huì)LED亮三秒。
二、硬件設(shè)計(jì) 原理圖如下:
三、單片機(jī)軟件設(shè)計(jì) 1、首先是系統(tǒng)初始化 /**** *******1602初始化函數(shù) *****/ void lcd_init() { lcd_write_com(0x38); lcd_write_com(0x0c); lcd_write_com(0x06); lcd_write_com(0x01);
} 2、液晶顯示程序 /**** *******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) //檢測(cè)按鍵K1(正轉(zhuǎn))是否按下 { delayms(10); //消除抖動(dòng) if(K1==0) { ZZ(0x01); count++; buf_3[0]=count/10+'0'; buf_3[1]=count%10+'0'; lcd_write_str(0x80+0x40+8,buf_3); } while(!K1); //檢測(cè)按鍵是否松開
} if(K2==0) //檢測(cè)按鍵K2(反轉(zhuǎn))是否按下 { delayms(10); //消除抖動(dòng) if(K2==0) { ZZ_1(0x01); count--; buf_3[0]=count/10+'0'; buf_3[1]=count%10+'0'; lcd_write_str(0x80+0x40+8,buf_3); } while(!K2); //檢測(cè)按鍵是否松開
} if(K3==0) //檢測(cè)按鍵K2(反轉(zhuǎn))是否按下 { delayms(10); //消除抖動(dòng) if(K3==0) { if(count >= 80) 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; }
} } 4、核心算法程序 /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函數(shù)功能:主函數(shù) ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void main(void) { uint i; count = 70; 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,"70"); while(1) { keyscan(); } } 四、 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ì)的作品。
|