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