找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1975|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

教室人數(shù)實(shí)時(shí)檢測(cè)系統(tǒng)-51單片機(jī)版程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:861850 發(fā)表于 2020-12-20 19:45 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
4  軟件設(shè)計(jì)
本設(shè)計(jì)主要是對(duì)人員進(jìn)出檢測(cè)所做出一定報(bào)警以及提示的軟件設(shè)置,在應(yīng)對(duì)不同環(huán)境下實(shí)現(xiàn)不同的工作狀態(tài),以實(shí)現(xiàn)我們所需要的功能,主要是通過(guò)按鍵模擬人員的經(jīng)過(guò),然后再用液晶顯示出來(lái)。
4.1 主程序設(shè)計(jì)
主程序軟件流程圖如下所示:主程序中main函數(shù)主要是引腳的初始化,給單片機(jī)引腳初始化,初始化LCD1602,初始化紅外對(duì)管,通過(guò)對(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亮三秒。

圖 4.1  主程序流程圖

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


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

#include<1602.h>
/****
*******1602檢測(cè)忙函數(shù)
*****/
void check_busy()
{  
        P0=0xff;
        do
        {
                rs=0;
                wr=1;
                en=0;
                en=1;
        } while(busy==1);
        en=0;
}
/****
*******1602寫(xiě)數(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寫(xiě)命令函數(shù)
*****/
void lcd_write_com(uchar com)
{
        check_busy();
        en=0;
        LCD_PORT=com;
        rs=0;
        wr=0;
        en=1;
        en=0;
}
/****
*******1602寫(xiě)溫度函數(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寫(xiě)字符串函數(shù)
*****/
void lcd_write_str(uchar add,uchar *dat)
{
        lcd_write_com(add);
        while(*dat != '\0')
        {
                lcd_write_date(*dat++);
        
        }
}
/****
*******1602寫(xiě)時(shí)間函數(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);

}

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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表