嵌入式课程设计
- 格式:docx
- 大小:1.90 MB
- 文档页数:27
作品名称:《智能停车场管理系统》
指导老师:魏武
作者:戴智荀
嵌入式课程设计说明书 1. 设计方案
智能停车场管理系统
设计内容及要求:能实时显示车位使用情况(还剩多少车位等)
本系统是用C语言编写,在Linux进行编译调试,然后通过交叉编译,编译出适用于ARM的可执行文件。开发板和电脑用串口线和电脑连接,这个过程使用Secure CRT进行辅助,从而实现智能停车场管理系统的设计,在开发板上设计了三个按键,分别是:进、出、显示。
当用户按下按键时,开发板检测用户的点击区域进行判断用户选择的功能,并对应的执行相应的功能。
本智能停车场系统的功能主要有三大功能模块:入库功能、出库功能、流水记录查看功能。
2.系统设计(包括硬件设计和软件设计)
2.1设计前准备:
硬件 名称 数量
粤嵌_嵌入式开发板 1台
Window系统电脑 1台
串口线公对母 1根
软件 Secure CRT 1个
VMware Workstation Pro 1个
Ubuntu 10.10虚拟平台 1个
Notepad文本编辑器 1个
按键_进 入库功能
按键_出 出库功能
按键_显示 流水记录查看功能 2.2程序流程图:
2.3代码模块
存储车位剩余个数
读取车位剩余个数
写入车辆信息
读取车辆信息(需要完善出库时间)
写入出库时间
播放BMP照片
触摸屏坐标读取
主页面初始化
触摸屏功能主页面
按键_进
按键_出
按键_显示
主函数 函数说明:
定义头文件
全局变量
构件停车信息结构体
函数声明
存储车位剩余个数
读取车位剩余个数
写入车辆信息
读取车辆信息(完善出库时间)
写入出库时间
播放BMP照片
触摸屏坐标读取
主页面初始化
触摸屏功能主页面 按键_进
按键_出 按键_显示
主函数
3.结果测试
在Ubuntu中将.c文件进行交叉编译,下载到开发中,如图1.
图1 下载工程文件到开发板
执行./car_number运行工程文件,自动停车系统开始运行,在界面上打印车位剩余量,祝贺语。车库的总车位为300,一开始车库内的车的数量为0,车场为空。
如图2所示。
图2 系统主菜单界面
分析:说明程序执行成功,自动停车系统开始运行
将工程文件运行起来后,系统会生成两个file文件,car和msg,如图3所示
car:车位剩余数量文件
msg:流水记录存储文件(下文称,数据库)
图3 系统生成car和msg文件
自动停车系统测试正式开始,将进行三个模块功能的测试。
分别是:入库功能、出库功能、流水记录查看功能
一、流水记录查看功能(按键_显示)
步骤1:点击功能按键,进行管理员身份验证,
步骤2:流水记录查看功能,在进入前要经过管理员身份验证,如图4
管理员账号:root
管理员密码:root
图4 管理员身份验证
分析: 输入管理员账号:root;输入管理员密码:root
图5 流水记录查看(车库流水为空)
分析:这说明车场还没有流水记录,数据库为空,界面显示打开文件失败,退出时输入q,按下enter键即可退出,当有流水记录时将于出库功能测试的步骤4进行测试。
二、出库功能测试(按键_进)
步骤1:点击功能按键,表示选择入库
图6 提示输入入库车牌号
这时候要输入将入库的车车牌号,为了测试,我们下面先输入几个车牌号
如:888 、6666 、9999
步骤2:输入第一辆车,车牌号888,如图7所示,车位剩余减1,如图8
图7 输入入库车牌号
图8 返回主界面,车位剩余减1
分析:车位减1,实时显示功能实现。
步骤3:重复步骤2,依次将第二、第三辆车进行入库测试,结果如图9
图9主界面,入库3辆车,车位剩余减3
分析:三辆车入库后车位剩余297,
步骤4:显示入库的情况流水记录,数据库不为空时,如图10所示
图10 流水记录查看(车库流水不为空)
分析:按键_进的功能正常,流水记录显示,入库车辆3辆,车位使用量为3。智能停车场出库功能实现 三、出库功能测试(按键_出)
步骤1:点击功能按键,表示选择入库
步骤2:输入要出库的车牌号码,
○1如果该车牌号码不存在,打印库中无该车,返回主界面;如图11所示
图11 车牌号不存在
○2如果该车牌号码存在,则会判断该车是否已经出库,如果库中该车已经出库,则返回主菜单界面;如图12所示。如果该车尚未出库,这完成出库操作,同时车位剩余数加1,并将出库时间记录到数据库中。如图13所示
图12 该车已出库
图13 该车正常出库
当所有的车都出库后,车位剩余数量恢复为300,如图14所示。同时数据库中流水记录不为空,如图15所示。
图14 所有的车均出库
图15 所有车出库后的流水记录 4.总结
本次课程设计主要是对我们嵌入式学习的一次检验,这也是我第一次完成这样一个系统的设计,在设计的过程中也走了很多的弯路,一开始对于用户需求的考虑不足够,所以一开始没有确定好车位存储文件和数据库文件要不要共一个文件,再有一个是流水记录显示时,第一次让老师检查时,时间的格式是一个7位的10进制数,并没有转化为标准的时间格式,再有一个比较严重问题是统一辆车多次出入库的情况,通过设置标志位的方式得以解决,如库时设置标志位为0,遍历数据库,如果存在一次记录出库时时间为空,标志位设置为1,跳出循环,打印,该车未出库……从这次课程设计的跌跌拌拌中也长了很多的教训,以后考虑问题应该更加细致,以后要学习的路还很长,保持对知识的渴望,保持谦虚。
附录源码
/*作者:戴智荀
学号:2015864130
说明:本团队原创作品,仅用于嵌入式课程设计考核
*/
#include
#include
#include
#include
#include
#include //系统文件open
#include //文件光标
#include
#include //系统文件write
#include //触摸屏
#include //映射内存
#include
//perror
#include
#include
#include //字符串操作
#include //系统计时器
#include //socket
#include
#include
#define RGB_SIZE 800*480*3
#define LCD_SIZE 800*480
#define photo_PATH "./tingche.bmp"
#define FILE_PATH "./msg"
#define FILE_PATH1 "./car"
/*********** 全局变量 **********/ int flag ;
int ts_fd; //触摸屏文件名
int x,y; //触摸屏坐标
struct input_event ts_event;
struct input_event buf;
int car_num = 0; //车位使用量
char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
//构件停车信息结构体
struct info
{
time_t time0; //开始时间
time_t time1; //结束时间
char License_plate[20];//车牌号码
};
//函数声明
int input_carmsg(void);
void init_main();
int show_shapebmp(int x,int y,int w,int h,char *bmpname);
size_t fread(void *ptr, size_t size, size_t nmemb, FILE * stream);
int input_outtime(void);
//存储车位剩余个数
int input_carnumber(FILE
*fp1)
{
fp1 = fopen(FILE_PATH1, "w+");
if( fp1 == NULL) //
{
printf("车位文件丢失\n");
return
-1;
}
fprintf(fp1,"%d\n",car_num);
fclose(fp1);
}
//读取车位剩余个数
int read_carnumber(FILE *fp1)