




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上课程设计报告基于ARM的嵌入式电子点菜系统班级:学号:姓名:教师评语:教师签名:2012年10月课程设计题目基于ARM的嵌入式电子点菜系统主要内容综合运用液晶屏、触摸屏、键盘、绘图API、图形控件和消息循环等知识,基于ARM处理器编写一段实用的电子点菜器程序。采用的工具方法运行环境:博创UP-3000实验台编译软件:Metrowerks Code Worrior for ARM Developer Suite v1.2芯片:三星S3C44B0X01芯片编译语言:C/C+进度安排14周:编译代码57周:运行实现8周:测试参考资料基于ARM的嵌入式系统设计实验与实践教程专
2、心-专注-专业1. 题目基于ARM的嵌入式电子点菜系统2. 系统简介在基于ARM的嵌入式环境下,本电子点菜系统可实现的功能有:支持触摸屏图形选菜以及记录菜单等功能。界面美观,功能合理,基本达到了实验要求的内容。3. 系统设计3.1设计背景随着我国的餐饮企业的蓬勃发展,餐饮行业成为国内最早的一个完 全市场化的行业,个体民营占绝对优势和主导的行业,市场竞争非常充分,在广大的餐饮企业的经营者的不懈努力下,餐饮行业取得了非常突出的发展和进步。3.2设计意义传统的点菜方式由人工来传递菜单,不仅浪费时间、效率低下;一旦生意火热,单据多,信息量大时,分单、传菜等环节很容易出现错误,从而直接影响服务质量。导致
3、企业造成不必要的损失。而本文介绍的电子点菜系统,大大降低人力资源成本,加快各环节之间的数据流通,对企业软环境的档次有较大提高。在以特色服务吸引客户的同时,有效提高餐饮机构的服务质量和工作效率,为餐饮业创造更多利润。3.3总体设计图1 实验程序流程图3.4代码编译及注释本实验要求实现部分:(1)、MainTask中按键消息获取,处理(2)、按键处理函数OnKey()函数(3)、创建串口处理任务Serial_Receive_Task(void *Id)(4)、 实现串口消息换取,处理(在LCD或数码管上显示)函数OnReceive(char nRdata)初始化操作:void initOSGUI(
4、)/初始化操作系统的图形界面initOSMessage();initOSList();initOSDC();initOSCtrl();initOSFile();/ Main function. /int main(void)ARMTargetInit(); /开发板初始化OSInit(); /操作系统初始化 uHALr_ResetMMU();/复位MMULCD_Init(); /初始化LCD模块LCD_printf("LCD initialization is OKn");/向液晶屏输出数据LCD_printf("320 x 240 Text Moden"
5、;);initOSGUI();/初始化图形界面LoadFont();/调Unicode字库LoadConfigSys();/使用config.sys文件配置系统设置LCD_printf("Create task on uCOS-II.n");OSTaskCreate(Main_Task,(void*)0,(OS_STK*)&Main_StackSTACKSIZE*8-1, Main_Task_Prio);/ 创建系统任务3.4.1 触摸功能设计实现设计思想是让LCD 显示屏每页显示六道菜,触摸实现点菜确认,所以在触摸屏上安排了九个区间的触摸功能用以下代码完成触摸区域
6、。 recta.left=0;recta.top=0;recta.right=320;recta.bottom=30;/定义触摸区域大小 pTouch_Position=&Touch_Position;prect=▭precta=&recta; prectb=&rectb;prectc=&rectc;prectd=&rectd;precte=&recte;prectf=&rectf;如上,定义上下左右四个区间的大小来完成触摸区域,六道菜六个触摸区域区域大小根据图片大小而定。触摸区域完成后,就是实现触摸点菜功能了,在这里,
7、我们用到了消息循环,即InitInterface();Uart_Printf("这是01号桌");在进入点菜界面之前有一个欢迎界面,需要通过按键进入点菜界面,这里使用for循环用来判断。for(;)pMsg=WaitMessage(0); /等待消息switch(pMsg->Message)case OSM_KEY:这里的case OSM_KEY表示按键事件,后面用了一个judge函数来进行判断if(judge=0)num=0; state=0; statea=0; stateb=0; statec=0; stated=0; statee=0; statef=0;if
8、(onKey(pMsg->WParam,pMsg->LParam) judge=1; pdc = CreateDC(); ShowBmp(pdc,bmpnamelogo1, 70, 1); ShowBmp(pdc,bmpnamelogo2, 200, 1); ShowBmp(pdc,bmpnamelogo3, 70, 80); ShowBmp(pdc,bmpnamelogo4, 200, 80); ShowBmp(pdc,bmpnamelogo5, 70, 160); ShowBmp(pdc,bmpnamelogo6, 200, 160); OSTimeDly(100);judge
9、=1表示发生了这个事件,进入点菜界面。进入点菜界面后,可以看见每排2道菜,一共六道菜,这是用到了消息循环,同时用用了一次if judge来进行点菜判断,同时定义IsInRect2(prect1,pTouch_Position)函数来判断prect1指向的区域是否有触摸动作,有则同样跳转到菜单画面,case OSM_TOUCH_SCREEN:表示触摸屏动作后系统需响应的进程。if(judge=1)if(IsInRect2(precta, pTouch_Position) if(statea=0) ShowBmp(pdc,dj_Pict, 20,5);statea=1;Uart_Printf(&q
10、uot;01号桌点了小鸡炖蘑菇t");sysnumber=sysnumber+price0;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;ElseFillRect( pdc, 20,5,40,25, GRAPH_MODE_NORMAL, COLOR_WHITE);DrawRectFrame(pdc, 20, 5, 40, 25);statea=0;Uart_Printf("01号桌取消您点了小鸡炖蘑菇t");sysnumber=sysnumber-pric
11、e0;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;else if(IsInRect2(prectb, pTouch_Position) · · ·DeleteMessage(pMsg);/删除消息,释放资源OSTimeDly(200);DestoryDC(pdc);用消息循环来实现点菜和取消点菜的过程,点一下图片为点菜,再点一下就取消了点菜。3.4.2菜单记录的设计实现在最开始初始化完成之后,创建了文本框在点菜界面右下角用来记录菜单,具体代码如下:pTe
12、xtCtrl=CreateTextCtrl(101, &rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL, NULL);SetTextCtrlText(pTextCtrl, str,TRUE);/设置文本框内容在定义图片之前设置了每道菜的单价:int price6=50,50,80,280,180,80;之后每点一道菜,系统自动判断类别并进行菜单记录,增删菜价。SetTextCtrlText(pTextCtrl, str,TRUE);4. 系统实现(1)在ADS1.2中,新建一个项目menu,把操作系统所需要的头文件(*.h)和库文件(*.al
13、f)加入工程中。(2)在创建的Main.c文件中,在Main_Task任务中添加代码,初始化一些变量包括:创建绘图用的DC(createDC)并在绘图完成后删除它(DestoryDC);启动消息循环,等待键盘扫描任务和触摸屏任务发来的消息,并调用相应的函数进行处理。(3)创建界面函数e.c并添加代码,主要定义InitInterface()函数,进行界面初始化并显示图像,包括创建列表框控件InitCtrl()和显示初始图片。InitPicture()。(4)编译通过后,下载到试验台中运行。(5)附(系统源代码Main.c):#include".ucos-iiincludes.h&quo
14、t; /* uC/OS interface */#include ".ucos-iiaddosaddition.h"#include ".incdrv.h"#include ".incdrvzlg7289.h"#include <string.h>#include ".inctemplate.h"#include".incexperiment.h"#include ".incOSFile.h"#include ".incdrvUstring.h"
15、;#include <math.h>#include ".UCOS-IIuhaluart.h"/#include ".incexio.h"extern int Zlg7289SIOBand;extern int Zlg7289SIOCtrl;int num=0;#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting /*任务定义*/OS_STK Main_StackSTACKSIZE*8=0, ; /Main_Test_Task堆栈v
16、oid Main_Task(void *Id); /Main_Test_Task#define Main_Task_Prio 13OS_STK Dynamic_Display_Task_StackSTACKSIZE*8=0, ; void Dynamic_Display_Task(void *Id); #define Dynamic_Display_Task_Prio 52/*已经定义的OS任务*tcp监控任务11以太网物理层监控任务8触摸屏任务9键盘任务10lcd刷新任务59系统任务1*/*事件定义*/OS_EVENT *Nand_Rw_Sem; /Nand_Flash读写控制权旗语/and
17、 you can use it as folloeing:/ Nand_Rw_Sem=OSSemCreate(1); /创建Nand-Flash读写控制权旗语,初值为1满足互斥条件/ OSSemPend(Nand_Rw_Sem,0,&err);/ OSSemPost(Nand_Rw_Sem);OS_EVENT *Uart_Rw_Sem; /Uart读写控制权旗语/and you can use it as folloeing:/ Uart_Rw_Sem=OSSemCreate(1); /创建Uart读写控制权旗语,初值为1满足互斥条件/ OSSemPend(Uart_Rw_Sem,0,
18、&err);/ OSSemPost(Uart_Rw_Sem);/void initOSGUI()/初始化操作系统的图形界面initOSMessage();initOSList();initOSDC();initOSCtrl();initOSFile();/ Main function. /int main(void)ARMTargetInit(); /开发板初始化OSInit(); /操作系统初始化 uHALr_ResetMMU();/复位MMULCD_Init(); /初始化LCD模块LCD_printf("LCD initialization is OKn");
19、/向液晶屏输出数据LCD_printf("320 x 240 Text Moden");initOSGUI();/初始化图形界面LoadFont();/调Unicode字库LoadConfigSys();/使用config.sys文件配置系统设置LCD_printf("Create task on uCOS-II.n");OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_StackSTACKSIZE*8-1, Main_Task_Prio);/ 创建系统任务/ 创建串口任务/OSTaskCrea
20、te(Dynamic_Display_Task,(void *)0,(OS_STK *)&Dynamic_Display_Task_StackSTACKSIZE*8-1,Dynamic_Display_Task_Prio); / OSAddTask_Init();/创建系统附加任务LCD_printf("Starting uCOS-II.n");LCD_printf("Entering graph mode.n");LCD_ChangeMode(DspGraMode);/变LCD显示模式为文本模式InitRtc();/初始化系统时钟Nand_Rw
21、_Sem=OSSemCreate(1); /创建Nand-Flash读写控制权旗语,初值为1满足互斥条件/OSStart();/操作系统任务调度开始/不会执行到这里return 0;/*char *KeyTable="NumLock","/","*","-","7","8","9","+","4","5","6","1","2",&quo
22、t;3","Enter","0","."void onKey(int nkey, int fnkey)PDC pdc;/创建绘图设备上下文结构U16 ch10;ClearScreen();/清屏pdc=CreateDC();/创建绘图设备上下文Uart_Printf("key=%sn", KeyTablenkey);strChar2Unicode(ch, KeyTablenkey);/将数据转化成Unicode 转化函数参考INCDRVustring.hSetPenColor(pdc,RGB( 255,0
23、,0);LCD_printf(KeyTablenkey);LCD_printf("n");/TextOut(pdc,100,100,ch ,TRUE, FONTSIZE_MIDDLE);/文本模式下显示文字DestoryDC(pdc);/删除绘图设备上下文*/ void Main_Task(void *Id) /Main_Test_TaskPOSMSG pMsg=0; int judge=0;int sysnumber=0;int i=0;int j=0;U16 str20; PDC pdc;int price6=50,50,80,280,180,80;char dj_Pi
24、ct12='1','2','8','_','3','7',' ',' ','B','M','P',0;char dj_Pict112='1','2','8','_','3','5',' ',' ','B','M','P',0;char dj_Pic
25、t212='1','2','8','_','3','6',' ',' ','B','M','P',0;char bmpnamelogo112='0','0','0','_','0','1',' ',' ','B','M','P',0; char b
26、mpnamelogo212='0','0','0','_','0','2',' ',' ','B','M','P',0;char bmpnamelogo312='0','0','0','_','0','3',' ',' ','B','M','P',
27、0; char bmpnamelogo412='0','0','0','_','0','4',' ',' ','B','M','P',0; char bmpnamelogo512='0','0','0','_','0','5',' ',' ','B','M',
28、39;P',0; char bmpnamelogo612='0','0','0','_','0','6',' ',' ','B','M','P',0; int state,statea,stateb,statec,stated,statee,statef;structPOINT Touch_Position,*pTouch_Position;structRECT rect,recta,rectb,rectc,re
29、ctd,recte,rectf;structRECT *prect,*precta,*prectb,*prectc,*prectd,*precte,*prectf;PTextCtrl pTextCtrl;state=0;statea=0;stateb=0;statec=0;stated=0;statee=0;statef=0;recta.left=0;recta.top=0;recta.right=320;recta.bottom=30;rectb.left=0;rectb.top=32;rectb.right=320;rectb.bottom=62;rectc.left=0;rectc.to
30、p=64;rectc.right=320;rectc.bottom=94;rectd.left=0;rectd.top=96;rectd.right=320;rectd.bottom=126;recte.left=0;recte.top=128;recte.right=320;recte.bottom=158;rectf.left=0;rectf.top=160;rectf.right=320;rectf.bottom=190;rect.left=80;rect.top=200;rect.right=300;rect.bottom=240;pTouch_Position=&Touch_
31、Position;prect=▭precta=&recta; prectb=&rectb;prectc=&rectc;prectd=&rectd;precte=&recte;prectf=&rectf;ClearScreen();InitInterface();Uart_Printf("这是01号桌");/消息循环for(;)pMsg=WaitMessage(0); /等待消息switch(pMsg->Message)case OSM_KEY:/Uart_Printf("%d",pM
32、sg->WParam);if(judge=0)num=0; state=0; statea=0; stateb=0; statec=0; stated=0; statee=0; statef=0;if(onKey(pMsg->WParam,pMsg->LParam) judge=1; pdc = CreateDC(); ShowBmp(pdc,bmpnamelogo1, 70, 1); ShowBmp(pdc,bmpnamelogo2, 200, 1); ShowBmp(pdc,bmpnamelogo3, 70, 80); ShowBmp(pdc,bmpnamelogo4,
33、200, 80); ShowBmp(pdc,bmpnamelogo5, 70, 160); ShowBmp(pdc,bmpnamelogo6, 200, 160); OSTimeDly(100); SetRect(&rect, 180,205,260,225);/设置PID参数轴1P的文本框 pTextCtrl=CreateTextCtrl(101, &rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL, NULL);/创建文本框 Int2Unicode(sysnumber,str);/将整形数据转换为Unicode数据 /SetWndC
34、trlFocus(NULL, ID_MainTextCtrl);/将焦点移到文本框中 SetTextCtrlText(pTextCtrl, str,TRUE);/设置文本框内容 /EXIO_8255A_CTRL=0x80; /EXIO_8255A_PORTC=0xff; OSTaskCreate(Dynamic_Display_Task, (void *)0, (OS_STK *)&Dynamic_Display_Task_StackSTACKSIZE*8-1, Dynamic_Display_Task_Prio);/ 1 else if(judge=1)/Uart_Printf(&q
35、uot;%d",pMsg->WParam);switch(pMsg->WParam)case 15: if(statea=0) ShowBmp(pdc,dj_Pict, 20,5);statea=1;Uart_Printf("01号桌点了小鸡炖蘑菇t");sysnumber=sysnumber+price0;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;elseFillRect( pdc, 20,5,40,25, GRAPH_MODE_NORM
36、AL, COLOR_WHITE);DrawRectFrame(pdc, 20, 5, 40, 25);statea=0;Uart_Printf("01号桌取消您点了小鸡炖蘑菇t");sysnumber=sysnumber-price0;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;break;case 11: if(stateb=0) ShowBmp(pdc,dj_Pict, 20,37);stateb=1;Uart_Printf("01号桌点了酸菜炖粉条
37、t");sysnumber=sysnumber+price1;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber; elseFillRect( pdc, 20,37,40,57, GRAPH_MODE_NORMAL, COLOR_WHITE);DrawRectFrame(pdc, 20, 37, 40, 57);stateb=0;Uart_Printf("01号桌取消了酸菜炖粉条t");sysnumber=sysnumber-price1;Int2Unicode
38、(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;break;case 12: if(statec=0) ShowBmp(pdc,dj_Pict, 20,69);statec=1;Uart_Printf("01号桌点了红烧狮子头t");sysnumber=sysnumber+price2;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber; elseFillRect( pdc, 20,69
39、,40,89, GRAPH_MODE_NORMAL, COLOR_WHITE);DrawRectFrame(pdc, 20, 69, 40, 89);statec=0;Uart_Printf("01号桌取消了红烧狮子头t");sysnumber=sysnumber-price2;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;break;case 13:if(stated=0) ShowBmp(pdc,dj_Pict, 20,101);stated=1;Uart_Pr
40、intf("01号桌点了烤乳猪t");sysnumber=sysnumber+price3;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber; elseFillRect( pdc, 20,101,40,121, GRAPH_MODE_NORMAL, COLOR_WHITE);DrawRectFrame(pdc, 20, 101, 40, 121);stated=0;Uart_Printf("01号桌取消了烤乳猪t");sysnumber=sysnum
41、ber-price3;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;break;case 8: if(statee=0) ShowBmp(pdc,dj_Pict, 20,133);statee=1;Uart_Printf("01号桌点了太子蟹t");sysnumber=sysnumber+price4;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber; else
42、FillRect( pdc, 20,133,40,153, GRAPH_MODE_NORMAL, COLOR_WHITE);DrawRectFrame(pdc, 20,133, 40, 153);statee=0;Uart_Printf("01号桌取消了太子蟹t");sysnumber=sysnumber-price4;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;break;case 9: if(statef=0) ShowBmp(pdc,dj_Pict, 20,
43、165);statef=1;Uart_Printf("01号桌点了文昌鸡t");sysnumber=sysnumber+price5;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber; elseFillRect( pdc, 20,165,40,185, GRAPH_MODE_NORMAL, COLOR_WHITE);DrawRectFrame(pdc, 20,165, 40,185);statef=0;Uart_Printf("01号桌取消了文昌鸡t"
44、;);sysnumber=sysnumber-price5;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;break;case 14:ClearScreen(); ShowBmp(pdc,dj_Pict1, 60,40); judge=2; OSTimeDly(1500);ClearScreen();ShowBmp(pdc,dj_Pict2, 0,0);judge=0;sysnumber=0;break;default:break;break;case OSM_LISTCTRL2_SE
45、LCHANGE:onListCtrl2SelChange(pMsg->WParam,pMsg->LParam);break;case OSM_MENU_SELCHANGE:onMenuSelChange(pMsg->WParam,pMsg->LParam);break;case OSM_TOUCH_SCREEN:/OSM_TOUCH_SCREEN:Touch_Position.x=pMsg->WParam&0xffff;Touch_Position.y=pMsg->WParam>>16;if(judge=1)if(IsInRect2(pr
46、ecta, pTouch_Position) if(statea=0) ShowBmp(pdc,dj_Pict, 20,5);statea=1;Uart_Printf("01号桌点了小鸡炖蘑菇t");sysnumber=sysnumber+price0;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;elseFillRect( pdc, 20,5,40,25, GRAPH_MODE_NORMAL, COLOR_WHITE);DrawRectFrame(pdc, 20,
47、 5, 40, 25);statea=0;Uart_Printf("01号桌取消您点了小鸡炖蘑菇t");sysnumber=sysnumber-price0;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;else if(IsInRect2(prectb, pTouch_Position) if(stateb=0) ShowBmp(pdc,dj_Pict, 20,37);stateb=1;Uart_Printf("01号桌点了酸菜炖粉条t");sy
48、snumber=sysnumber+price1;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber; elseFillRect( pdc, 20,37,40,57, GRAPH_MODE_NORMAL, COLOR_WHITE);DrawRectFrame(pdc, 20, 37, 40, 57);stateb=0;Uart_Printf("01号桌取消了酸菜炖粉条t");sysnumber=sysnumber-price1;Int2Unicode(sysnumber,
49、str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber;else if(IsInRect2(prectc, pTouch_Position) if(statec=0) ShowBmp(pdc,dj_Pict, 20,69);statec=1;Uart_Printf("01号桌点了红烧狮子头t");sysnumber=sysnumber+price2;Int2Unicode(sysnumber,str);SetTextCtrlText(pTextCtrl, str,TRUE);num=sysnumber; elseFillRect( pdc, 20,69,40,89, GRAPH_MODE_N
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园防盗抢安全知识培训课件
- 法语面试题目答案
- 培训考试测试题及答案
- 教育宣传考试题及答案
- 校园安全知识培训课件的困惑
- java面试题及答案ip段地名
- 沈海高速考试试题及答案
- 货币自考试题及答案
- 猪场检疫面试题及答案
- 导诊文员笔试题及答案
- 育苗温室钢架棚报验技术资料(检验批)
- 云南省昆明市嵩明县2023-2024学年高一下学期期中数学试卷
- NB-T20024-2010核电厂工程建设预算编制方法
- BBT 0024-2018 运输包装用拉伸缠绕膜
- HYT 0302-2021 沸石离子筛法海水提钾工程设计规范(正式版)
- 外祖父母外孙子外孙女关系证明
- DL∕T 2473.7-2022 可调节负荷并网运行与控制技术规范 第7部分:继电保护
- 2021修订《城市规划设计计费指导意见》
- 道德与法治新课标解读
- 《光伏发电工程工程量清单计价规范》
- 《国家心力衰竭指南-2023》解读
评论
0/150
提交评论