嵌入式系统课程设计报告061124陈云.docx
《嵌入式系统课程设计报告061124陈云.docx》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计报告061124陈云.docx(11页珍藏版)》请在冰点文库上搜索。
嵌入式系统课程设计报告061124陈云
课程设计报告
电子点菜器
班级:
090611
学号:
2009061124
姓名:
陈云
教师评语:
教师签名:
2012年10月
课程设计题目
电子点菜器
主要内容
支持触摸屏图形选菜
支持小键盘上下移动选择菜
记录菜单
删除菜单
采用的工具方法
硬件:
UP-NETARM3000嵌入式开发平台(三星S3C44B0X芯片),PC机,JTAG调试器
软件:
ADS1.2,windowsXP
进度安排
9月4日-9月6日需求分析
9月11日概要设计
9月13日-9月19日详细设计
9月20日-9月16日软件开发
参考资料
[1]朱伟.S3C44b0X控制LCD的设计与实现.[J].真空电子技术,2006,(3)
[2]黄燕平.μCOS-ⅡRAM移植要点详解[M].北京:
北京航空航天大学出版社,2005.
[3]王田苗,魏洪兴.嵌入式系统设计与实例开发[M].北京:
清华大学出版社,2008.
1.题目
电子点菜器
2.系统简介
随着人们生活水平的提高和生活方式的转变以及中国经济及旅游业的发展,餐饮业市场活跃,蕴藏巨大的商机,餐饮消费继续担当着拉动消费需求迅增的重要力量。
但是大多数的餐饮店还是沿袭传统的点菜模式,即由人工记录点菜并送至厨房,该过程繁琐易出错,当顾客比较多时,造成时间的浪费和服务品质的下降,需进行数字化改造。
有些餐饮店虽装备点菜系统,但部分技术老旧、使用不方便、价格昂贵。
在综合已有电子点菜方案和性价比以及技术可行性的基础上,本文选定基于GSM无线通信技术、嵌入式系统技术、ADS1.2开发平台、三星S3C44B0X微控制器、μCOS-Ⅱ嵌入式操作系统以及触摸屏技术的嵌入式电子点菜系统作为点菜系统的解决方案,其特点是开发和使用比较方便。
3.系统设计
3.1硬件框图
在实际应用中,嵌入式系统硬件配置十分精简,除了CPU和基本的外围电路外,其余硬件都可以根据成本和功能进行裁减。
嵌入式电子点菜系统的硬件构成同样非常简洁,如图3.1所示。
图3.1点菜终端硬件框图
系统下位机硬件部分包括主微处理器,显示与输入部分(本系统点菜输入有两套方案:
触摸屏、键盘),无线收发部分,存储部分,以及其他基本的外围电路部分(如:
晶振电路模块,复位电路模块,电源模块)。
系统采用S3C44B0X(ARM7TDMI)微处理器为核心微处理芯片。
显示与输入部分采用带触摸屏功能的LCD和小键盘。
其中LCD采用240*320,STN256色的LCD,而触摸屏置于LCD液晶显示器之上,屏体部分是一块与显示器非常吻合的多层复合薄膜,触摸屏使用专用的驱动芯片,本系统采用的驱动芯片是FM7843(S3C44B0X选取PG口与FM7843接口,共用PG2-PG7共6条口线)。
键盘采用ZLG7289芯片驱动的小键盘,ZLG7289价格便宜,稳定可靠。
无线收发部分主要是通过9针串行线连接的GSM模块,GSM模块内嵌SIM卡一块,通过AT指令集来控制收发信息。
同时上位机PC也有通过9针串行线连接的GSM模块,来实现相互之间的短消息互发。
存储部分要用到3种存储器:
NOR型FLASH,SDRAM(同步动态随机存储器),NAND型FLASH。
NOR型FLASH用来存放Bootloader引导程序,SDRAM用来作为内存,NAND型FLASH用来存放编译的应用程序。
3.2功能设计
如图3.2所示,我们解释一下基本功能的流程:
用户进入系统后,查看的界面是被系统已经加载好的菜谱列表,其右边有一个空的已经点菜列表,用户选择一个菜,点enter将弹出菜的基本信息(设计是单价,图片等,实际实现的只有图片),并且弹出一个确认的按钮,如果用户再点一下enter,那么菜将加入到已点菜的列表中,并有文字信息提示,已经系统进行统计,否则用户点任意其它键继续点其它的菜。
图3.2功能流图
如果用户点“-”则进入已点菜表中,用户选择任意一道已点菜,点“*”,进行删除这道菜,系统重新统计信息,用户再按enter则返回到选择菜的列表中可以继续点菜,否则可以留在已经点菜表中继续删除菜。
系统分为以下几个模块:
(1)菜谱加载模块:
系统用来加载菜名数据的模块,系统启动时自动加载Flash中的菜品,以方便客户点菜。
(2)信息显示模块:
用户查看菜详细的模块,此模块显示相关菜品的信息,比如图片、价格等。
(3)添加模块:
用户选择菜加入到已点菜中的模块,当用户看重相应菜品后选择相关菜品,按添加键添加菜品到已点菜单栏中。
(4)统计模块:
系统对用户已经菜进行数据统计的模块,此模块可以查看已点的菜品。
(5)删除模块:
用户从已点菜列表中删除菜的模块,当用户由于某种原因想换一款菜品时可以利用该功能找到已点菜品删除该菜品。
(6)消息提示模块:
每一步用户操作系统给予适当提示的模块,此模块提示相应信息,方便用户使用。
4.系统实现
4.1操作系统的移植
本系统操作系统选用μCOS-Ⅱ系统,μCOS-Ⅱ是占先式内核的实时嵌入式系统,任务调度是抢占式的多任务系统设计。
μCOS-Ⅱ不仅源码公开,而且具有非常稳定、可靠的性能。
应用μCOS-Ⅱ系统的主要任务是μCOS-Ⅱ系统的移植工作,而移植工作的任务主要集中在多任务切换的实现上,用来保存好恢复CPU现场。
μCOS-Ⅱ移植到ARM7TDMI处理器上,必须写上述3个文件,这3个文件都是与处理器架构密切相关,分别是OS_CPU.h、OS_CPU_A.s、OS_CPU.c。
它们的作用是把μCOS-Ⅱ操作系统紧紧的附着在ARM处理器上,实现软件和硬件的协同工作。
其中OS_CPU.h包括了用#define定义的处理器相关的常量、宏和类型定义;OS_CPU_A.s文件中,要求用户编写一下4个简单的汇编语言函数OSStartHighRdy(用于启动当前就绪的优先级最高的任务)、OSCtxSW(用于进行任务之间的切换)、OSIntCtxSW(OSCtxSW通过调用OSIntCtxSW来从ISR中执行切换功能)和OSTickISR(时钟节拍控制);OS_CPU.c中唯一必要的函数是OSTaskStkInit(),其他函数只需声明不需包含代码。
4.2列表框控件
列表框控件的流程图如图4.1所示
图4.1列表框流程图
⑴用CreateListCtrl函数创建立列表框
⑵使用ListNextFileName函数列出当前的目录位置以后的第一个符合扩展名的
文件名,同时,当前目录的位置指针自动下移。
如果成功则返回TRUE,如果没有适合的文件则返回FALSE。
⑶因为ListNextFileName函数得到的文件名不是Unicode字符串,所以要通过strChar2Unicode函数转换成Unicode字符串,才可以添加到列表框中显示出来。
同时,为了以后方便得到文件名字符串的非Unicode格式,提倡在一个数组中记录ListNextFileName返回的char型字符串,以便以后打开相应的文件。
⑷通过ListCtrlSelMove函数改变列表框的高亮度条的位置。
⑸使用ShowBmp函数可以显示指定文件名的真彩色的位图图片
4.3消息循环
在多任务系统中,消息是系统各个任务之间通信的最常用手段,它可以使一个任务或者中断服务程序向另一个任务发送以指针方式定义的变量,消息队列相关函数定义在OSMessage.h中。
应用程序在Main-Task任务中等待消息,并对消息进行判断和处理。
本系统由于控件比较多,当判断消息来源为键盘消息时,可以利用控件的ID判断具体消息来源做相应的操作。
主要代码为:
for(;;){
POS_CtrlpCtrl;//定义控件结构指针
pMsg=WaitMessage(0);//等待消息
if(pMsg->pOSCtrl){//发送给控件的消息
if(pMsg->pOSCtrl->CtrlMsgCallBk)
(*pMsg->pOSCtrl->CtrlMsgCallBk)(pMsg);
}
else{
switch(pMsg->Message){
caseOSM_KEY:
//键盘消息
pCtrl=GetCtrlfromID(NULL,GetWndCtrlFocus(NULL));//得到焦点控件的指针
if(pCtrl->CtrlType==CTRLTYPE_WINDOW){
if((((PWnd)pCtrl)->style&WND_STYLE_MODE)==WND_STYLE_MODE){
//焦点是有模式窗口,消息直接传递过去
OSOnSysMessage(pMsg);
break;
}
}
if(pCtrl->CtrlID==ID_ButtonConfirm)//判断控件ID
{
if(onKeySecond(pMsg->WParam,pMsg->LParam))
{
break;
}
OSOnSysMessage(pMsg);
break;
}
if(pCtrl->CtrlID==ID_Result)//判断控件ID
{
if(onKeyCancel(pMsg->WParam,pMsg->LParam))
{
break;
}
OSOnSysMessage(pMsg);
break;
}
else
{
if(onKey(pMsg->WParam,pMsg->LParam))
break;
}
default:
OSOnSysMessage(pMsg);
break;
}
}
DeleteMessage(pMsg);//删除消息
}
代码说明:
WaitMessage函数用来等待消息,参数0表示等待的超时时间为无穷,即除非主任务接收到消息,否则此函数不会返回。
对于键盘消息,OSM_Key来说Wparam表示系统的键盘按键号码,Lparam表示按键时同时按下功能键。
系统得到消息并处理完成相应的功能以后,要使用DeleteMessage函数删除得到的消息,以释放其相应的内存资源。
4.4点菜处理
列表控件的bug开发平台提供的列表控件不支持空数据。
当创建一个列表控件时,如果未给其加入任何元素时,编译能通过,但平台不能正常运行,处理办法是,生成一个列表框时立刻对其填入一个初始数据。
如下我们在已点菜品列表框中添加原始数据“menu”:
voidaddResult(char*value)
{
strcpy(resultName[length],value);
length++;
}
voidMyCreateFileList(intid,PListCtrllist,intx1,inty1,intx2,inty2)
{
structRECTrect;//定义矩形结构
U16mark[5];
SetRect(&rect,x1,y1,x2,y2);
pResultListCtrl=CreateListCtrl(id,&rect,100,FONTSIZE_MIDDLE,CTRL_STYLE_DBFRAME,NULL);//创建列表框
//SetWndCtrlFocus(NULL,ID_MainListBox);
addResult("menu");
strChar2Unicode(mark,resultName[0]);
AddStringListCtrl(pResultListCtrl,mark);
ReDrawOSCtrl();
}
删除元素的处理:
因为平台的系统函数并没有提供删除指定元素的功能,帮我们借助于系统已经提供的函数实现了一个删除指定元素的函数,开始打算采用链表的数据结构,但是因为结合系统函数后,对链表的结构并不是那么好处理,故弃用,改用数组的结构。
实现如下:
charresultName[101][12]={NULL};
intlength=0;//记录长度
voiddropResult(intposition)
{
//删除第0个其实是第1个,因为数组0位置的值始终不变
//没有做必要的检查,正常有边界检测不能弄越界了
inti=1;
if(position==0)
return;
for(;istrcpy(resultName[position],resultName[position+i]);
length--;//长度相应减一
}
调用:
Uart_Printf("keyis%d\n",nkey);
dropResult(pResultListCtrl->CurrentSel);
ListCtrlReMoveAll(pResultListCtrl);
for(i=0;i{
strChar2Unicode(mark,resultName[i]);
AddStringListCtrl(pResultListCtrl,mark);
}
//SetWndCtrlFocus(NULL,ID_MainListBox);
ReDrawOSCtrl();//重画控件
returnTRUE;
5.总结
本文提出了无线点菜终端的软硬件系统解决方案,设计实现了一个餐馆点菜系统的原型,即采用S3C44B0X微处理器、TG35IGSM短消息通信模块及其他输入输出模块作为硬件平台,利用μCOS-Ⅱ实现点菜逻辑的方案。
文中的电子点菜系统只是一个轮廓,只对一些关键部分做说明,其他还没考虑到的问题还有许多,只能以后逐步升级完善。
随着电子技术及软件的发展,基于ARM的嵌入式电子点菜系统将具有更大的实用价值和发展空间。
本实验在UP-NETARM3000实验平台上,通过团队不断的摸索而开发出一个简单的电子点菜系统,熟悉了嵌入式开发的基本流程,也对μC/OS-II移植有的初步的实验印象。
6.参考文献
[1]王田苗,魏洪兴.嵌入式系统设计与实例开发[M].北京:
清华大学出版社,2008.
[2]黄燕平.μCOS-ⅡRAM移植要点详解[M].北京:
北京航空航天大学出版社,2005.
[3]陈艳华.基于ARM的嵌入式系统开发与案例[M].北京:
人民邮电出版社,2007.
[4]郭荣佐.嵌入式系统原理[M].北京:
北京航空航天大学出版社,2008.