4 軟件設計
本設計主要是對人員進出檢測所做出一定報警以及提示的軟件設置,在應對不同環境下實現不同的工作狀態,以實現我們所需要的功能,主要是通過按鍵模擬人員的經過,然后再用液晶顯示出來。
4.1 主程序設計
主程序軟件流程圖如下所示:主程序中main函數主要是引腳的初始化,給單片機引腳初始化,初始化LCD1602,初始化紅外對管,通過對LCD1602賦值,采集進入教室的人數,顯示在LCD1602上面進出人數我們采用按鍵的形式,檢測完畢后按下確認鍵確認是否在我們需要的人數范圍內,當少于我們需要的人數時,蜂鳴器會報警三秒,反之,則會LED亮三秒。
圖 4.1 主程序流程圖
4.2 按鍵程序設計
我們首先對單片機進行初始化,按鍵初始化以及顯示初始化,給顯示賦初值。進入按鍵判斷階段,當檢測按下進入鍵時人數加一,當按下走出鍵時人數減一。
圖4.2 按鍵程序流程圖
4.3 LCD顯示程序
初始化LCD1602,剛開始第一行顯示“T_count:00 ”,第二行顯示“C_count:00 ”。后面讀取實時的人數后填入第一行的數值處,替代原先位置,第二行也是同樣的操作。
圖4.3 LCD顯示程序流程圖
#include<1602.h>
/****
*******1602檢測忙函數
*****/
void check_busy()
{
P0=0xff;
do
{
rs=0;
wr=1;
en=0;
en=1;
} while(busy==1);
en=0;
}
/****
*******1602寫數據忙函數
*****/
void lcd_write_date(uchar date)
{
check_busy();
en=0;
LCD_PORT=date;
rs=1;
wr=0;
en=1;
en=0;
}
/****
*******1602寫命令函數
*****/
void lcd_write_com(uchar com)
{
check_busy();
en=0;
LCD_PORT=com;
rs=0;
wr=0;
en=1;
en=0;
}
/****
*******1602寫溫度函數
*****/
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寫字符串函數
*****/
void lcd_write_str(uchar add,uchar *dat)
{
lcd_write_com(add);
while(*dat != '\0')
{
lcd_write_date(*dat++);
}
}
/****
*******1602寫時間函數
*****/
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初始化函數
*****/
void lcd_init()
{
lcd_write_com(0x38);
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x01);
}
//////////////////////////////////////////////////////////////////
|