|
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);
}
//////////////////////////////////////////////////////////////////
|
|