標(biāo)題: 教室人數(shù)實時檢測系統(tǒng)-51單片機(jī)版程序 [打印本頁]

作者: syx99    時間: 2020-12-20 19:45
標(biāo)題: 教室人數(shù)實時檢測系統(tǒng)-51單片機(jī)版程序
4  軟件設(shè)計
本設(shè)計主要是對人員進(jìn)出檢測所做出一定報警以及提示的軟件設(shè)置,在應(yīng)對不同環(huán)境下實現(xiàn)不同的工作狀態(tài),以實現(xiàn)我們所需要的功能,主要是通過按鍵模擬人員的經(jīng)過,然后再用液晶顯示出來。
4.1 主程序設(shè)計
主程序軟件流程圖如下所示:主程序中main函數(shù)主要是引腳的初始化,給單片機(jī)引腳初始化,初始化LCD1602,初始化紅外對管,通過對LCD1602賦值,采集進(jìn)入教室的人數(shù),顯示在LCD1602上面進(jìn)出人數(shù)我們采用按鍵的形式,檢測完畢后按下確認(rèn)鍵確認(rèn)是否在我們需要的人數(shù)范圍內(nèi),當(dāng)少于我們需要的人數(shù)時,蜂鳴器會報警三秒,反之,則會LED亮三秒。

圖 4.1  主程序流程圖

4.2 按鍵程序設(shè)計
我們首先對單片機(jī)進(jìn)行初始化,按鍵初始化以及顯示初始化,給顯示賦初值。進(jìn)入按鍵判斷階段,當(dāng)檢測按下進(jìn)入鍵時人數(shù)加一,當(dāng)按下走出鍵時人數(shù)減一。
圖4.2 按鍵程序流程圖


4.3 LCD顯示程序
初始化LCD1602,剛開始第一行顯示“T_count:00  ”,第二行顯示“C_count:00  ”。后面讀取實時的人數(shù)后填入第一行的數(shù)值處,替代原先位置,第二行也是同樣的操作。
圖4.3 LCD顯示程序流程圖

#include<1602.h>
/****
*******1602檢測忙函數(shù)
*****/
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');
}
/****
*******1602寫字符串函數(shù)
*****/
void lcd_write_str(uchar add,uchar *dat)
{
        lcd_write_com(add);
        while(*dat != '\0')
        {
                lcd_write_date(*dat++);
        
        }
}
/****
*******1602寫時間函數(shù)
*****/
void lcd_write_time(uchar add,uchar date)
{
        uchar shi,ge;
        shi=date/16;
        ge=date%16;
        lcd_write_com(add);
        lcd_write_date(shi+'0');
        lcd_write_date(ge+'0');

}
/****
*******1602初始化函數(shù)
*****/
void lcd_init()
{
        lcd_write_com(0x38);
        lcd_write_com(0x0c);
        lcd_write_com(0x06);
        lcd_write_com(0x01);

}

//////////////////////////////////////////////////////////////////






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1