基于單片機設(shè)計的電子點餐系統(tǒng)-畢業(yè)論文_第1頁
基于單片機設(shè)計的電子點餐系統(tǒng)-畢業(yè)論文_第2頁
基于單片機設(shè)計的電子點餐系統(tǒng)-畢業(yè)論文_第3頁
基于單片機設(shè)計的電子點餐系統(tǒng)-畢業(yè)論文_第4頁
基于單片機設(shè)計的電子點餐系統(tǒng)-畢業(yè)論文_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

PAGEPAGE34分類號密級UDC編號本科畢業(yè)論文(設(shè)計)題目電子點菜系統(tǒng) 院(系)專業(yè)年級學(xué)生姓名學(xué)號指導(dǎo)教師二○一○年五月華中師范大學(xué)學(xué)位論文原創(chuàng)性聲明本人鄭重聲明:所呈交的學(xué)位論文是本人在導(dǎo)師指導(dǎo)下獨立進行研究工作所取得的研究成果。除了文中特別加以標注引用的內(nèi)容外,本論文不包含任何其他個人或集體已經(jīng)發(fā)表或撰寫的成果作品。本人完全意識到本聲明的法律后果由本人承擔。學(xué)位論文作者簽名:日期:年月日.學(xué)位論文版權(quán)使用授權(quán)書本學(xué)位論文作者完全了解學(xué)校有關(guān)保障、使用學(xué)位論文的規(guī)定,同意學(xué)校保留并向有關(guān)學(xué)位論文管理部門或機構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán)省級優(yōu)秀學(xué)士學(xué)位論文評選機構(gòu)將本學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。本學(xué)位論文屬于1、保密□,在_____年解密后適用本授權(quán)書。2、不保密□。(請在以上相應(yīng)方框內(nèi)打“√”)學(xué)位論文作者簽名:日期:年月日導(dǎo)師簽名:日期:年月日目錄內(nèi)容摘要………………………1關(guān)鍵詞………………………1Abstract………………………1KeyWords……………………11.系統(tǒng)概述與設(shè)計原理……………………21.1該系統(tǒng)概述………21.2系統(tǒng)框圖…………21.3系統(tǒng)設(shè)計原理……………………32.硬件電路設(shè)計與計算……………………42.1AT89C51部分………42.224C1024總線部分…………………72.3液晶顯和鍵盤矩陣部示部分………83.系統(tǒng)設(shè)計流程……………113.1硬件部分……………113.2軟件部分……………124.小結(jié)………………………31參考文獻………………………32致謝…………33內(nèi)容摘要:本電子點菜系統(tǒng)采用AT89C51單片機控制,處理數(shù)據(jù)并驅(qū)動液晶屏來實現(xiàn)對數(shù)據(jù)的現(xiàn)實。主要過程如下:利用鍵盤輸入對菜號的選擇,然后將選擇菜號,傳送給單片機進行數(shù)據(jù)處理,從24C1024存儲芯片中提取菜名數(shù)據(jù)信息,并通過液晶屏將提取菜名數(shù)據(jù)信息顯示出來,最后通過串口傳輸?shù)诫娔X上面。關(guān)鍵詞:AT89C51單片機24C1024存儲芯片12864液晶屏鍵盤矩陣Abstract:Electronicorderingdevice,thekeyis24C1024andAT89C51twochips,which24C1024usedtostoreallthefood'sinformation,throughtheAT89C51,theinformationwillbetransmittedtotheLCDmenu.However,theyneedcustomerstochoosegooddishes,themenuwillbeautomaticallystoredintheAT89C51,andthencanbedirectlyconnectedtothecomputerthroughtheserialportwillbetransferredtothedatabasemenu,store,anddisplayandprintitout.TheAT89S52ismainlyusedtocontrolKeywords:AT89C51Microcontroller24C1024memorychips12864LCDKeyboardmatrix1系統(tǒng)概述與設(shè)計原理1.1該系統(tǒng)概述隨著人們的生活水平提高,餐飲業(yè)的發(fā)展也越來越迅猛。對于人滿為患的酒店來說,確??焖?、準確的點單是十分必要的,這就需要科學(xué)技術(shù)做堅強的后盾。在這種情況下,電子點菜系統(tǒng)便應(yīng)運而生,該系統(tǒng)是一款應(yīng)用于中大型餐廳,方便顧客和服務(wù)員點菜的系統(tǒng)。它打破了傳統(tǒng)點菜的方式,顧客只需通過手中小巧的電子點菜器就可以隨意點到自己需要的菜肴,并且方便酒店隨時刷新菜譜,為消費者提供最新的美食信息。電子點菜系統(tǒng)不僅滿足了現(xiàn)代人對快節(jié)奏的需要,而且時尚、新穎。相信使用電子點菜系統(tǒng)的酒店肯定備受消費者的青睞。電子點菜系統(tǒng)應(yīng)用于中大型酒店,無需傳統(tǒng)菜單及服務(wù)生,顧客只需使用桌上提供的電子點菜器就可以隨意挑選自己想吃的菜品,精致小巧的點菜器配上適合眼睛感官視覺的四行中文液晶顯示器,免去了您頻繁翻閱傳統(tǒng)菜單的煩惱。用單片機技術(shù)設(shè)計、制造的點菜器控制系統(tǒng),具有集成度高、功能強、體積小、速度快、存儲量大、指令豐富,抗干擾性強,性能價格比高,通用性好,推廣范圍大,工作可靠,指示準確,易于匹配,使用壽命長,標準化系數(shù)高等一系列優(yōu)勢和特點。1.2系統(tǒng)框圖串口包括:賬目管理,編號表,菜譜,信息配置串口包括:賬目管理,編號表,菜譜,信息配置燒錄燒錄存儲窗體控制顯示調(diào)用菜單串口1.3系統(tǒng)設(shè)計原理十二個按鍵式鍵盤矩陣,是讓顧客可以方便選擇菜名,同時可以輸入桌號。一個上翻和下翻鍵方便顧客瀏覽更多的菜系,一個確定鍵確認顧客點的菜肴,還有一個按鍵是選擇。在電子點菜器上,主要是24C1024和AT89C51兩塊芯片,其中24C1024用來存儲所有菜名信息,通過AT89C51,將菜譜信息傳輸給液晶顯示。但顧客選擇好自己需要的菜品后,菜單將自動存儲到AT89C51中,再可以通過串口與電腦直接相連,將菜單傳輸?shù)綌?shù)據(jù)庫中進行存儲,并顯示、打印出來。而AT89C51主要是用來控制24C1024與液晶之間數(shù)據(jù)傳輸,液晶顯示部分以及串口通訊部分。是整塊板的核心部分。他是通過C在顧客點菜過程中,顧客可以通過字母按鍵對菜單進行分類,找出符合自己口味的菜品類。若顧客還想點到固定的菜肴,可以直接通過輸入菜名拼音首字母,即可獲取菜肴名。全部點完按完成鍵,上方的中文液晶屏將清晰顯示謝謝惠顧和請輸入桌號等信息,顧客只需控制按鍵就可以點到自己所需的菜肴,既方便,又省事。點菜完成后,服務(wù)生可以通過電子點菜器上的串口傳輸點菜信息到總服務(wù)臺上的電腦中,電腦再對信息加以分類存儲、打印,這樣避免了傳統(tǒng)點菜的手寫誤差,也方便顧客結(jié)賬和餐廳管理。2硬件電路設(shè)計與計算2.1AT89C51單片機2.1.1描述AT89C51是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS8位單片機,片內(nèi)含4Kbytes的快速可擦寫的只讀程序存儲器(PEROM)和128bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準MCS-51產(chǎn)品指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和flish存儲單元,功能強大AT89C51單片機可為您提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。AT89C51提供以下標準功能:4K字節(jié)flish閃速存儲器,128字節(jié)內(nèi)部RAM,32個I/O口線,兩個16位定時/計數(shù)器,一個5向量兩級中斷結(jié)構(gòu),一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路。同時,AT89C51可降至0HZ的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時/計數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復(fù)位。2.1.2電路圖引腳功能說明:Vcc:電源電壓。GND:地。P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)位口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8個邏輯門電路,對端口寫“1”可作為高阻抗輸入端用。P1口:P1是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可做熟出口。做輸出口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(Iil)。P2口:P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部地山拉電阻把端口拉到高電平,此時可作為輸出口,作輸出口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(Iil)。P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,他們被內(nèi)部上拉電阻拉高并可作為輸出口。做輸出端時,被外部拉低的P3口將用上拉電阻輸出電流(Iil)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如下表:端口引腳第二功能P3.0rxd(串行輸入口)P3.1txd(串行輸出口)P3.2^int0(外中斷0)P3.3^int1(外中斷1)P3.4t0(定時/計數(shù)器0)P3.5t1(定時/計數(shù)器1)P3.6^WR(外部數(shù)據(jù)存儲器寫選通)P3.7^RD(外部數(shù)據(jù)存儲器讀選通)RST:復(fù)位輸入。當振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位。ALE/PROG:當訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址所存允許)輸出脈沖用于所存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE仍以時鐘振蕩頻率的1/6輸出固定的正脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。PSEN:程序存儲允許(^PSEN)輸出是外部程序存儲器的讀選通信號,當AT89C51由外部程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩個^PSEN有效,即輸出兩個脈沖。在此期間,當訪問外部數(shù)據(jù)存儲器,這兩次有效的^PSEN信號不出現(xiàn)。EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000HFFFFH),EA端必須保持低電平(接地)。需注意的是;如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。XTAL1:振蕩器反相放大器的及內(nèi)部時鐘發(fā)生器的輸出端。XTAL2:振蕩器反相放大器的輸出端。P89C51特殊功能寄存器。2.224C1024部分(I2C總線技術(shù))2.2.1I2C總線工作原理總線的構(gòu)成及信號類型:I2C總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進行雙向傳送,最高傳送速率100kbps。各種被控制電路均并聯(lián)在這條總線上,但就像電話機一樣只有撥通各自的號碼才能工作,所以每個電路和模塊都有唯一的地址,在信息的傳輸過程中,I2C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能。CPU發(fā)出的控制信號分為地址碼和控制量兩部分,地址碼用來選址,即接通需要控制的電路,確定控制的種類;控制量決定該調(diào)整的類別(如對比度、亮度等)及需要調(diào)整的量。這樣,各控制電路雖然掛在同一條總線上,卻彼此獨立,互不相關(guān)。I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號,它們分別是:開始信號、結(jié)束信號和應(yīng)答信號。開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。結(jié)束信號:SCL為高電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。應(yīng)答信號:接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個信號后,等待受控單元發(fā)出一個應(yīng)答信號,CPU接收到應(yīng)答信號后,根據(jù)實際情況作出是否繼續(xù)傳遞信號的判斷。若未收到應(yīng)答信號,由判斷為受控單元出現(xiàn)故障。這些信號中,起始信號是必需的,結(jié)束信號和應(yīng)答信號,都可以不要。目前有很多半導(dǎo)體集成電路上都集成了I2C接口。帶有I2C接口的單片機有:CYGNAL的C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外圍器件如存儲器、監(jiān)控芯片等也提供I2C接口。2.2.2I2C總線操作I2C規(guī)程運用主/從雙向通訊。器件發(fā)送數(shù)據(jù)到總線上,則定義為發(fā)送器,器件接收數(shù)據(jù)則定義為接收器。主器件和從器件都可以工作于接收和發(fā)送狀態(tài)??偩€必須由主器件(通常為微控制器)控制,主器件產(chǎn)生串行時鐘(SCL)控制總線的傳輸方向,并產(chǎn)生起始和停止條件。SDA線上的數(shù)據(jù)狀態(tài)僅在SCL為低電平的期間才能改變,SCL為高電平的期間,SDA狀態(tài)的改變被用來表示起始和停止條件。控制字節(jié):在起始條件之后,必須是器件的控制字節(jié),其中高四位為器件類型識別符(不同的芯片類型有不同的定義,EEPROM一般應(yīng)為1010),接著三位為片選,最后一位為讀寫位,當為1時為讀操作,為0時為寫操作。寫操作:寫操作分為字節(jié)寫和頁面寫兩種操作,對于頁面寫根據(jù)芯片的一次裝載的字節(jié)不同有所不同。讀操作:讀操作有三種基本操作:當前地址讀、隨機讀和順序讀。圖4給出的是順序讀的時序圖。應(yīng)當注意的是:最后一個讀操作的第9個時鐘周期不是“不關(guān)心”。為了結(jié)束讀操作,主機必須在第9個周期間發(fā)出停止條件或者在第9個時鐘周期內(nèi)保持SDA為高電平、然后發(fā)出停止條件。2.2.3在我這個作品中,由于單片機本身存儲控件很小,所以24C1024芯片的主要作為一塊存儲芯片使用的。作用就是存儲菜譜信息,用戶操作按鍵選擇在液晶屏上顯示的菜名信息全部是通過讀取24C1024芯片中的菜譜數(shù)據(jù)。同時24C1024芯片還要實時接收Csharp軟件對菜譜的更新。2.312864液晶屏和鍵盤矩陣2.3.112864液晶屏簡介帶中文字庫的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊;其顯示分辨率為12864,

內(nèi)置8192個16*16點漢字,和128個16*8點ASCII字符集.利用該模塊靈活的接口方式和簡單、方便的操作指令,可構(gòu)成全中文人機交互圖形界面。可以顯示84行1616點陣的漢字.

也可完成圖形顯示.低電壓低功耗是其又一顯著特點。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡潔得多,且該模塊的價格也略低于相同點陣的圖形液晶模塊。基本特性:1.低電源電壓(VDD:+3.0--+5.5V2.顯示分辨率:128×64點3.內(nèi)置漢字字庫,提供8192個16×16點陣漢字(簡繁體可選)4.內(nèi)置128個16×8點陣字符5.2MHZ時鐘頻率6.顯示方式:STN、半透、正顯7.驅(qū)動方式:1/32DUTY,1/5BIAS7.視角方向:6點8.背光方式:側(cè)部高亮白色LED,功耗僅為普通LED的1/5—1/109.通訊方式:串行、并口可選10.內(nèi)置DC-DC轉(zhuǎn)換電路,無需外加負壓11.無需片選信號,簡化軟件設(shè)計12.工作溫度:0℃-+55℃,存儲溫度:-20●忙標志:BFBF標志提供內(nèi)部工作情況.BF=1表示模塊在進行內(nèi)部操作,此時模塊不接受外部指令和數(shù)據(jù).BF=0時,模塊為準備狀態(tài),隨時可接受外部指令和數(shù)據(jù).利用STATUSRD指令,可以將BF讀到DB7總線,從而檢驗?zāi)K之工作狀態(tài).●字型產(chǎn)生ROM(CGROM)字型產(chǎn)生ROM(CGROM)提供8192個此觸發(fā)器是用于模塊屏幕顯示開和關(guān)的控制。DFF=1為開顯示(DISPLAYON),DDRAM的內(nèi)容就顯示在屏幕上,DFF=0為關(guān)顯示(DISPLAYOFF)。DFF的狀態(tài)是指令DISPLAYON/OFF和RST信號控制的?!耧@示數(shù)據(jù)RAM(DDRAM)模塊內(nèi)部顯示數(shù)據(jù)RAM提供64×2個位元組的空間,最多可控制4行16字(64個字)的中文字型顯示,當寫入顯示數(shù)據(jù)RAM時,可分別顯示CGROM與CGRAM的字型;此模塊可顯示三種字型,分別是半角英數(shù)字型(16*8)、CGRAM字型及CGROM的中文字型,三種字型的選擇,由在DDRAM中寫入的編碼選擇,在0000H—0006H的編碼中(其代碼分別是0000、0002、0004、0006共4個)將選擇CGRAM的自定義字型,02H—7FH的編碼中將選擇半角英數(shù)字的字型,至于A1以上的編碼將自動的結(jié)合下一個位元組,組成兩個位元組的編碼形成中文字型的編碼BIG5(A140—D75F),GB(A1A0-F7FFH)。字型產(chǎn)生RAM(CGRAM)字型產(chǎn)生RAM提供圖象定義(造字)功能,可以提供四組16×16點的自定義圖象空間,使用者可以將內(nèi)部字型沒有提供的圖象字型自行定義到CGRAM中,便可和CGROM中的定義一樣地通過DDRAM顯示在屏幕中。●地址計數(shù)器AC地址計數(shù)器是用來貯存DDRAM/CGRAM之一的地址,它可由設(shè)定指令暫存器來改變,之后只要讀取或是寫入DDRAM/CGRAM的值時,地址計數(shù)器的值就會自動加一,當RS為“0”時而R/W為“1”時,地址計數(shù)器的值會被讀取到DB6——DB0中?!窆鈽?閃爍控制電路此模塊提供硬體光標及閃爍控制電路,由地址計數(shù)器的值來指定DDRAM中的光標或閃爍位置2.3.2液晶部分主要功能液晶部分主要就是顯示功能。將按鍵對菜譜的操作顯示出來,同時為了方便客人點菜,還要將客人點菜信息和消費情況顯示出來供客人預(yù)覽,等客人確定后在傳送到Csharp軟件中去。2.3.3鍵盤部分主要功能十二個按鍵式鍵盤矩陣,是讓顧客可以方便選擇菜名,同時可以輸入桌號。一個上翻和一個下翻鍵方便顧客瀏覽更多的菜系,一個確定鍵確認顧客點的菜肴,還有一個按鍵是選擇。顧客可以通過字母按鍵對菜單進行分類,找出符合自己口味的菜品類。若顧客還想點到固定的菜肴,可以直接通過輸入菜名拼音首字母,即可獲取菜肴名。12864液晶屏主要是顯示作用,把在鍵盤上的種種操作都通過液晶屏顯示出來,方便顧客使用。3.系統(tǒng)設(shè)計流程3.1硬件部分3.1.1硬件部分功能簡介單片機硬件部分包括:鍵盤矩陣,12863液晶屏,24C1024存儲芯片,AT89C51芯片。硬件功能:硬件部分包括電子點菜電路板和一個4*4的鍵盤矩陣,通過控制電路板上的按鍵通過單片機使液晶顯示自己需要的信息,并保存在單片機中,還有MAX232串口驅(qū)動芯片用來驅(qū)動串口,然后就可以通過串口輸入或輸出信息,并保存到C#數(shù)據(jù)庫中去。硬件部分還包含包括電子點菜器電路板的設(shè)計及焊接,24C1024芯片,AT89C51芯片,液晶,串口等部分。其中液晶顯示上我選擇的是分部顯示的原則,就是將我想顯示的信息預(yù)先存儲在我選好的位置上,不同按鍵按下觸發(fā)不同內(nèi)容顯示在液晶上,還有個難點就是要將使用者所選擇的菜記錄下來,我原本的設(shè)想是想把所選擇的菜名和菜價用一個數(shù)組了,可8052的存儲空間太小如果點的太多就根本無法存儲。于是我想到了另一種辦法,就是記錄菜名號的方法,我在C#發(fā)送菜譜時給每一道菜加上一個唯一固定編號一起放送到24C1024中去,當客人點菜時我就用一個數(shù)組來存儲被點菜的編號,這樣就大大降低了對存儲空間的使用也提高了數(shù)據(jù)傳輸?shù)陌踩?。在一個就是對菜的搜索問題,客人有時想點自己喜歡的菜,在點菜器中翻找太麻煩,他可以自己輸入菜的索引從而尋找自己想要點的菜,做搜索在C#上很好做但在單片機上時很難做到的,因為單片機空間小,沒有現(xiàn)成的控件使用,也不能針對數(shù)據(jù)庫進行操作。我用的辦法是將顧客所按按鍵記錄下來當顧客點擊查詢時將得到按鍵索引和24C1024固定位置的到的菜名索引進行對比,如果相同就從24C1024的相應(yīng)位置取出菜名和菜價顯示在液晶上,這就要求數(shù)據(jù)存放要做嚴格要求.再就是每次點完都要記錄菜價,這就要求再點菜我確定是必須同時記錄所選菜在24C1024中存儲的位置,再在這個基礎(chǔ)上查詢菜價進行記錄保存,以便傳輸?shù)紺#進行保存和查詢。3.1.2硬件電路圖U2U1C4C3C1C2P1LCD1RP1U3通過串口與電腦相連相互傳送數(shù)據(jù)。單片機通過P0口控制液晶顯示,通過PI口控制24C1024芯片存儲數(shù)據(jù),通過串口將菜譜數(shù)據(jù)寫入到24C1024芯片中去,同時調(diào)用24C1024芯片數(shù)據(jù)顯示到液晶屏中。按鍵部分圖略。按鍵選擇菜名,客人最后確認后通過串口回傳到PC中。3.2軟件部分3.2.1軟件功能簡介Csharp軟件程序后臺軟件部分:C#用于后臺程序,酒店內(nèi)部添加刪除菜名及菜名索引,并將顧客所點菜顯示在C#上;數(shù)據(jù)庫應(yīng)用與保存菜譜表,桌號消費統(tǒng)計(桌號,總消費,時間),查詢視圖。軟件功能:包括C,C#,數(shù)據(jù)庫三大部分。其中C用于收集菜譜和存儲,用于顧客查找,瀏覽菜譜并對菜譜進行選擇,查看和統(tǒng)計消費總價,并且回傳顧客消費信息;C#用于后臺程序,酒店內(nèi)部添加刪除菜名及菜名索引,并將顧客所點菜顯示在C#上;數(shù)據(jù)庫應(yīng)用與保存菜譜表,桌號消費統(tǒng)計(桌號,總消費,時間),查詢視圖。在就是串口的數(shù)據(jù)收發(fā),由于我在顯示和搜索時對數(shù)據(jù)的格式有很高要求,所以在用串口傳輸數(shù)據(jù)時在傳輸前必須要對數(shù)據(jù)進行嚴格的格式轉(zhuǎn)換。在接受數(shù)據(jù)時,因為接受的數(shù)據(jù)有很多種,所以在接受時要對數(shù)據(jù)進行判斷然后再進行分類存儲。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);//向列表視圖中添加所有的相關(guān)號碼記錄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();//啟用發(fā)送數(shù)據(jù)表記錄到串口的函數(shù)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--訪問所有表行,并發(fā)送串口.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();//將字節(jié)緩沖全部清為空格.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');//將所有字段內(nèi)容分解到字節(jié)緩沖后,發(fā)送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="完成發(fā)送";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數(shù)據(jù)備份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);}}}數(shù)據(jù)傳輸: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 { //短暫時間范圍內(nèi)的重復(fù)按鍵 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接收多字節(jié)//ucharRecString(ucharSlave,ulongMem_address,uchar*Buffer,ucharN){uchari,page; //讀取時slave設(shè)為0xa1,寫時為0xa0uintaddr16;//一片24C1024的空間為128K,地址位共17位,其最高位對應(yīng)設(shè)備地址中的P0位page=(uchar)((Mem_address>>16)&0x00000001);page<<=1;//在設(shè)備地址后是16位的字地址addr16=(uint)(Mem_address&0x0000FFFF);Start();//發(fā)送器件地址(含頁地址P0位)if(!SendByte(Slave|page))return(0);//先發(fā)高字節(jié),后發(fā)低字節(jié)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++){//接收數(shù)據(jù)Buffer[i]=RecByte(); //發(fā)送應(yīng)答位ACK();}//接收最后一位Buffer[N-1]=RecByte();//發(fā)送非應(yīng)答NO_ACK();Stop();}////向24C1024寫多字節(jié)//ucharWriteString(ucharSlave,ulongMem_address,uchar*Buffer,ucharN){uchari,page; //讀取時slave設(shè)為0xa1,寫時為0xa0uintaddr16;//一片24C1024的空間為128K,地址位共17位,其最高位對應(yīng)設(shè)備地址中的P0位page=(uchar)((Mem_address>>16)&0x00000001);page<<=1;//在設(shè)備地址后是16位的字地址addr16=(uint)(Mem_address&0x0000FFFF);Start();//發(fā)送器件地址(含頁地址P0位)if(!SendByte(Slave|page))return(0);//先發(fā)高字節(jié),后發(fā)低字節(jié)if(!SendByte((uchar)(addr16>>8)))return(0); if(!SendByte((uchar)(addr16)))return(0);for(i=0;i<N;i++){//發(fā)送數(shù)據(jù)if(!SendByte(Buffer[i]))return0;}Stop();return1;}/************************************************************主函數(shù)************************************************************/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設(shè)為高優(yōu)先級TR1=1;//啟動定時器TH0=-50000/256;TL0=-50000%256;delay(100); //上電,等待穩(wěn)定 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.小結(jié)通過自行研究的電子點菜系統(tǒng)是一款基于8051單片機系列的電子產(chǎn)品。它集成了單片機,C#,數(shù)據(jù)庫三方面的軟件設(shè)計,實現(xiàn)了單片機與C#之間的通訊。使用24C1024擴展8052的存儲范圍,而8051則為24C1024數(shù)據(jù)的傳輸提供指令。該作品集成的三大軟件模塊為硬件提供核心支持。硬件部分主要元件有:四行中文液晶,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數(shù)據(jù)庫編程技術(shù),北京:人民郵電出版社,2002[6]/pdf1yuikjh78y899/2006-1-14/8727/TC14433_.pdf[7]何佳.89C51單片機論文英語原文及譯文.西安郵電學(xué)院畢業(yè)設(shè)計論文,2007:17~33.[8]王小科.C#從入門到精通.清華大學(xué)出版社,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致謝在論文完成之際,我首先衷心感謝老師在整個畢業(yè)課題設(shè)計期間給予我無微不至的關(guān)懷和細心的指導(dǎo)。老師認真負責的工作態(tài)度,嚴謹?shù)闹螌W(xué)精神和深厚的理論水平都使我受益匪淺。無論在理論上還是在實踐中,都給與我很大的幫助在設(shè)計過程中老師為我提出了許多寶貴的意見和建議,使我受益非淺。在論文即將完成之際,謹向張老師表示深深的謝意。同時也要感謝很多同學(xué),在我編程的時間里,經(jīng)常犯上些邏輯上的錯誤,正是由于他們對我的幫助,并且對我做的系統(tǒng)提出許多很好意見,使我的系統(tǒng)不斷的完善,在編程的時候也越編越順,以致最后能圓滿完工,真的十分感謝大家。衷心感謝所有關(guān)心,幫助過我的師長,朋友和同學(xué)們,使我在大學(xué)三年的求學(xué)經(jīng)歷更加美好,終生難忘?;贑8051F單片機直流電動機反饋控制系統(tǒng)的設(shè)計與研究基于單片機的嵌入式Web服務(wù)器的研究MOTOROLA單片機MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機溫度控制系統(tǒng)的研制基于MCS-51系列單片機的通用控制模塊的研究基于單片機實現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機控制的二級倒立擺系統(tǒng)的研究基

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論