




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告电子点菜器设计报告班级:20120614学号:2012061411姓名:教师评语:教师签名:2015年9月课程设计题目电子点菜器主要内容本次实验的主要内容是进行电子点菜器的设计,具体实现的功能包括:(1)实现正常显示欢迎界面、菜品选择界面以及菜品编辑界面。(2)在选择菜品界面实现用单击进行菜品信息查看和系统操作,用双击进行菜品选择。(3)在编辑界面实现查看被选择过的菜品信息,可通过删除选择过的菜品达到让用户实现对菜品重新编辑的目的,并且此界面可以和选择菜品界面相互跳转达到让用户重新选择菜品的目的。(4)实现将用户选择菜品的信息通过串口传送到显示器。(5)数码数码管显示已点菜的总价。(6)键盘按键点菜、翻页、查看所有已点菜品的信息等。采用的工具方法硬件:pc机、博创up-netarm3000实验台软件:超级终端通讯工具、jtag仿真器、ads1.2集成开发环境、仿真器驱动器进度安排1-2学时:分析需求3-28学时:编码实现29-32学时:系统测试并进行完善33-36学时:系统验收及答辩参考资料1、 arm3000实验指导书2、 基于arm的嵌入式系统设计实验与实践教程,清华大学出版社,2011. 3、 嵌入式系统开发原理与实践,清华大学出版社,2005.4、 ucos-ii电子版书1. 题目 电子点菜器2. 系统简介 本次课程设计的系统是电子点菜器,它运行的环境是博创up-netarm3000实验台,主要使用的是该实验台上的lcd模块和触摸屏模块。 该系统实现功能如下:(1)实现正常显示欢迎界面、菜品选择界面以及菜品编辑界面;(2)在选择菜品界面实现用单击进行菜品信息查看和系统操作,用双击进行菜品选择;(3)在编辑界面实现查看被选择过的菜品信息,可通过删除选择过的菜品达到让用户实现对菜品重新编辑的目的,并且此界面可以和选择菜品界面相互跳转达到让用户重新选择菜品的目的。(4)实现将用户选择菜品的信息通过串口传送到显示器,及时反馈信息给后台。(5)数码数码管显示已点菜的总价。(6)键盘按键点菜、翻页、查看所有已点菜品的信息等。3. 系统设计3.1 系统目标按照本次所选的课程设计的题目,我们小组要实现的是一个电子点菜器,我们首先分析了该电子点菜器的功能。按照其将要实现电子点菜的功能,我们首先确定了我们将要用到的是arm试验台的lcd模块和触摸屏模块,再根据我们在系统中要实现菜品信息和订单的显示,我们确定了要使用文本框控件及按钮控件,这涉及到ucos-ii系统的使用。按照之前的分析,我们首先选取了exp22电子画板的工程,以此为基础进行了接下来的系统设计。我们对于该电子点菜器设计了三个界面,第一个是欢迎界面,主要显示的是一张背景图片,顾客点击这个界面就会进入到点菜界面。在点菜界面中,主要有三个部分,它们分别是六张菜品图片、五个控制按键和一个信息显示的文本框控件。六张菜品图片是对应六道菜,顾客通过单击图片可以在文件框中显示菜品的信息,双击图片表示选择了对应的菜品,并在文本框给出提示信息。五个控制控制按键分别为查看上一页菜品、提交订单、查看订单、返回初始界面和查看下一页菜品。第三个界面是订单信息界面,其左侧是菜品的列表,点击相应的菜品在右侧就会显示该菜品的数量、价格及总价。3.2 系统的体系结构设计针对以上的总体目标,综合考虑硬件环境和实现方法,我们将系统的体系结构分为4个不同的层次:硬件层、功能层、软件层、中间层。整个设计需要完成在不同的层次上完成不同的设计要求。硬件层:选择博创up-netarm3000实验平台。功能层:在这一层上要实现电子点菜的应用代码、算法实现等,我们组选择了博创up-netarm3000的硬件实验平台,那么主要工作就主要集中在这一层次上,因为其他的层次已经由硬件平台的提供商基本实现了。软件层:提供用户图形几口、实现多任务调度管理,本设计是基于uc/os这一嵌入式实时操作系统实现的。中间层:硬件抽象层和板级支持包,这一般由硬件平台提供商实现。如果选择从头设计一个俄罗斯方块游戏,自己去实现硬件体系结构,还是需要考虑这一部分的,但我们组的设计不需要这一部分。3.3 系统的工作流程 明确了功能层是我们这次课程设计的主要完成对象后,我们对系统的工作流程进行了讨论,在综合考虑使用情况后,我们将系统的流程分为:系统初始化、绘制系统图形界面、判断消息类型、消息处理和最后的返回结束界面。 实验程序设计流程图 如图1 所示图 1 实验程序设计流程图由于这个结构图比较成熟,我们只需按照自己的功能在进行需求的添加和删除即可,当系统初始化完成之后,通过判断用户给出的消息类型,即可进行不同的处理程序,当完成处理后在显示界面显示处理结果即可。 3.4 各模块设计 3.4.1触摸屏查看菜品信息及点菜 设计思想是让lcd 显示屏每页显示六道菜,并包含上下页翻页键和点菜完毕确认键,所以在触摸屏上安排了九个区间的触摸功能recta .left=0; rectb .left=0;recta .top=0; rectb .top=32;recta .right=320; rectb .right=320;recta .bottom=30; rectb .bottom=62;依次类推,对于触摸屏区间的划分,只要确定两点左上方的坐标和右下方的坐标就可确定该区间在触摸屏上的范围。对于该九个区间的控制既可触摸控制也可采用数字小键盘进行操作,这两者其中任何一个动作都会对点菜产生影响,这通过switch (pmsg-message)语句来选择判断。点击查看菜品信息;双击则“点”此菜品.定义菜品及价格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_pict12=1,2,8,_,3,7, , ,b,m,p,0;char dj_pict112=1,2,8,_,3,5, , ,b,m,p,0;char dj_pict212=1,2,8,_,3,6, , ,b,m,p,0;char bmpnamelogo112=0,0,0,_,0,1, , ,b,m,p,0; char bmpnamelogo212=0,0,0,_,0,2, , ,b,m,p,0;char bmpnamelogo312=0,0,0,_,0,3, , ,b,m,p,0; char bmpnamelogo412=0,0,0,_,0,4, , ,b,m,p,0; char bmpnamelogo512=0,0,0,_,0,5, , ,b,m,p,0; char bmpnamelogo612=0,0,0,_,0,6, , ,b,m,p,0;以上是图片的命名格式为bmp格式,并且命名6道菜 定义屏幕图片触摸屏坐标 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 .top=64;rectc .right=320;rectc .bottom=94;.(省略)3.4.1.1触屏单击查看此菜品信息 case osm_touch_screen: uart_printf(osm_touch_screenn); mode=tchscr_getosxy2(&x, &y); if(mode=tchscr_action_click)touch_position.x=x;touch_position.y=y;uart_printf(tchscr_action_clickn);uart_printf(touch_position.x=%dn,touch_position.x);uart_printf(touch_position.y=%dn,touch_position.y);if(isinrect2(precta, ptouch_position) uart_printf(an); if(pagenum=1) createtext(1,recttext); break; else if(pagenum=2) createtext(7,recttext); break; 3.4.1.2触屏双击选择此菜品if(mode=tchscr_action_dbclick) touch_position.x=x; touch_position.y=y; uart_printf(tchscr_action_dbclickn); uart_printf(touch_position.x=%dn,touch_position.x); uart_printf(touch_position.y=%dn,touch_position.y); /对recta到rectf的每个矩形进行检测 /进行createtext2,也就是显示you orderd dish1之类的。 /并且进行数量的相加,输出每种菜品的已点的数量 if(isinrect2(precta, ptouch_position) uart_printf(aaaaaaaaaaan); if(pagenum=1) createtext2(1,recttext); total = 0;numcount0+; uart_printf(num1=%dn,numcount0); for(k=0;k10;k+) total=total+numcountk*unit_pricek; showled(total); break; 3.4.2.键盘输入数字点菜 case osm_key:表示有键盘操作时系统应作出的反应,系统通过mykey=getkey2()得到键盘输入的值( 与定义的数组keyboard_map相对应),再根据不同的键值进行相对应的操作。 if(mykey = 1) uart_printf(dish1 for how many pieces?n); /显示菜品价格 uart_printf(price:%dn,unit_pricemykey-1); ipieces = getkey2(); /输入点的份数 createtext2(1,recttext); total = 0; numcount0 = ipieces; uart_printf(num1=%dn,numcount0); /输出点的份数 for(k=0;k9)/键值大于9显示十位 writesdio(zlg7289_cmd_data0|1);/发送十位数据 writesdio(unsigned char)(t/10%10); delay(1);if(t99)writesdio(zlg7289_cmd_data0|2);/发送十位数据 writesdio(unsigned char)(t/100%10); delay(1); if(t999) .(省略)4.系统实现 在本次系统实现的过程中,所要做到的就是实现触摸屏点菜和键盘点菜功能,并且实现计算所点菜的总价格,在led灯上显示所点菜的总价格。4.1初始化界面/*事件定义*/os_event *nand_rw_sem; /nand_flash读写控制权旗语/and 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,&err);/ ossempost(uart_rw_sem);/int main(void)armtargetinit(); /开发板初始化 zlg7289_reset();/zlg7289复位osinit(); /操作系统初始化uhalr_resetmmu();/复位mmulcd_init(); /初始化lcd模块lcd_printf(lcd initialization is okn);/向液晶屏输出数据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);/ 创建系统任务osaddtask_init();/创建系统附加任务lcd_printf(starting ucos-ii.n);lcd_printf(entering graph mode.n);lcd_changemode(dspgramode);/变lcd显示模式为文本模式initrtc();/初始化系统时钟nand_rw_sem=ossemcreate(1); /创建nand-flash读写控制权旗语,初值为1满足互斥条件/osstart();/操作系统任务调度开始/不会执行到这里return 0;u32 getkey2()/*/*0-11 1-2 3-184-1 5-9 6-177-0 8-8 9-16num-4 /-12 *-20- - 21 + - 24 enter-26del-19*/*从*顺时针到del计数,12开始,规定0为17*/char keyboard_map=7,4,1,0,10,0,0,0,8,5,2,17,0,0,0,0,9,6,3,16,12,13,0,0,14,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; /64,键值映射表*/u16 key;while(1) delay(2000);while(rpdatg&(0x10);/有键按下key=zlg7289_readkey();/得到按键扫描码if(key=64)/按键值有效key=keyboard_mapkey;/通过键盘映射表得到按键值uart_printf(n%d,key);break;delay(2000);return key;4.2 获得触摸点坐标及触摸动作u32 tchscr_getosxy2(int *x, int *y)/获得触摸点坐标并返回触摸动作static u32 mode=0;static int oldx,oldy;int i,j;for(;)if(mode!=tchscr_action_down) & (mode!=tchscr_action_move)if(!tchscr_ispennotdown)/有触摸动作tchscr_getscrxy(x, y);/得到触摸点坐标for(i=0;i40;i+)if(tchscr_ispennotdown)/抬起break;delay(100);if(i40)/在规定的双击时间之内抬起,检测是不是及时按下for(i=0;i60;i+)if(!tchscr_ispennotdown) if (i10) i=60;break;/如果单击后很短时间内按下,不视为双击mode=tchscr_action_dbclick;for(j=0;j4 |abs( oldy-*y)4)/有移动动作mode=tchscr_action_move;break;delay(50);oldx=*x;oldy=*y;return mode;4.3主任务函数main_taskuart_printf(这是01号桌);/消息循环for(;)pmsg=waitmessage(0); /等待消息switch(pmsg-message)case osm_key:/uart_printf(%d,pmsg-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, 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数据 /setwndctrlfocus(null, id_maintextctrl);/将焦点移到文本框中 settextctrltext(ptextctrl, str,true);/设置文本框内容 /exio_8255a_ctrl=0x80; /exio_8255a_portc=0xff;ostaskcreate(dynamic_display_task, (void *)0, (os_st*)&dynamic_display_task_stackstacksize*8-1, 4.4触摸屏控制点菜的代码实现 if(mode=tchscr_action_dbclick) /触屏双击选择此菜品 touch_position.x=x; touch_position.y=y; uart_printf(tchscr_action_dbclickn); uart_printf(touch_position.x=%dn,touch_position.x); uart_printf(touch_position.y=%dn,touch_position.y); /对recta到rectf的每个矩形进行检测 /进行createtext2,也就是显示you orderd dish1之类的。 /并且进行数量的相加,输出每种菜品的已点的数量 if(isinrect2(precta, ptouch_position) /所点击的菜品位置 uart_printf(aaaaaaaaaaan); if(pagenum=1) createtext2(1,recttext); total = 0;numcount0+; uart_printf(num1=%dn,numcount0); for(k=0;k10;k+) total=total+numcountk*unit_pricek; showled(total); break; 4.5键盘控制点菜的代码实现 case osm_key: mykey=getkey2(); uart_printf(nosm_keyn); if(mykey = 1 | mykey = 2 | mykey = 3 | mykey = 4 | mykey = 5 | mykey = 6 ) if(pagenum = 2) clearscreen(); showbmp(pdc,dj_pict,0,0); /图片显示的地点可以自行决定,与画的矩形框范围相匹配 showbmp(pdc,dj_pict1,16,20); showbmp(pdc,dj_pict2,116,20); showbmp(pdc,dj_pict3,216,20); showbmp(pdc,dj_pict4,16,100); showbmp(pdc,dj_pict5,116,100); showbmp(pdc,dj_pict6,216,100);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年广西壮族自治区贵港市医疗三严三基理论考试模拟试题及答案
- 2024年《服装缝纫工、裁剪工》岗位从业资格证理论及技术知识考试题与答案
- 汽车电气技术试题及答案
- 6万吨工业级混合油项目可行性研究报告模板-立项拿地
- 2025关于上海市的房屋租赁合同
- 2025年:探寻民间借款合同的真相
- 2025金华小学教材购买合同
- 2025设备租赁合同的签订与违约索赔
- 2025简易二手店铺转让合同范本下载
- 2025汽车维修合同简易版范本
- 室间隔缺损教学查房
- 2024年《档案法》知识竞赛100题及答案
- 传奇辅助脚本
- 孕产妇健康知识宣传栏
- 等高线地形图的判读的说课课件
- 部委管理制度
- 动车组随车机械师-动车组随车机械师作业标准
- 硬膜外血肿护理课件
- 农村饮水安全巩固提升
- 哺乳期乳房内化脓介绍演示培训课件
- 卵巢过度刺激综合征(OHSS)
评论
0/150
提交评论