收藏 分销(赏)

毕业论文uc-gui点菜系统.doc

上传人:可**** 文档编号:2139015 上传时间:2024-05-18 格式:DOC 页数:55 大小:246.50KB 下载积分:10 金币
下载 相关 举报
毕业论文uc-gui点菜系统.doc_第1页
第1页 / 共55页
毕业论文uc-gui点菜系统.doc_第2页
第2页 / 共55页


点击查看更多>>
资源描述
郑州轻工业学院 课 程 设 计 任 务 书 题目 基于ucgui的点菜系统设计 专业、班级 电子信息科学与技术09-1班 学号 姓名 主要内容、基本要求、主要参考文献等: 1. 课程说明 随着信息化技术的不断发展,电子菜单开始出现在一些高档餐厅,与传统菜单相比,电子菜单可以节省制作成本和人力成本,并能实现无线下单。可以随需变更菜品信息,灵活进行菜品促销,帮助饭店有效提升品牌形象和服务水平,增加菜品销量,提高营业收益。其强大的后台管理功能,让饭店管理者运筹帷幄,省心省力。 本次课程设计利用GUI函数制作一个简单的电子菜单,实现基本的查阅、点菜、菜价计算、付账等功能,旨在熟悉掌握C语言和对系统函数的灵活运用。 2、主要内容 (1)掌握LCD显示图形的方法,掌握LCD显示字符的方法。 (2) 了解汉字库的组织方式,汉字显示的原理,学习LCD的显示原理和控制办法。 (3) 完成点菜系统的点菜,菜价计算,账单打印功能。 3、基本要求 (1) 编写图形显示函数,在LCD上显示图形 (2) 编写HZK16读取函数,在LCD上显示汉字 (3) 菜单程序设计,实现菜单的选择操作。 4.功能说明 此菜单共有16道菜,在首界面显示4道菜的信息,报告菜名、价格、份数,还可以增加、减少或退选某道菜,相应地其份数会发生改变。通过点击上下翻页三角键,可以查看其余12道菜(可循环),选中某道菜之后,菜名会变红色,起提示作用。点击“OK”键,说明点菜结束,进入第二界面。 第二界面有菜单的简单显示,包括菜名、价格和份数,还有合计花费。另外,增加了“修改”和“重选”两个功能键,点击“修改”键,系统会跳转到第一界面,对点菜情况进行修改;点击“重选”键,会出现一个提示画面:真的要重选吗,点击“确定”,则系统跳回第一界面,重新点菜;点击“取消”,提示画面消失。若点击“详细菜单”键,系统跳转到第三界面。 第三界面罗列了每道菜的菜名、价格、份数,还有花费情况,如果顾客没有异议,点击“确认付账”后,会出现一个提示画面:谢谢光临,欢迎下次再来,系统将在 秒后跳回主菜单。计时3秒钟。如果点击“返回”键,则系统回到第二界面。 5.程序及其注释 #include "GUI.h" #include "GUI_Protected.h" #include <stdio.h> #include <string.h> #include <math.h> #define countof(Array) (sizeof(Array)/sizeof(Array[0])) const GUI_POINT aPoints0[]={ {0,-15}, {30,15}, {-30,15} }; const GUI_POINT aPoints1[]={ {-30,-15}, {30,-15}, {0,15} }; int s,ms,ms1,ss; int number[17]={0};//份数 int change=0;//界面变换标志位 int cnt=0; int flag=0;//第二界面重选标志位 int time=0;//time用来控制显示第一界面静止的部分 int flag21=0;//第二界面切换到第一界面标志位 int time1=0;//控制显示第二界面静止的部分 int time2=0;//控制显示第二界面重选确认窗口 int time3=0;//控制显示第三界面静止的部分 int flag3=0;//控制显示第三界面确认付账 int flag31=0; int cancel=0;//第二界面重选取消标志位 GUI_PID_STATE TouchState; char menu[17][100]={"麻婆豆腐","辣子鸡丁","东坡肘子","豆瓣鲫鱼","口袋豆腐","酸菜干鱼","夫妻肺片", "蚂蚁上树","叫化香鸡","茄汁鱼卷","鱼香肉丝","干煸冬笋","魔芋烧鸭","锅贴鱼片","麻辣肉丁","鱼香茄饼"};//菜名 int price[17]={12,16,30,28,10,25,35,8,50,14,20,8,46,32,16,15};//菜价 int count_time() { ms=(GUI_GetTime()-ms1)/100; ms%=10; if(ms==9) { ss++; GUI_Delay(100); } s=3-ss; return s; } int count_number(int x)//计算位数 { int y=0; if(x==0) return 1; while(x>0) {x=x/10; y++; } return y; } void display1()//第一界面显示函数 { int i; GUI_SetBkColor(GUI_YELLOW); if(time==0) { time=1; GUI_SetFont(&GUI_FontHZ24);//声明字库 GUI_SetColor(GUI_RED); GUI_DispStringHCenterAt("欢迎光临二毛菜馆",150,10); GUI_SetFont(&GUI_FontHZ16);//声明字库 GUI_DispStringHCenterAt("菜名",30,40); GUI_DispStringHCenterAt("价格",115,40); GUI_DispStringHCenterAt("选项",195,40); GUI_DispStringHCenterAt("份数",290,40); GUI_SetColor(GUI_BLACK); GUI_SetColor(GUI_BLUE); LCD_L0_FillRect(141,59,174,76); LCD_L0_FillRect(141,89,174,106); LCD_L0_FillRect(141,119,174,136); LCD_L0_FillRect(141,149,174,166); GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_WHITE); GUI_DispStringHCenterAt("增加",158,60); GUI_DispStringHCenterAt("增加",158,90); GUI_DispStringHCenterAt("增加",158,120); GUI_DispStringHCenterAt("增加",158,150); LCD_L0_FillRect(181,59,214,76); LCD_L0_FillRect(181,89,214,106); LCD_L0_FillRect(181,119,214,136); LCD_L0_FillRect(181,149,214,166); GUI_DispStringHCenterAt("减少",198,60); GUI_DispStringHCenterAt("减少",198,90); GUI_DispStringHCenterAt("减少",198,120); GUI_DispStringHCenterAt("减少",198,150); LCD_L0_FillRect(221,59,254,76); LCD_L0_FillRect(221,89,254,106); LCD_L0_FillRect(221,119,254,136); LCD_L0_FillRect(221,149,254,166); GUI_DispStringHCenterAt("退选",238,60); GUI_DispStringHCenterAt("退选",238,90); GUI_DispStringHCenterAt("退选",238,120); GUI_DispStringHCenterAt("退选",238,150); GUI_SetColor(GUI_BLUE); LCD_L0_FillRect(271,59,300,76); LCD_L0_FillRect(271,89,300,106); LCD_L0_FillRect(271,119,300,136); LCD_L0_FillRect(271,149,300,166); GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_WHITE); GUI_DispStringAt("份",298,60); GUI_DispStringAt("份",298,90); GUI_DispStringAt("份",298,120); GUI_DispStringAt("份",298,150); GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_BLUE); LCD_L0_FillRect(260,180,310,220); GUI_FillPolygon(aPoints0,countof(aPoints0),40,205); GUI_FillPolygon(aPoints1,countof(aPoints1),110,205); GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_WHITE); GUI_DispStringHCenterAt("OK",295,190); GUI_SetFont(&GUI_FontHZ24);//声明字库 GUI_SetBkColor(GUI_YELLOW); GUI_SetColor(GUI_BLACK); GUI_DispStringHCenterAt("第",180,190); GUI_DispStringHCenterAt("页",235,190); } GUI_SetFont(&GUI_FontHZ24);//声明字库 GUI_SetColor(GUI_BLACK); GUI_DispDecAt(cnt+1,200,190,1); GUI_SetFont(&GUI_FontHZ16);//声明字库 GUI_SetColor(GUI_YELLOW); for(i=0;i<4;i++) { GUI_SetColor(GUI_BLACK); if(number[cnt*4+i]>0) GUI_SetColor(GUI_RED); GUI_DispStringHCenterAt(menu[cnt*4+i],40,60+30*i);//显示菜名 GUI_SetColor(GUI_BLACK); GUI_DispDecAt(price[cnt*4+i],105,60+30*i,2);//显示价格 GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_WHITE); GUI_DispDecAt(number[cnt*4+i],275,60+30*i,2);//显示份数 GUI_SetBkColor(GUI_YELLOW); } if(GUI_TOUCH_GetState(&TouchState)) { if((TouchState.x>10)&&(TouchState.x<70)&&(TouchState.y>190)&&(TouchState.y<220))//上一页 { cnt--; if(cnt<0) cnt=3; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>80)&&(TouchState.x<140)&&(TouchState.y>190)&&(TouchState.y<220))//下一页 { cnt++; if(cnt>3) cnt=0; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>260)&&(TouchState.x<310)&&(TouchState.y>180)&&(TouchState.y<220))//OK { change=1; time1=0; time2=0; cancel=0; GUI_SetBkColor(GUI_YELLOW); GUI_Clear(); while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>141)&&(TouchState.x<174)&&(TouchState.y>59)&&(TouchState.y<76))//增加1 { number[cnt*4]++; if(number[cnt*4]>99) number[cnt*4]=99; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>141)&&(TouchState.x<174)&&(TouchState.y>89)&&(TouchState.y<106))//增加2 { number[cnt*4+1]++; if(number[cnt*4+1]>99) number[cnt*4+1]=99; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>141)&&(TouchState.x<174)&&(TouchState.y>119)&&(TouchState.y<136))//增加3 { number[cnt*4+2]++; if(number[cnt*4+2]>99) number[cnt*4+2]=99; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>141)&&(TouchState.x<174)&&(TouchState.y>149)&&(TouchState.y<166))//增加4 { number[cnt*4+3]++; if(number[cnt*4+3]>99) number[cnt*4+3]=99; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>181)&&(TouchState.x<241)&&(TouchState.y>59)&&(TouchState.y<76))//减少1 { number[cnt*4]--; if(number[cnt*4]<0) number[cnt*4]=0; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>181)&&(TouchState.x<241)&&(TouchState.y>89)&&(TouchState.y<106))//减少2 { number[cnt*4+1]--; if(number[cnt*4+1]<0) number[cnt*4+1]=0; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>181)&&(TouchState.x<241)&&(TouchState.y>119)&&(TouchState.y<136))//减少3 { number[cnt*4+2]--; if(number[cnt*4+2]<0) number[cnt*4+2]=0; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>181)&&(TouchState.x<241)&&(TouchState.y>149)&&(TouchState.y<166))//减少4 { number[cnt*4+3]--; if(number[cnt*4+3]<0) number[cnt*4+3]=0; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>221)&&(TouchState.x<254)&&(TouchState.y>59)&&(TouchState.y<76))//退选1 { number[cnt*4]=0; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>221)&&(TouchState.x<254)&&(TouchState.y>89)&&(TouchState.y<106))//退选2 { number[cnt*4+1]=0; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>221)&&(TouchState.x<254)&&(TouchState.y>119)&&(TouchState.y<136))//退选3 { number[cnt*4+2]=0; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>221)&&(TouchState.x<254)&&(TouchState.y>149)&&(TouchState.y<166))//退选4 { number[cnt*4+3]=0; while(GUI_TOUCH_GetState(&TouchState)); } } } void display2()//第二界面显示函数 { int i,sum=0,r,count=0; for(i=0;i<16;i++) sum+=price[i]*number[i]; if(time1==0) { time1=1; GUI_SetColor(GUI_BLUE); LCD_L0_FillRect(170,10,230,40); LCD_L0_FillRect(250,10,310,40); LCD_L0_FillRect(160,210,280,240); LCD_L0_FillRect(20,210,140,240); GUI_SetFont(&GUI_FontHZ16);//声明字库 GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_WHITE); GUI_DispStringHCenterAt("修改",200,20); GUI_DispStringHCenterAt("重选",280,20); GUI_DispStringHCenterAt("合计",180,215); GUI_DispStringHCenterAt("详细菜单",80,215); GUI_DispDecAt(sum,215,215,count_number(sum)); GUI_DispStringHCenterAt("元",270,215); GUI_SetFont(&GUI_FontHZ24);//声明字库 GUI_SetBkColor(GUI_YELLOW); GUI_SetColor(GUI_BLACK); GUI_DispStringHCenterAt("您",20,20); GUI_DispStringHCenterAt("的",60,20); GUI_DispStringHCenterAt("帐",100,20); GUI_DispStringHCenterAt("单",140,20); } if(cancel==0) { cancel=1; r=40; for(i=0;i<16;i++) { GUI_SetFont(&GUI_FontHZ16);//声明字库 GUI_SetBkColor(GUI_YELLOW); GUI_SetColor(GUI_BLACK); if(number[i]>0) { if(50+count*20>190) { r=190;count=0;}//换列显示 GUI_DispStringHCenterAt(menu[i],r,50+count*20);//显示菜单 GUI_DispDecAt(number[i],r+40,50+count*20,2); GUI_DispStringHCenterAt("*",r+70,50+count*20); GUI_DispDecAt(price[i],r+75,50+count*20,2); count++; } } } if(flag==1) { if(time2==0) { time2=1; GUI_SetColor(GUI_RED); LCD_L0_FillRect(50,80,280,200); GUI_SetColor(GUI_BLACK); LCD_L0_FillRect(90,140,150,180); LCD_L0_FillRect(170,140,230,180); GUI_SetBkColor(GUI_RED); GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_FontHZ24);//声明字库 GUI_DispStringHCenterAt("真的要重选吗",160,110); GUI_SetBkColor(GUI_BLACK); GUI_DispStringHCenterAt("确定",120,150); GUI_DispStringHCenterAt("取消",200,150); } if(GUI_TOUCH_GetState(&TouchState)) { if((TouchState.x>90)&&(TouchState.x<150)&&(TouchState.y>140)&&(TouchState.y<180))//确定 { change=0; GUI_SetBkColor(GUI_YELLOW); GUI_Clear(); time=0; flag=0; for(i=0;i<16;i++) number[i]=0; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>170)&&(TouchState.x<230)&&(TouchState.y>140)&&(TouchState.y<180))//取消 { change=1; flag=0; time2=0; GUI_SetColor(GUI_YELLOW); LCD_L0_FillRect(50,80,280,200); r=40; for(i=0;i<16;i++) { GUI_SetFont(&GUI_FontHZ16);//声明字库 GUI_SetBkColor(GUI_YELLOW); GUI_SetColor(GUI_BLACK); if(number[i]>0) { if(50+count*20>190) { r=190;count=0;}//换列显示 GUI_DispStringHCenterAt(menu[i],r,50+count*20);//显示菜单 GUI_DispDecAt(number[i],r+40,50+count*20,2); GUI_DispStringHCenterAt("*",r+70,50+count*20); GUI_DispDecAt(price[i],r+75,50+count*20,2); count++; } } while(GUI_TOUCH_GetState(&TouchState)); } } } if(GUI_TOUCH_GetState(&TouchState)) { if((TouchState.x>170)&&(TouchState.x<230)&&(TouchState.y>10)&&(TouchState.y<40))//修改 { change=0; GUI_SetBkColor(GUI_YELLOW); GUI_Clear(); time=0; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>250)&&(TouchState.x<310)&&(TouchState.y>10)&&(TouchState.y<40))//重选 { flag=1; time2=0; while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>20)&&(TouchState.x<140)&&(TouchState.y>210)&&(TouchState.y<240))//详细菜单 { change=2; GUI_SetBkColor(GUI_YELLOW); GUI_Clear(); time3=0; while(GUI_TOUCH_GetState(&TouchState)); } } } void display3()//第三界面显示函数 { int r,count=0,i,sum; if(time3==0) { time3=1; GUI_SetColor(GUI_BLUE); LCD_L0_FillRect(20,200,140,240); LCD_L0_FillRect(180,200,300,240); GUI_SetFont(&GUI_FontHZ16);//声明字库 GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_WHITE); GUI_DispStringHCenterAt("确认付账",80,215); GUI_DispStringHCenterAt("返回",240,215); r=30; for(i=0;i<16;i++) { GUI_SetFont(&GUI_FontHZ12);//声明字库 GUI_SetBkColor(GUI_YELLOW); GUI_SetColor(GUI_BLACK); if(number[i]>0) { sum=number[i]*price[i]; if(50+count*20>190) { r=190;count=0;}//换列显示 GUI_DispStringHCenterAt(menu[i],r,10+count*20); GUI_DispDecAt(number[i],r+30,10+count*20,2); GUI_DispStringHCenterAt("*",r+55,10+count*20); GUI_DispDecAt(price[i],r+60,10+count*20,2); GUI_DispStringHCenterAt("=",r+90,10+count*20); GUI_DispDecAt(sum,r+100,10+count*20,count_number(sum)); count++; } } } if(flag3==1) { flag3=0; GUI_SetColor(GUI_GREEN); LCD_L0_FillRect(40,20,280,180); GUI_SetBkColor(GUI_GREEN); GUI_SetColor(GUI_RED); GUI_SetFont(&GUI_FontHZ24);//声明字库 GUI_DispStringHCenterAt("谢谢光临",155,30); GUI_DispStringHCenterAt("欢迎下次再来",155,70); GUI_DispStringAt("系统将在",80,110); GUI_DispStringAt("秒后",215,110); GUI_DispStringAt("跳回主菜单",90,150); } if(flag31==1) { if(count_time()>0) { GUI_DispDecAt(count_time(),190,110,1); } else if(count_time()==0) { GUI_DispDecAt(count_time(),190,110,1); change=0; time=0; flag31=0; ss=0; for(i=0;i<16;i++) number[i]=0; GUI_SetBkColor(GUI_YELLOW); GUI_Clear(); } } if(GUI_TOUCH_GetState(&TouchState)) { if((TouchState.x>20)&&(TouchState.x<140)&&(TouchState.y>200)&&(TouchState.y<240))//确认付账 { flag3=1; flag31=1; ss=0; ms1=GUI_GetTime(); while(GUI_TOUCH_GetState(&TouchState)); } if((TouchState.x>180)&&(TouchState.x<300)&&(TouchState.y>200)&&(TouchState.y<240))//返回 { change=1; time1=0; time2=0; cancel=0; GUI_SetBkColor(GUI_YELLOW); GUI_Clear(); while(GUI_TOUCH_GetState(&TouchState)); } } } void MainTask(void) { int count=0; GUI_Init(); GUI_SetBkColor(GUI_YELLOW); GUI_Clear(); while(1) { if(change==0) { display1();//显示第一界面 GUI_Delay(100); } else if(change==1) { display2();//显示第二界面 } else if(change==2) display3();//显示第三界面 } } 6.课程设计心得 通过本次课程设计,我切身感受到嵌入式系统的强大,而我所掌握的知识不及九牛一毛,一开始写程序的时候,比较中规中矩,仅仅完成了基本功能,而且对于一些按键的设计也有些瑕疵。后来,跟同学交流和上网查找资料,在原来的基础上,做了一些改进:界面规划得更加合理了,上下翻页键由原来的方框形设计成了三角形,这样界面显得更加人性化;另外,还增加了一些新的功能,如界面自动跳转功能等。在设计的过程中,当然出现了很多的问题,甚至有时候,不知道怎么去解决,但我还是一直坚持了下来,培养了我的耐性和严谨性,同时通过查阅资料,进一步锻炼了我的自学能力,让我学到了很多新的知识。 我觉得这个课程设计有两个关键点,一是设法使界面不闪,我们知道,当界面不停刷新的时候,会出现“闪动”现象,影响美观。那么怎么解决呢?我的方法是,找出静止的部分和动态的部分,对于前者,只需显示一次;对于后者,不停刷新显示,并且尽量设置更多的静态部分。当然,这样一来,程序势必会变得麻烦一些,可以看到,在程序里,我设置了不下于10
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服