版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE34分类号密级UDC编号本科毕业论文(设计)题目电子点菜系统 院(系)专业年级学生姓名学号指导教师二○一○年五月华中师范大学学位论文原创性声明本人郑重声明:所呈交的学位论文是本人在导师指导下独立进行研究工作所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。学位论文作者签名:日期:年月日.学位论文版权使用授权书本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权省级优秀学士学位论文评选机构将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于1、保密□,在_____年解密后适用本授权书。2、不保密□。(请在以上相应方框内打“√”)学位论文作者签名:日期:年月日导师签名:日期:年月日目录内容摘要………………………1关键词………………………1Abstract………………………1KeyWords……………………11.系统概述与设计原理……………………21.1该系统概述………21.2系统框图…………21.3系统设计原理……………………32.硬件电路设计与计算……………………42.1AT89C51部分………42.224C1024总线部分…………………72.3液晶显和键盘矩阵部示部分………83.系统设计流程……………113.1硬件部分……………113.2软件部分……………124.小结………………………31参考文献………………………32致谢…………33内容摘要:本电子点菜系统采用AT89C51单片机控制,处理数据并驱动液晶屏来实现对数据的现实。主要过程如下:利用键盘输入对菜号的选择,然后将选择菜号,传送给单片机进行数据处理,从24C1024存储芯片中提取菜名数据信息,并通过液晶屏将提取菜名数据信息显示出来,最后通过串口传输到电脑上面。关键词:AT89C51单片机24C1024存储芯片12864液晶屏键盘矩阵Abstract:Electronicorderingdevice,thekeyis24C1024andAT89C51twochips,which24C1024usedtostoreallthefood'sinformation,throughtheAT89C51,theinformationwillbetransmittedtotheLCDmenu.However,theyneedcustomerstochoosegooddishes,themenuwillbeautomaticallystoredintheAT89C51,andthencanbedirectlyconnectedtothecomputerthroughtheserialportwillbetransferredtothedatabasemenu,store,anddisplayandprintitout.TheAT89S52ismainlyusedtocontrolKeywords:AT89C51Microcontroller24C1024memorychips12864LCDKeyboardmatrix1系统概述与设计原理1.1该系统概述随着人们的生活水平提高,餐饮业的发展也越来越迅猛。对于人满为患的酒店来说,确保快速、准确的点单是十分必要的,这就需要科学技术做坚强的后盾。在这种情况下,电子点菜系统便应运而生,该系统是一款应用于中大型餐厅,方便顾客和服务员点菜的系统。它打破了传统点菜的方式,顾客只需通过手中小巧的电子点菜器就可以随意点到自己需要的菜肴,并且方便酒店随时刷新菜谱,为消费者提供最新的美食信息。电子点菜系统不仅满足了现代人对快节奏的需要,而且时尚、新颖。相信使用电子点菜系统的酒店肯定备受消费者的青睐。电子点菜系统应用于中大型酒店,无需传统菜单及服务生,顾客只需使用桌上提供的电子点菜器就可以随意挑选自己想吃的菜品,精致小巧的点菜器配上适合眼睛感官视觉的四行中文液晶显示器,免去了您频繁翻阅传统菜单的烦恼。用单片机技术设计、制造的点菜器控制系统,具有集成度高、功能强、体积小、速度快、存储量大、指令丰富,抗干扰性强,性能价格比高,通用性好,推广范围大,工作可靠,指示准确,易于匹配,使用寿命长,标准化系数高等一系列优势和特点。1.2系统框图串口包括:账目管理,编号表,菜谱,信息配置串口包括:账目管理,编号表,菜谱,信息配置烧录烧录存储窗体控制显示调用菜单串口1.3系统设计原理十二个按键式键盘矩阵,是让顾客可以方便选择菜名,同时可以输入桌号。一个上翻和下翻键方便顾客浏览更多的菜系,一个确定键确认顾客点的菜肴,还有一个按键是选择。在电子点菜器上,主要是24C1024和AT89C51两块芯片,其中24C1024用来存储所有菜名信息,通过AT89C51,将菜谱信息传输给液晶显示。但顾客选择好自己需要的菜品后,菜单将自动存储到AT89C51中,再可以通过串口与电脑直接相连,将菜单传输到数据库中进行存储,并显示、打印出来。而AT89C51主要是用来控制24C1024与液晶之间数据传输,液晶显示部分以及串口通讯部分。是整块板的核心部分。他是通过C在顾客点菜过程中,顾客可以通过字母按键对菜单进行分类,找出符合自己口味的菜品类。若顾客还想点到固定的菜肴,可以直接通过输入菜名拼音首字母,即可获取菜肴名。全部点完按完成键,上方的中文液晶屏将清晰显示谢谢惠顾和请输入桌号等信息,顾客只需控制按键就可以点到自己所需的菜肴,既方便,又省事。点菜完成后,服务生可以通过电子点菜器上的串口传输点菜信息到总服务台上的电脑中,电脑再对信息加以分类存储、打印,这样避免了传统点菜的手写误差,也方便顾客结账和餐厅管理。2硬件电路设计与计算2.1AT89C51单片机2.1.1描述AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4Kbytes的快速可擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51产品指令系统,片内置通用8位中央处理器(CPU)和flish存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。AT89C51提供以下标准功能:4K字节flish闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。2.1.2电路图引脚功能说明:Vcc:电源电压。GND:地。P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复位口。作为输出口用时,每位能吸收电流的方式驱动8个逻辑门电路,对端口写“1”可作为高阻抗输入端用。P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可做熟出口。做输出口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(Iil)。P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部地山拉电阻把端口拉到高电平,此时可作为输出口,作输出口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(Iil)。P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,他们被内部上拉电阻拉高并可作为输出口。做输出端时,被外部拉低的P3口将用上拉电阻输出电流(Iil)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表:端口引脚第二功能P3.0rxd(串行输入口)P3.1txd(串行输出口)P3.2^int0(外中断0)P3.3^int1(外中断1)P3.4t0(定时/计数器0)P3.5t1(定时/计数器1)P3.6^WR(外部数据存储器写选通)P3.7^RD(外部数据存储器读选通)RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址所存允许)输出脉冲用于所存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。PSEN:程序存储允许(^PSEN)输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两个^PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的^PSEN信号不出现。EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000HFFFFH),EA端必须保持低电平(接地)。需注意的是;如果加密位LB1被编程,复位时内部会锁存EA端状态。XTAL1:振荡器反相放大器的及内部时钟发生器的输出端。XTAL2:振荡器反相放大器的输出端。P89C51特殊功能寄存器。2.224C1024部分(I2C总线技术)2.2.1I2C总线工作原理总线的构成及信号类型:I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。目前有很多半导体集成电路上都集成了I2C接口。带有I2C接口的单片机有:CYGNAL的C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外围器件如存储器、监控芯片等也提供I2C接口。2.2.2I2C总线操作I2C规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。控制字节:在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作。写操作:写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。读操作:读操作有三种基本操作:当前地址读、随机读和顺序读。图4给出的是顺序读的时序图。应当注意的是:最后一个读操作的第9个时钟周期不是“不关心”。为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。2.2.3在我这个作品中,由于单片机本身存储控件很小,所以24C1024芯片的主要作为一块存储芯片使用的。作用就是存储菜谱信息,用户操作按键选择在液晶屏上显示的菜名信息全部是通过读取24C1024芯片中的菜谱数据。同时24C1024芯片还要实时接收Csharp软件对菜谱的更新。2.312864液晶屏和键盘矩阵2.3.112864液晶屏简介带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864,
内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84行1616点阵的汉字.
也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。基本特性:1.低电源电压(VDD:+3.0--+5.5V2.显示分辨率:128×64点3.内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)4.内置128个16×8点阵字符5.2MHZ时钟频率6.显示方式:STN、半透、正显7.驱动方式:1/32DUTY,1/5BIAS7.视角方向:6点8.背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/109.通讯方式:串行、并口可选10.内置DC-DC转换电路,无需外加负压11.无需片选信号,简化软件设计12.工作温度:0℃-+55℃,存储温度:-20●忙标志:BFBF标志提供内部工作情况.BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0时,模块为准备状态,随时可接受外部指令和数据.利用STATUSRD指令,可以将BF读到DB7总线,从而检验模块之工作状态.●字型产生ROM(CGROM)字型产生ROM(CGROM)提供8192个此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAYON),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAYOFF)。DFF的状态是指令DISPLAYON/OFF和RST信号控制的。●显示数据RAM(DDRAM)模块内部显示数据RAM提供64×2个位元组的空间,最多可控制4行16字(64个字)的中文字型显示,当写入显示数据RAM时,可分别显示CGROM与CGRAM的字型;此模块可显示三种字型,分别是半角英数字型(16*8)、CGRAM字型及CGROM的中文字型,三种字型的选择,由在DDRAM中写入的编码选择,在0000H—0006H的编码中(其代码分别是0000、0002、0004、0006共4个)将选择CGRAM的自定义字型,02H—7FH的编码中将选择半角英数字的字型,至于A1以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140—D75F),GB(A1A0-F7FFH)。字型产生RAM(CGRAM)字型产生RAM提供图象定义(造字)功能,可以提供四组16×16点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到CGRAM中,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。●地址计数器AC地址计数器是用来贮存DDRAM/CGRAM之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写入DDRAM/CGRAM的值时,地址计数器的值就会自动加一,当RS为“0”时而R/W为“1”时,地址计数器的值会被读取到DB6——DB0中。●光标/闪烁控制电路此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定DDRAM中的光标或闪烁位置2.3.2液晶部分主要功能液晶部分主要就是显示功能。将按键对菜谱的操作显示出来,同时为了方便客人点菜,还要将客人点菜信息和消费情况显示出来供客人预览,等客人确定后在传送到Csharp软件中去。2.3.3键盘部分主要功能十二个按键式键盘矩阵,是让顾客可以方便选择菜名,同时可以输入桌号。一个上翻和一个下翻键方便顾客浏览更多的菜系,一个确定键确认顾客点的菜肴,还有一个按键是选择。顾客可以通过字母按键对菜单进行分类,找出符合自己口味的菜品类。若顾客还想点到固定的菜肴,可以直接通过输入菜名拼音首字母,即可获取菜肴名。12864液晶屏主要是显示作用,把在键盘上的种种操作都通过液晶屏显示出来,方便顾客使用。3.系统设计流程3.1硬件部分3.1.1硬件部分功能简介单片机硬件部分包括:键盘矩阵,12863液晶屏,24C1024存储芯片,AT89C51芯片。硬件功能:硬件部分包括电子点菜电路板和一个4*4的键盘矩阵,通过控制电路板上的按键通过单片机使液晶显示自己需要的信息,并保存在单片机中,还有MAX232串口驱动芯片用来驱动串口,然后就可以通过串口输入或输出信息,并保存到C#数据库中去。硬件部分还包含包括电子点菜器电路板的设计及焊接,24C1024芯片,AT89C51芯片,液晶,串口等部分。其中液晶显示上我选择的是分部显示的原则,就是将我想显示的信息预先存储在我选好的位置上,不同按键按下触发不同内容显示在液晶上,还有个难点就是要将使用者所选择的菜记录下来,我原本的设想是想把所选择的菜名和菜价用一个数组了,可8052的存储空间太小如果点的太多就根本无法存储。于是我想到了另一种办法,就是记录菜名号的方法,我在C#发送菜谱时给每一道菜加上一个唯一固定编号一起放送到24C1024中去,当客人点菜时我就用一个数组来存储被点菜的编号,这样就大大降低了对存储空间的使用也提高了数据传输的安全性。在一个就是对菜的搜索问题,客人有时想点自己喜欢的菜,在点菜器中翻找太麻烦,他可以自己输入菜的索引从而寻找自己想要点的菜,做搜索在C#上很好做但在单片机上时很难做到的,因为单片机空间小,没有现成的控件使用,也不能针对数据库进行操作。我用的办法是将顾客所按按键记录下来当顾客点击查询时将得到按键索引和24C1024固定位置的到的菜名索引进行对比,如果相同就从24C1024的相应位置取出菜名和菜价显示在液晶上,这就要求数据存放要做严格要求.再就是每次点完都要记录菜价,这就要求再点菜我确定是必须同时记录所选菜在24C1024中存储的位置,再在这个基础上查询菜价进行记录保存,以便传输到C#进行保存和查询。3.1.2硬件电路图U2U1C4C3C1C2P1LCD1RP1U3通过串口与电脑相连相互传送数据。单片机通过P0口控制液晶显示,通过PI口控制24C1024芯片存储数据,通过串口将菜谱数据写入到24C1024芯片中去,同时调用24C1024芯片数据显示到液晶屏中。按键部分图略。按键选择菜名,客人最后确认后通过串口回传到PC中。3.2软件部分3.2.1软件功能简介Csharp软件程序后台软件部分:C#用于后台程序,酒店内部添加删除菜名及菜名索引,并将顾客所点菜显示在C#上;数据库应用与保存菜谱表,桌号消费统计(桌号,总消费,时间),查询视图。软件功能:包括C,C#,数据库三大部分。其中C用于收集菜谱和存储,用于顾客查找,浏览菜谱并对菜谱进行选择,查看和统计消费总价,并且回传顾客消费信息;C#用于后台程序,酒店内部添加删除菜名及菜名索引,并将顾客所点菜显示在C#上;数据库应用与保存菜谱表,桌号消费统计(桌号,总消费,时间),查询视图。在就是串口的数据收发,由于我在显示和搜索时对数据的格式有很高要求,所以在用串口传输数据时在传输前必须要对数据进行严格的格式转换。在接受数据时,因为接受的数据有很多种,所以在接受时要对数据进行判断然后再进行分类存储。3.2.2软件流程3.2.3软件主要代码Csharp后台控制部分:菜谱管理:namespace点菜{publicpartialclass菜谱管理_当前时间:Form{public菜谱管理_当前时间(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){Refresh_Phone_List("");}voidRefresh_Phone_List(stringWhereConditon){listView1.Items.Clear();dbClass1db1=newdbClass1();stringscond="select*from所有菜名信息视图";if(WhereConditon!="")scond+="where"+WhereConditon+"";DataTabledt=db1.GetRecords(scond);//向列表视图中添加所有的相关号码记录for(inti=0;i<dt.Rows.Count;i++){string[]subitem={dt.Rows[i]["菜名"].ToString(),dt.Rows[i]["类型"].ToString(),dt.Rows[i]["时价"].ToString(),};listView1.Items.Add(newListViewItem(subitem));}}stringstr="provider=microsoft.jet.oledb.4.0;datasource=菜谱管理.mdb";privatevoidbutton1_添加_Click(objectsender,EventArgse){dbClass1db1=newdbClass1();菜谱修改newform=new菜谱修改();if(newform.ShowDialog()==DialogResult.OK){OleDbConnectioncon=newOleDbConnection(str);OleDbCommandcmd=con.CreateCommand();cmd.CommandText="insertinto菜谱(分类号,菜名,时价,菜名缩写)values('"+newform.cmh+"','"+newform.caiming+"','"+newform.shijia+"','"+newform.caimingsuoxie+"')";con.Open();cmd.ExecuteNonQuery();con.Close();Form1_Load(sender,e);}}privatevoidbutton_删除_Click(objectsender,EventArgse){for(inti=listView1.SelectedItems.Count-1;i>=0;i--){OleDbConnectioncon=newOleDbConnection(str);OleDbCommandcmd=con.CreateCommand();cmd.CommandText="deletefrom菜谱where菜名='"+listView1.SelectedItems[i].Text+"'";con.Open();cmd.ExecuteNonQuery();con.Close();}listView1.Items.Clear();Form1_Load(sender,e);}privatevoidbutton1_Click(objectsender,EventArgse){if(listView1.SelectedItems.Count==1){菜谱修改cform=new菜谱修改();cform.caiming=listView1.SelectedItems[0].SubItems[0].Text;cform.shijia=Convert.ToInt16(listView1.SelectedItems[0].SubItems[2].Text);if(cform.ShowDialog()==DialogResult.OK){OleDbConnectioncon=newOleDbConnection(str);OleDbCommandcmd=con.CreateCommand();cmd.CommandText="update菜谱set时价='"+cform.shijia+"'where菜名='"+listView1.SelectedItems[0].SubItems[0].Text+"'";con.Open();cmd.ExecuteNonQuery();con.Close();listView1.Items.Clear();Form1_Load(sender,e);}}}privatevoidtextBox1_TextChanged(objectsender,EventArgse){Refresh_Phone_List("菜名缩写like'%"+textBox1.Text.Trim()+"%'");}privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse){if(MessageBox.Show("你真的要退出?","确认",MessageBoxButtons.OKCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button2)==DialogResult.Cancel){e.Cancel=true;}}privatevoidbutton_向点菜器写入菜谱_Click(objectsender,EventArgse){serialPort1.Open();//启用发送数据表记录到串口的函数Write_Menu_TO_IIC_24C1024();//serialPort1.Close();}boolSP_Ready=false;publicintj=0;intcount=0;voidWrite_Menu_TO_IIC_24C1024(){菜谱传输pass=new菜谱传输();pass.Show();intj;//1OleDbConnectionconn=newOleDbConnection("provider=microsoft.jet.oledb.4.0;datasource=菜谱管理.mdb");conn.Open();OleDbDataAdapterodapr=newOleDbDataAdapter("select*from菜谱orderby编号",conn);//3DataTabledt=newDataTable();odapr.Fill(dt);//4--访问所有表行,并发送串口.byte[]Buffer=newbyte[24];for(inti=0;i<dt.Rows.Count;i++){j=0;//序号,分类号,名称,价格,简记4-2-10-4-5byte[]f1=Encoding.Default.GetBytes(dt.Rows[i]["编号"].ToString());byte[]f3=Encoding.Default.GetBytes(dt.Rows[i]["菜名"].ToString());byte[]f4=Encoding.Default.GetBytes(dt.Rows[i]["时价"].ToString());byte[]f5=Encoding.Default.GetBytes(dt.Rows[i]["菜名缩写"].ToString());pass.cm=dt.Rows[i]["菜名"].ToString();//将字节缓冲全部清为空格.for(j=0;j<24;j++)Buffer[j]=0x20;for(j=0;j<f1.Length;j++)Buffer[j]=f1[j];for(j=0;j<f3.Length;j++)Buffer[j+4]=f3[j];for(j=0;j<f4.Length;j++)Buffer[j+14]=f4[j];for(j=0;j<f5.Length;j++)Buffer[j+18]=f5[j];Buffer[23]=(byte)('\r');//将所有字段内容分解到字节缓冲后,发送Buffer缓冲.serialPort1.Write(Buffer,0,Buffer.Length);SP_Ready=false;count+=1;//如串口未就绪则等待Application.DoEvents();while(!SP_Ready);}if(count==dt.Rows.Count){=count;serialPort1.WriteLine("-");pass.fm="完成发送";count=0;}}privatevoidserialPort1_DataReceived(objectsender,System.IO.Ports.SerialDataReceivedEventArgse){接受顾客消费信息guest=new接受顾客消费信息();已点菜diancai=new已点菜();stringrs=serialPort1.ReadLine();stringaccept=rs;string[]Recv_MCU_Menu_Info=accept.Split(newchar[]{'|'});if(rs=="Ready!"){SP_Ready=true;}if(Recv_MCU_Menu_Info[0]=="a"){guest.gu_infor=rs;serialPort1.Close();guest.ShowDialog();}if(Recv_MCU_Menu_Info[0]=="b"){diancai.C_NO_SET=rs;serialPort1.Close();diancai.ShowDialog();}}privatevoid添加ToolStripMenuItem_Click(objectsender,EventArgse){button1_添加_Click(sender,e);}privatevoid更新ToolStripMenuItem_Click(objectsender,EventArgse){button1_Click(sender,e);}privatevoid删除ToolStripMenuItem_Click(objectsender,EventArgse){button_删除_Click(sender,e);}privatevoid向点菜器写入菜谱ToolStripMenuItem_Click(objectsender,EventArgse){button_向点菜器写入菜谱_Click(sender,e);}privatevoid数据备份ToolStripMenuItem_Click(objectsender,EventArgse){备份compress=new备份();compress.ShowDialog();}privatevoid从点菜器接受菜单ToolStripMenuItem_Click(objectsender,EventArgse){if(!serialPort1.IsOpen)serialPort1.Open();serialPort1.WriteLine("+");}privatevoidbutton_向从点菜器接受菜单_Click(objectsender,EventArgse){向从点菜器接受菜单ToolStripMenuItem_Click(sender,e);}privatevoid接受点菜菜谱ToolStripMenuItem_Click(objectsender,EventArgse){serialPort1.Open();serialPort1.WriteLine("*");}privatevoidbutton2_Click(objectsender,EventArgse){接受点菜菜谱ToolStripMenuItem_Click(sender,e);}}}数据传输:namespace点菜{publicpartialclass菜谱传输:Form{public菜谱传输(){InitializeComponent();}publicintcn=0;publicstringcm,fm;privatevoid菜谱传输_Load(objectsender,EventArgse){}intt=0;privatevoidtimer1_Tick(objectsender,EventArgse){if(cn==0){t+=29;if(t>100)t=0;progressBar1.Value=t;textBox_菜名.Text=cm;}else{progressBar1.Visible=false;timer1.Enabled=false;timer2.Enabled=true;}}intx=0;privatevoidtimer2_Tick(objectsender,EventArgse){x++;textBox_菜名.Text=fm;if(x>2){timer2.Enabled=false;this.Close();}}}}C语言硬件控制部分:/*******************************************************************//**//*上下翻动菜名*//**//**//*******************************************************************/voidLCD_up_down(){ucharj,l=-1;if(KeyNo==9){P1=0x0F;while(P1!=0x0F); x--;g--;l=f;if(f==0) { g=2; LCD_Col--; f=2; } elsef--;}if(KeyNo==10){P1=0x0F;while(P1!=0x0F); x++; g++;l=f;if(f==2) { g=0; LCD_Col++; f=0; LCD=0; } else f++; } if(l!=-1) { lcd_wcmd(up_down[l]); for(j=0;j<2;j++) lcd_wdat(DIS6[j]); l=-1; }lcd_wcmd(up_down[f]);for(j=0;j<2;j++) lcd_wdat(DIS5[j]);}/************************************************************按键控制并显示按键************************************************************/voidKey_col_KeyNo(){if(KeyNo==9||KeyNo==10)LCD_up_down();else{ //如果是新按键 if(Pre_KeyNo!=KeyNo) { TR0=1; Pre_KeyNo=KeyNo; Inner_idx=0; t++; s++; } //否则按下的是同位按键 else { //短暂时间范围内的重复按键 if(tSpan<=40) { Inner_idx=(Inner_idx+1)%strlen(KeyPad_Chars[KeyNo]); } else//同一按键间隔超时(Timeout) { Inner_idx=0; t++; s++; } tSpan=0; } if(s>4) { for(i=0;i<5;i++) data_lcd[i]=DIS6[1]; s=-1; } delay(20); data_lcd[s]=KeyPad_Chars[KeyNo][Inner_idx]; //记录按键 if(x1==0) { lcd_wcmd(0x98); for(i=0;i<5;i++)lcd_wdat(data_lcd[i]); x1=0; } else { lcd_wcmd(0x8e); for(i=0;i<5;i++)lcd_wdat(data_lcd[i]); } }}////从24C1024接收多字节//ucharRecString(ucharSlave,ulongMem_address,uchar*Buffer,ucharN){uchari,page; //读取时slave设为0xa1,写时为0xa0uintaddr16;//一片24C1024的空间为128K,地址位共17位,其最高位对应设备地址中的P0位page=(uchar)((Mem_address>>16)&0x00000001);page<<=1;//在设备地址后是16位的字地址addr16=(uint)(Mem_address&0x0000FFFF);Start();//发送器件地址(含页地址P0位)if(!SendByte(Slave|page))return(0);//先发高字节,后发低字节if(!SendByte((uchar)(addr16>>8)))return(0); if(!SendByte((uchar)(addr16)))return(0);Start();//器件地址(读)if(!SendByte(Slave|0x01))return(0);for(i=0;i<N-1;i++){//接收数据Buffer[i]=RecByte(); //发送应答位ACK();}//接收最后一位Buffer[N-1]=RecByte();//发送非应答NO_ACK();Stop();}////向24C1024写多字节//ucharWriteString(ucharSlave,ulongMem_address,uchar*Buffer,ucharN){uchari,page; //读取时slave设为0xa1,写时为0xa0uintaddr16;//一片24C1024的空间为128K,地址位共17位,其最高位对应设备地址中的P0位page=(uchar)((Mem_address>>16)&0x00000001);page<<=1;//在设备地址后是16位的字地址addr16=(uint)(Mem_address&0x0000FFFF);Start();//发送器件地址(含页地址P0位)if(!SendByte(Slave|page))return(0);//先发高字节,后发低字节if(!SendByte((uchar)(addr16>>8)))return(0); if(!SendByte((uchar)(addr16)))return(0);for(i=0;i<N;i++){//发送数据if(!SendByte(Buffer[i]))return0;}Stop();return1;}/************************************************************主函数************************************************************/voidmain(){P0=0xFF;P2=0xFF;IIC_24C1024_Init();IE=0x83;SCON=0x50;//串口方式1,允许接收TMOD=0x21;//T1工作于方式2PCON=0x00;//波特率不倍增TH1=TL1=0xFD;//BaudRate:960011.0592MHZES=1;//允许串口中断ES=1;//允许串口中断IP=0x01;//外部中断0设为高优先级TR1=1;//启动定时器TH0=-50000/256;TL0=-50000%256;delay(100); //上电,等待稳定 clr_screen();//液晶清屏lcd_init();//液晶的初始化 for(j=0;j<3;j++)//显示编号为1—3的菜名和菜价 { lcd_wcmd(up_down[j]+1);for(i=0;i<14;i++){lcd_wdat(DIS1[j][i]);delay(30); }}LCD_up_down();//扫描是否上下翻动菜谱 for(i=0;i<strlen(DIS3);i++) DIS3[i]='\0'; while(1){ P1=0xF0; if(P1!=0xF0) { Keys_Scan();//未按下按键等待 P1=0x0F; while(P1!=0x0F); } elsecontinue;//扫描键盘获取键序号KeyNo if(KeyNo<=10) Key_col_KeyNo(); else Key_col_List(); RecString(0xa0,0x00000000+23*x,DIS4,4);//记录菜名号 if(LCD==0) //未搜索时菜名依次显示 { for(j=0+3*LCD_Col;j<3+3*LCD_Col;j++) { RecString(0xa0,0x00000004+23*j,DIS1[j-3*LCD_Col],14); lcd_wcmd(up_down[j]+1);for(i=0;i<14;i++){lcd_wdat(DIS1[j-3*LCD_Col][i]);delay(30); }} } }}4.小结通过自行研究的电子点菜系统是一款基于8051单片机系列的电子产品。它集成了单片机,C#,数据库三方面的软件设计,实现了单片机与C#之间的通讯。使用24C1024扩展8052的存储范围,而8051则为24C1024数据的传输提供指令。该作品集成的三大软件模块为硬件提供核心支持。硬件部分主要元件有:四行中文液晶,AT89S52,24C1024,MAX232,按键等。参考文献:[1]/index.asp?gclid=CMD6lf2ax6ECFQ3Ebwod03YD-g[2]/qitasheji/dianzidianqi/1514.html[3]/part/57433_ATMEL_24C1024.html[4]/%E8%A5%BF_%E5%9C%9F_%E7%93%A6/blog/item/0c0ad67fc6544a0029388a[5]刘前进、王蒙,Delphi数据库编程技术,北京:人民邮电出版社,2002[6]/pdf1yuikjh78y899/2006-1-14/8727/TC14433_.pdf[7]何佳.89C51单片机论文英语原文及译文.西安邮电学院毕业设计论文,2007:17~33.[8]王小科.C#从入门到精通.清华大学出版社,2008.9.1.[9]Xior.
X5043/X5045
CPU
Supervisor
with
4K
SPI
EEPROM[M].
Xicor
Inc,
2001,1~20[10]Dallas
Semiconductor
Ltd.
Understanding
and
Using
Cyclic
Redundancy
Checks
with
Dallas
iButton
Products.
Dallas
Semiconductor
Products
Data
Sheet,2001[11]E.Musson
Electric
motor
protector
development
[J]
International
Journal
of
Production
Research,1998.06[12]PHILIPSdevelopedtwo-wireserialbusforconnectingthemicrocontrolleranditsperipheralequipmentproducedinthe80's致谢在论文完成之际,我首先衷心感谢老师在整个毕业课题设计期间给予我无微不至的关怀和细心的指导。老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我受益匪浅。无论在理论上还是在实践中,都给与我很大的帮助在设计过程中老师为我提出了许多宝贵的意见和建议,使我受益非浅。在论文即将完成之际,谨向张老师表示深深的谢意。同时也要感谢很多同学,在我编程的时间里,经常犯上些逻辑上的错误,正是由于他们对我的帮助,并且对我做的系统提出许多很好意见,使我的系统不断的完善,在编程的时候也越编越顺,以致最后能圆满完工,真的十分感谢大家。衷心感谢所有关心,帮助过我的师长,朋友和同学们,使我在大学三年的求学经历更加美好,终生难忘。基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度中国GNSS芯片行业研究报告:支撑物联网、车联网应用落地的核心器件
- 2024年度互联网金融服务合同:金融科技公司与用户之间的互联网金融服务协议
- 2024年度品牌合作合同主要条款
- 《机械设备道路运输安全合同》
- 2024年度工厂智能化改造合同
- 2024年度企业生产线改造合同
- 2024年度公寓工程消防验收合同
- 2024年度版权转让合同标的转让价款与权益变更
- 2024年度特许经营合同许可范围详细描述及经营规范具体规定
- 2024年度品牌授权使用合同(含区域限制)
- 2024-2030年中国风电运维行业发展现状规划分析报告
- 统编版(2024)七年级上册道德与法治第三单元《珍爱我们的生命》测试卷(含答案)
- 2024年秋季学期新苏科版七年级上册数学课件 4.3 用一元一次方程解决问题
- 职业生涯规划大赛公务员
- 产前检查的操作评分标准
- 礼修于心 仪养于行 课件-2023-2024学年高一上学期文明礼仪在心中养成教育主题班会
- 解除终止劳动合同备案登记表
- 实用针灸学-经络养生与康复-暨南大学中国大学mooc课后章节答案期末考试题库2023年
- 入团志愿书(2016版本)(可编辑打印标准A4) (1)
- 车务段三线建设经验材料
- 粉煤灰资源化综合利用新技术
评论
0/150
提交评论