標(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