版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 本科畢業(yè)論文(設(shè)計) </p><p> 題 目 電子點菜系統(tǒng) </p><p><b> 目 錄</b></p><p> 內(nèi)容摘要………………………………………………………………………1 </p><p> 關(guān) 鍵 詞…………………………………………………………………
2、……1 </p><p> Abstract………………………………………………………………………1 </p><p> Key Words ……………………………………………………………………1 </p><p> 1.系統(tǒng)概述與設(shè)計原理……………………………………………………2 </p><p> 1.1該系統(tǒng)概述 ………………
3、………………………………………2 </p><p> 1.2系統(tǒng)框圖 …………………………………………………………2 </p><p> 1.3系統(tǒng)設(shè)計原理 ……………………………………………………3 </p><p> 2.硬件電路設(shè)計與計算……………………………………………………4 </p><p> 2.1 AT89C51部
4、分………………………………………………………4 </p><p> 2.2 24C1024總線部分…………………………………………………7 </p><p> 2.3液晶顯和鍵盤矩陣部示部分………………………………………8 </p><p> 3.系統(tǒng)設(shè)計流程……………………………………………………………11</p><p> 3.1
5、硬件部分……………………………………………………………11</p><p> 3.2軟件部分……………………………………………………………12</p><p> 4. 小結(jié)………………………………………………………………………31</p><p> 參考文獻………………………………………………………………………32</p><p>
6、致 謝 …………………………………………………………………………33</p><p> 內(nèi)容摘要:本電子點菜系統(tǒng)采用AT89C51單片機控制,處理數(shù)據(jù)并驅(qū)動液晶屏來實現(xiàn)對數(shù)據(jù)的現(xiàn)實。主要過程如下:利用鍵盤輸入對菜號的選擇,然后將選擇菜號,傳送給單片機進行數(shù)據(jù)處理,從24C1024存儲芯片中提取菜名數(shù)據(jù)信息,并通過液晶屏將提取菜名數(shù)據(jù)信息顯示出來,最后通過串口傳輸?shù)诫娔X上面。</p><p&g
7、t; 關(guān) 鍵 詞:AT89C51單片機 24C1024存儲芯片 12864液晶屏 鍵盤矩陣</p><p> Abstract:Electronic ordering device, the key is 24 C1024 and AT89C51 two chips, which 24C1024 used to store all the food's information, through
8、the AT89C51, the information will be transmitted to the LCD menu. However, they need customers to choose good dishes, the menu will be automatically stored in the AT89C51, and then can be directly connected to the comput
9、er through the serial port will be transferred to the database menu, store, and display and print it out. The AT89S52 is mainly used to </p><p> Key words:AT89C51 Microcontroller 24C1024 memory chips 12864
10、 LCD Keyboard matrix</p><p> 1系統(tǒng)概述與設(shè)計原理</p><p><b> 1.1該系統(tǒng)概述</b></p><p> 隨著人們的生活水平提高,餐飲業(yè)的發(fā)展也越來越迅猛。對于人滿為患的酒店來說,確保快速、準(zhǔn)確的點單是十分必要的,這就需要科學(xué)技術(shù)做堅強的后盾。在這種情況下,電子點菜系統(tǒng)便應(yīng)運而生,該系統(tǒng)是
11、一款應(yīng)用于中大型餐廳,方便顧客和服務(wù)員點菜的系統(tǒng)。它打破了傳統(tǒng)點菜的方式,顧客只需通過手中小巧的電子點菜器就可以隨意點到自己需要的菜肴,并且方便酒店隨時刷新菜譜,為消費者提供最新的美食信息。電子點菜系統(tǒng)不僅滿足了現(xiàn)代人對快節(jié)奏的需要,而且時尚、新穎。相信使用電子點菜系統(tǒng)的酒店肯定備受消費者的青睞。</p><p> 電子點菜系統(tǒng)應(yīng)用于中大型酒店,無需傳統(tǒng)菜單及服務(wù)生,顧客只需使用桌上提供的電子點菜器就可以隨意挑
12、選自己想吃的菜品,精致小巧的點菜器配上適合眼睛感官視覺的四行中文液晶顯示器,免去了您頻繁翻閱傳統(tǒng)菜單的煩惱。</p><p> 用單片機技術(shù)設(shè)計、制造的點菜器控制系統(tǒng),具有集成度高、功能強、體積小、速度快、存儲量大、指令豐富,抗干擾性強,性能價格比高,通用性好,推廣范圍大,工作可靠,指示準(zhǔn)確,易于匹配,使用壽命長,標(biāo)準(zhǔn)化系數(shù)高等一系列優(yōu)勢和特點。</p><p><b> 1
13、.2 系統(tǒng)框圖</b></p><p><b> 1.3系統(tǒng)設(shè)計原理</b></p><p> 十二個按鍵式鍵盤矩陣,是讓顧客可以方便選擇菜名,同時可以輸入桌號。一個上翻和下翻鍵方便顧客瀏覽更多的菜系,一個確定鍵確認(rèn)顧客點的菜肴,還有一個按鍵是選擇。</p><p> 在電子點菜器上,主要是24 C1024和AT89C51兩
14、塊芯片,其中24C1024用來存儲所有菜名信息,通過AT89C51,將菜譜信息傳輸給液晶顯示。但顧客選擇好自己需要的菜品后,菜單將自動存儲到AT89C51中,再可以通過串口與電腦直接相連,將菜單傳輸?shù)綌?shù)據(jù)庫中進行存儲,并顯示、打印出來。而AT89C51主要是用來控制24 C1024與液晶之間數(shù)據(jù)傳輸,液晶顯示部分以及串口通訊部分。是整塊板的核心部分。他是通過C語言程序燒制進去的。</p><p> 在顧客點菜過
15、程中,顧客可以通過字母按鍵對菜單進行分類,找出符合自己口味的菜品類。若顧客還想點到固定的菜肴,可以直接通過輸入菜名拼音首字母,即可獲取菜肴名。</p><p> 全部點完按完成鍵,上方的中文液晶屏將清晰顯示謝謝惠顧和請輸入桌號等信息,顧客只需控制按鍵就可以點到自己所需的菜肴,既方便,又省事。點菜完成后,服務(wù)生可以通過電子點菜器上的串口傳輸點菜信息到總服務(wù)臺上的電腦中,電腦再對信息加以分類存儲、打印,這樣避免了傳
16、統(tǒng)點菜的手寫誤差,也方便顧客結(jié)賬和餐廳管理。</p><p> 2 硬件電路設(shè)計與計算</p><p> 2.1 AT89C51單片機</p><p><b> 2.1.1 描述</b></p><p> AT89C51是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS8位單片機,片內(nèi)含4Kbytes的快速可擦寫的
17、只讀程序存儲器(PEROM)和128 bytes 的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51產(chǎn)品指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和flish存儲單元,功能強大AT89C51單片機可為您提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。</p><p> AT89C51提供以下標(biāo)準(zhǔn)功能:4K 字節(jié)flish閃速存儲器,128字節(jié)內(nèi)部R
18、AM,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ù)位。</p><p><b> 2.1.
19、2電路圖</b></p><p><b> 引腳功能說明:</b></p><p><b> Vcc:電源電壓。</b></p><p><b> GND:地。</b></p><p> P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)位
20、口。作為輸出口用時,每位能吸收電流的方式驅(qū)動8個邏輯門電路,對端口寫“1”可 作為高阻抗輸入端用。</p><p> P1口:P1是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可做熟出口。做輸出口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(Iil)。</p>&
21、lt;p> P2口:P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部地山拉電阻把端口拉到高電平,此時可作為輸出口,作輸出口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(Iil)。</p><p> P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級可驅(qū)動(吸收或輸出電流)4個
22、TTL邏輯門電路。對P3口寫入“1”時,他們被內(nèi)部上拉電阻拉高并可作為輸出口。做輸出端時,被外部拉低的P3口將用上拉電阻輸出電流(Iil)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如下表:</p><p> RST:復(fù)位輸入。當(dāng)振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復(fù)位。</p><p> ALE/PROG:當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時
23、,ALE(地址所存允許)輸出脈沖用于所存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE仍以時鐘振蕩頻率的1/6輸出固定的正脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。</p><p> PSEN:程序存儲允許(^PSEN)輸出是外部程序存儲器的讀選通信號,當(dāng)AT89C51由外部程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩個^PSEN有效,即輸出兩個脈沖
24、。在此期間,當(dāng)訪問外部數(shù)據(jù)存儲器,這兩次有效的^PSEN信號不出現(xiàn)。</p><p> EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H---FFFFH),EA端必須保持低電平(接地)。需注意的是; 如果加密位LB1被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。</p><p> XTAL1: 振蕩器反相放大器的及內(nèi)部時鐘發(fā)生器的輸出端。</p><
25、;p> XTAL2: 振蕩器反相放大器的輸出端。</p><p> P89C51 特殊功能寄存器。</p><p> 2.2 24C1024 部分(I2C總線技術(shù))</p><p> 2.2.1 I2C總線工作原理</p><p> 總線的構(gòu)成及信號類型: </p><p> I2C總線是由數(shù)據(jù)線SD
26、A和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進行雙向傳送,最高傳送速率100kbps。各種被控制電路均并聯(lián)在這條總線上,但就像電話機一樣只有撥通各自的號碼才能工作,所以每個電路和模塊都有唯一的地址,在信息的傳輸過程中,I2C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能。CPU發(fā)出的控制信號分為地址碼和控制量兩部分,地址碼用來選址,即接通需要控制
27、的電路,確定控制的種類;控制量決定該調(diào)整的類別(如對比度、亮度等)及需要調(diào)整的量。這樣,各控制電路雖然掛在同一條總線上,卻彼此獨立,互不相關(guān)。 </p><p> I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號, 它們分別是:開始信號、結(jié)束信號和應(yīng)答信號。 </p><p> 開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。 </p><p>
28、 結(jié)束信號:SCL為高電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。 </p><p> 應(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)故障。 </p><p>
29、 這些信號中,起始信號是必需的,結(jié)束信號和應(yīng)答信號,都可以不要。</p><p> 目前有很多半導(dǎo)體集成電路上都集成了I2C接口。帶有I2C接口的單片機有:CYGNAL的 C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外圍器件如存儲器、監(jiān)控芯片等也提供I2C接口。 </p><p> 2.2.2 I2C總線操作</
30、p><p> 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)的改變被用來表示起始和停止條件。 </p><p
31、><b> 控制字節(jié): </b></p><p> 在起始條件之后,必須是器件的控制字節(jié),其中高四位為器件類型識別符(不同的芯片類型有不同的定義,EEPROM一般應(yīng)為1010),接著三位為片選,最后一位為讀寫位,當(dāng)為1時為讀操作,為0時為寫操作。 </p><p><b> 寫操作:</b></p><p>
32、 寫操作分為字節(jié)寫和頁面寫兩種操作,對于頁面寫根據(jù)芯片的一次裝載的字節(jié)不同有所不同。 </p><p><b> 讀操作: </b></p><p> 讀操作有三種基本操作:當(dāng)前地址讀、隨機讀和順序讀。圖4給出的是順序讀的時序圖。應(yīng)當(dāng)注意的是:最后一個讀操作的第9個時鐘周期不是“不關(guān)心”。為了結(jié)束讀操作,主機必須在第9個周期間發(fā)出停止條件或者在第9個時鐘周期內(nèi)保持
33、SDA為高電平、然后發(fā)出停止條件。</p><p> 2.2.3 主要功能</p><p> 在我這個作品中,由于單片機本身存儲控件很小,所以24C1024芯片的主要作為一塊存儲芯片使用的。作用就是存儲菜譜信息,用戶操作按鍵選擇在液晶屏上顯示的菜名信息全部是通過讀取24C1024芯片中的菜譜數(shù)據(jù)。同時24C1024芯片還要實時接收Csharp軟件對菜譜的更新。</p>&
34、lt;p> 2.3 12864液晶屏和鍵盤矩陣</p><p> 2.3.1 12864液晶屏簡介</p><p> 帶中文字庫的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國標(biāo)一級、二級簡體中文字庫的點陣圖形液晶顯示模塊;其顯示分辨率為12864, 內(nèi)置8192個16*16點漢字,和128個16*8點ASCII字符集.利
35、用該模塊靈活的接口方式和簡單、方便的操作指令,可構(gòu)成全中文人機交互圖形界面??梢燥@示84行1616點陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡潔得多,且該模塊的價格也略低于相同點陣的圖形液晶模塊。</p><p><b> 基本特性:</b></p
36、><p> 1.低電源電壓(VDD:+3.0--+5.5V</p><p> 2.顯示分辨率:128×64點</p><p> 3.內(nèi)置漢字字庫,提供8192個16×16點陣漢字(簡繁體可選)</p><p> 4.內(nèi)置 128個16×8點陣字符</p><p> 5.2MHZ時鐘頻
37、率</p><p> 6.顯示方式:STN、半透、正顯</p><p> 7.驅(qū)動方式:1/32DUTY,1/5BIAS</p><p><b> 7.視角方向:6點</b></p><p> 8.背光方式:側(cè)部高亮白色LED,功耗僅為普通LED的1/5—1/10</p><p> 9.
38、通訊方式:串行、并口可選</p><p> 10.內(nèi)置DC-DC轉(zhuǎn)換電路,無需外加負壓</p><p> 11.無需片選信號,簡化軟件設(shè)計</p><p> 12.工作溫度: 0℃ - +55℃ ,存儲溫度: -20℃ - +60℃</p><p> ● 忙標(biāo)志:BF </p><p> BF標(biāo)志提供內(nèi)
39、部工作情況.BF=1表示模塊在進行內(nèi)部操作,此時模塊不接受外部指令和數(shù)據(jù).BF=0時,模塊為準(zhǔn)備狀態(tài),隨時可接受外部指令和數(shù)據(jù).利用STATUS RD 指令,可以將BF讀到DB7總線,從而檢驗?zāi)K之工作狀態(tài).</p><p> ● 字型產(chǎn)生ROM(CGROM) </p><p> 字型產(chǎn)生ROM(CGROM)提供8192個此觸發(fā)器是用于模塊屏幕顯示開和關(guān)的控制。DFF=1為開顯示
40、(DISPLAY ON),DDRAM的內(nèi)容就顯示在屏幕上,DFF=0為關(guān)顯示(DISPLAY OFF)。DFF 的狀態(tài)是指令DISPLAY ON/OFF和RST信號控制的。 </p><p> ● 顯示數(shù)據(jù)RAM(DDRAM)</p><p> 模塊內(nèi)部顯示數(shù)據(jù)RAM提供64×2個位元組的空間,最多可控制4行16字(64個字)的中文字型顯示,當(dāng)寫入顯示數(shù)據(jù)RAM時,可分別顯示
41、CGROM與CGRAM的字型;此模塊可顯示三種字型,分別是半角英數(shù)字型(16*8)、CGRAM字型及CGROM的中文字型,三種字型的選擇,由在DDRAM中寫入的編碼選擇,在0000H—0006H的編碼中(其代碼分別是0000、0002、0004、0006共4個)將選擇CGRAM的自定義字型,02H—7FH的編碼中將選擇半角英數(shù)字的字型,至于A1以上的編碼將自動的結(jié)合下一個位元組,組成兩個位元組的編碼形成中文字型的編碼BIG5(A140—
42、D75F),GB(A1A0-F7FFH)。 </p><p> 字型產(chǎn)生RAM(CGRAM) </p><p> 字型產(chǎn)生RAM提供圖象定義(造字)功能,可以提供四組16×16點的自定義圖象空間,使用者可以將內(nèi)部字型沒有提供的圖象字型自行定義到CGRAM中,便可和CGROM中的定義一樣地通過DDRAM顯示在屏幕中。</p><p> ● 地
43、址計數(shù)器AC地址計數(shù)器</p><p> 是用來貯存DDRAM/CGRAM之一的地址,它可由設(shè)定指令暫存器來改變,之后只要讀取或是寫入DDRAM/CGRAM的值時,地址計數(shù)器的值就會自動加一,當(dāng)RS為“0”時而R/W為“1”時,地址計數(shù)器的值會被讀取到DB6——DB0中。 </p><p> ● 光標(biāo)/閃爍控制電路</p><p> 此模塊提供硬體光標(biāo)及閃爍控
44、制電路,由地址計數(shù)器的值來指定DDRAM中的光標(biāo)或閃爍位置</p><p> 2.3.2 液晶部分主要功能</p><p> 液晶部分主要就是顯示功能。將按鍵對菜譜的操作顯示出來,同時為了方便客人點菜,還要將客人點菜信息和消費情況顯示出來供客人預(yù)覽,等客人確定后在傳送到Csharp軟件中去。</p><p> 2.3.3 鍵盤部分主要功能</p>
45、<p> 十二個按鍵式鍵盤矩陣,是讓顧客可以方便選擇菜名,同時可以輸入桌號。一個上翻和一個下翻鍵方便顧客瀏覽更多的菜系,一個確定鍵確認(rèn)顧客點的菜肴,還有一個按鍵是選擇。顧客可以通過字母按鍵對菜單進行分類,找出符合自己口味的菜品類。若顧客還想點到固定的菜肴,可以直接通過輸入菜名拼音首字母,即可獲取菜肴名。12864液晶屏主要是顯示作用,把在鍵盤上的種種操作都通過液晶屏顯示出來,方便顧客使用。</p><p
46、><b> 3.系統(tǒng)設(shè)計流程</b></p><p><b> 3.1 硬件部分</b></p><p> 3.1.1 硬件部分功能簡介</p><p> 單片機硬件部分包括:鍵盤矩陣,12863液晶屏,24C1024存儲芯片,AT89C51芯片。</p><p> 硬件功能:硬件部
47、分包括電子點菜電路板和一個4*4的鍵盤矩陣,通過控制電路板上的按鍵通過單片機使液晶顯示自己需要的信息,并保存在單片機中,還有MAX232串口驅(qū)動芯片用來驅(qū)動串口,然后就可以通過串口輸入或輸出信息,并保存到C#數(shù)據(jù)庫中去。硬件部分還包含包括電子點菜器電路板的設(shè)計及焊接,24C1024芯片,AT89C51芯片,液晶,串口等部分。其中液晶顯示上我選擇的是分部顯示的原則,就是將我想顯示的信息預(yù)先存儲在我選好的位置上,不同按鍵按下觸發(fā)不同內(nèi)容顯示
48、在液晶上,還有個難點就是要將使用者所選擇的菜記錄下來,我原本的設(shè)想是想把所選擇的菜名和菜價用一個數(shù)組了,可8052的存儲空間太小如果點的太多就根本無法存儲。于是我想到了另一種辦法,就是記錄菜名號的方法,我在C#發(fā)送菜譜時給每一道菜加上一個唯一固定編號一起放送到24C1024中去,當(dāng)客人點菜時我就用一個數(shù)組來存儲被點菜的編號,這樣就大大降低了對存儲空間的使用也提高了數(shù)據(jù)傳輸?shù)陌踩浴?lt;/p><p> 在一個就是
49、對菜的搜索問題,客人有時想點自己喜歡的菜,在點菜器中翻找太麻煩,他可以自己輸入菜的索引從而尋找自己想要點的菜,做搜索在C#上很好做但在單片機上時很難做到的,因為單片機空間小,沒有現(xiàn)成的控件使用,也不能針對數(shù)據(jù)庫進行操作。我用的辦法是將顧客所按按鍵記錄下來當(dāng)顧客點擊查詢時將得到按鍵索引和24C1024固定位置的到的菜名索引進行對比,如果相同就從24C1024的相應(yīng)位置取出菜名和菜價顯示在液晶上,這就要求數(shù)據(jù)存放要做嚴(yán)格要求.再就是每次點完
50、都要記錄菜價,這就要求再點菜我確定是必須同時記錄所選菜在24C1024中存儲的位置,再在這個基礎(chǔ)上查詢菜價進行記錄保存,以便傳輸?shù)紺#進行保存和查詢。</p><p> 3.1.2 硬件電路圖</p><p> 通過串口與電腦相連相互傳送數(shù)據(jù)。單片機通過P0口控制液晶顯示,通過PI口控制24C1024芯片存儲數(shù)據(jù),通過串口將菜譜數(shù)據(jù)寫入到24C1024芯片中去,同時調(diào)用24C1024芯
51、片數(shù)據(jù)顯示到液晶屏中。按鍵部分圖略。按鍵選擇菜名,客人最后確認(rèn)后通過串口回傳到PC中。</p><p><b> 3.2 軟件部分</b></p><p> 3.2.1 軟件功能簡介</p><p> C sharp軟件程序后臺軟件部分:C#用于后臺程序,酒店內(nèi)部添加刪除菜名及菜名索引,并將顧客所點菜顯示在C#上;數(shù)據(jù)庫應(yīng)用與保存菜譜表,
52、桌號消費統(tǒng)計(桌號,總消費,時間),查詢視圖。</p><p> 軟件功能:包括C,C#,數(shù)據(jù)庫三大部分。其中C用于收集菜譜和存儲,用于顧客查找,瀏覽菜譜并對菜譜進行選擇,查看和統(tǒng)計消費總價,并且回傳顧客消費信息;C#用于后臺程序,酒店內(nèi)部添加刪除菜名及菜名索引,并將顧客所點菜顯示在C#上;數(shù)據(jù)庫應(yīng)用與保存菜譜表,桌號消費統(tǒng)計(桌號,總消費,時間),查詢視圖。在就是串口的數(shù)據(jù)收發(fā),由于我在顯示和搜索時對數(shù)據(jù)的格
53、式有很高要求,所以在用串口傳輸數(shù)據(jù)時在傳輸前必須要對數(shù)據(jù)進行嚴(yán)格的格式轉(zhuǎn)換。在接受數(shù)據(jù)時,因為接受的數(shù)據(jù)有很多種,所以在接受時要對數(shù)據(jù)進行判斷然后再進行分類存儲。</p><p> 3.2.2 軟件流程</p><p> 3.2.3 軟件主要代碼</p><p> Csharp后臺控制部分:</p><p><b> 菜譜管
54、理:</b></p><p> namespace 點菜</p><p><b> {</b></p><p> public partial class 菜譜管理_當(dāng)前時間 : Form</p><p><b> {</b></p><p> publ
55、ic 菜譜管理_當(dāng)前時間()</p><p><b> {</b></p><p> InitializeComponent();</p><p><b> }</b></p><p> private void Form1_Load(object sender, EventArgs e)&
56、lt;/p><p><b> { </b></p><p> Refresh_Phone_List("");</p><p><b> }</b></p><p> void Refresh_Phone_List(string WhereConditon)</p>
57、;<p><b> {</b></p><p> listView1.Items.Clear();</p><p> dbClass1 db1 = new dbClass1();</p><p> string scond = "select * from 所有菜名信息視圖";</p>&
58、lt;p> if (WhereConditon != "") scond += " where " + WhereConditon + "";</p><p> DataTable dt = db1.GetRecords(scond);</p><p> //向列表視圖中添加所有的相關(guān)號碼記錄</p>&
59、lt;p> for (int i = 0; i < dt.Rows.Count; i++)</p><p><b> {</b></p><p> string[] subitem = {</p><p> dt.Rows[i]["菜名"].ToString(),</p><p>
60、 dt.Rows[i]["類型"].ToString(),</p><p> dt.Rows[i]["時價"].ToString(),</p><p><b> };</b></p><p> listView1.Items.Add(new ListViewItem(subitem));</
61、p><p><b> }</b></p><p><b> }</b></p><p> string str = "provider=microsoft.jet.oledb.4.0;data source=菜譜管理.mdb";</p><p> private void b
62、utton1_添加_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> dbClass1 db1 = new dbClass1();</p><p> 菜譜修改 newform = new 菜譜修改();</p><p> if (newfo
63、rm.ShowDialog() == DialogResult.OK)</p><p><b> {</b></p><p> OleDbConnection con = new OleDbConnection(str);</p><p> OleDbCommand cmd = con.CreateCommand();</p>
64、<p> cmd.CommandText = "insert into 菜譜 (分類號,菜名,時價,菜名縮寫) values ('" + newform.cmh + "','" + newform.caiming + "','" + newform.shijia + "','" + ne
65、wform.caimingsuoxie + "')";</p><p> con.Open();</p><p> cmd.ExecuteNonQuery();</p><p> con.Close();</p><p> Form1_Load(sender, e);</p><p>
66、;<b> }</b></p><p><b> }</b></p><p> private void button_刪除_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> for (int
67、i = listView1.SelectedItems.Count - 1; i >= 0; i--)</p><p><b> {</b></p><p> OleDbConnection con = new OleDbConnection(str);</p><p> OleDbCommand cmd = con.CreateC
68、ommand();</p><p> cmd.CommandText = "delete from 菜譜 where 菜名='" + listView1.SelectedItems[i].Text + "'";</p><p> con.Open();</p><p> cmd.ExecuteNonQue
69、ry();</p><p> con.Close();</p><p><b> }</b></p><p> listView1.Items.Clear();</p><p> Form1_Load(sender, e);</p><p><b> }</b>&l
70、t;/p><p> private void button1_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> if (listView1.SelectedItems.Count == 1)</p><p><b> {</b&
71、gt;</p><p> 菜譜修改 cform = new 菜譜修改();</p><p> cform.caiming = listView1.SelectedItems[0].SubItems[0].Text;</p><p> cform.shijia = Convert.ToInt16(listView1.SelectedItems[0].SubIte
72、ms[2].Text);</p><p> if (cform.ShowDialog() == DialogResult.OK)</p><p><b> {</b></p><p> OleDbConnection con = new OleDbConnection(str);</p><p> OleDbCo
73、mmand cmd = con.CreateCommand();</p><p> cmd.CommandText = "update 菜譜 set 時價='" + cform.shijia + "' where 菜名='" + listView1.SelectedItems[0].SubItems[0].Text + "'&q
74、uot;;</p><p> con.Open();</p><p> cmd.ExecuteNonQuery();</p><p> con.Close();</p><p> listView1.Items.Clear();</p><p> Form1_Load(sender, e);</p>
75、;<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> private void textBox1_TextChanged(object sender, EventArgs e)</p><
76、p><b> {</b></p><p> Refresh_Phone_List("菜名縮寫 like '%" + textBox1.Text.Trim() + "%'");</p><p><b> }</b></p><p> private voi
77、d Form1_FormClosing(object sender, FormClosingEventArgs e)</p><p><b> {</b></p><p> if (MessageBox.Show("你真的要退出?", "確認(rèn)",</p><p> MessageBoxButtons
78、.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)</p><p> == DialogResult.Cancel)</p><p><b> {</b></p><p> e.Cancel = true;</p><p><
79、;b> }</b></p><p><b> }</b></p><p> private void button_向點菜器寫入菜譜_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> serialP
80、ort1.Open();</p><p> //啟用發(fā)送數(shù)據(jù)表記錄到串口的函數(shù).............</p><p> Write_Menu_TO_IIC_24C1024();</p><p> //-----------------------------------------</p><p> serialPort1.Clo
81、se();</p><p><b> }</b></p><p> bool SP_Ready = false; </p><p> public int j=0;</p><p> int count = 0;</p><p> void Write_Menu_TO_IIC_24C10
82、24()</p><p><b> {</b></p><p> 菜譜傳輸 pass = new 菜譜傳輸();</p><p> pass.Show();</p><p><b> int j;</b></p><p> //1----------</p&g
83、t;<p> OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=菜譜管理.mdb");</p><p> conn.Open();</p><p> OleDbDataAdapter odapr = new OleDbDat
84、aAdapter("select * from 菜譜 order by 編號", conn);</p><p> //3------------</p><p> DataTable dt = new DataTable();</p><p> odapr.Fill(dt);</p><p> //4--訪問所有表
85、行,并發(fā)送串口.</p><p> byte[] Buffer = new byte[24];</p><p> for (int i = 0; i < dt.Rows.Count; i++)</p><p><b> {</b></p><p><b> j = 0;</b><
86、/p><p> //序號,分類號,名稱,價格,簡記 4-2-10-4-5</p><p> byte[] f1 = Encoding.Default.GetBytes(dt.Rows[i]["編號"].ToString());</p><p> byte[] f3 = Encoding.Default.GetBytes(dt.Rows[i][&
87、quot;菜名"].ToString());</p><p> byte[] f4 = Encoding.Default.GetBytes(dt.Rows[i]["時價"].ToString());</p><p> byte[] f5 = Encoding.Default.GetBytes(dt.Rows[i]["菜名縮寫"].ToS
88、tring());</p><p> pass .cm = dt.Rows[i]["菜名"].ToString();</p><p> //將字節(jié)緩沖全部清為空格.</p><p> for (j = 0; j < 24; j++) Buffer[j] = 0x20;</p><p> for (j = 0;
89、 j < f1.Length; j++) Buffer[j] = f1[j];</p><p> for (j = 0; j < f3.Length; j++) Buffer[j + 4] = f3[j];</p><p> for (j = 0; j < f4.Length; j++) Buffer[j + 14] = f4[j];</p><p
90、> for (j = 0; j < f5.Length; j++) Buffer[j + 18] = f5[j];</p><p> Buffer[23] = (byte)('\r');</p><p> //將所有字段內(nèi)容分解到字節(jié)緩沖后,發(fā)送Buffer緩沖.</p><p> serialPort1.Write(Buffer
91、, 0, Buffer.Length);</p><p> SP_Ready = false;</p><p> count += 1;</p><p> //如串口未就緒則等待...............</p><p> Application.DoEvents();</p><p> while (!
92、SP_Ready) ;</p><p><b> }</b></p><p> if (count == dt.Rows.Count)</p><p><b> {</b></p><p> pass.cn = count;</p><p> serialPort1
93、.WriteLine("-");</p><p> pass.fm = "完成發(fā)送";</p><p> count = 0;</p><p><b> }</b></p><p><b> }</b></p><p> pr
94、ivate void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)</p><p><b> {</b></p><p> 接受顧客消費信息 guest = new 接受顧客消費信息();</p><p> 已點
95、菜 diancai = new 已點菜();</p><p> string rs = serialPort1.ReadLine();</p><p> string accept = rs;</p><p> string[] Recv_MCU_Menu_Info = accept.Split(new char[] { '|' });<
96、/p><p> if (rs == "Ready!")</p><p><b> {</b></p><p> SP_Ready = true;</p><p><b> }</b></p><p> if(Recv_MCU_Menu_Info[0]
97、=="a")</p><p><b> {</b></p><p> guest.gu_infor = rs;</p><p> serialPort1.Close();</p><p> guest.ShowDialog();</p><p><b> }
98、</b></p><p> if (Recv_MCU_Menu_Info[0] == "b")</p><p><b> {</b></p><p> diancai.C_NO_SET = rs;</p><p> serialPort1.Close();</p>&
99、lt;p> diancai.ShowDialog();</p><p><b> }</b></p><p><b> }</b></p><p> private void 添加ToolStripMenuItem_Click(object sender, EventArgs e)</p>&l
100、t;p><b> {</b></p><p> button1_添加_Click(sender, e);</p><p><b> }</b></p><p> private void 更新ToolStripMenuItem_Click(object sender, EventArgs e)</p&g
101、t;<p><b> {</b></p><p> button1_Click(sender, e);</p><p><b> }</b></p><p> private void 刪除ToolStripMenuItem_Click(object sender, EventArgs e)</
102、p><p><b> {</b></p><p> button_刪除_Click(sender, e);</p><p><b> }</b></p><p> private void 向點菜器寫入菜譜ToolStripMenuItem_Click(object sender, EventA
103、rgs e)</p><p><b> {</b></p><p> button_向點菜器寫入菜譜_Click(sender, e);</p><p><b> }</b></p><p> private void 數(shù)據(jù)備份ToolStripMenuItem_Click(object s
104、ender, EventArgs e)</p><p><b> {</b></p><p> 備份 compress = new 備份();</p><p> compress.ShowDialog();</p><p><b> }</b></p><p> p
105、rivate void 從點菜器接受菜單ToolStripMenuItem_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> if (!serialPort1.IsOpen) serialPort1.Open();</p><p> serialPort1.Writ
106、eLine("+");</p><p><b> }</b></p><p> private void button_向從點菜器接受菜單_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> 向從點菜
107、器接受菜單ToolStripMenuItem_Click(sender, e);</p><p><b> }</b></p><p> private void 接受點菜菜譜ToolStripMenuItem_Click(object sender, EventArgs e)</p><p><b> {</b>&
108、lt;/p><p> serialPort1.Open();</p><p> serialPort1.WriteLine("*");</p><p><b> }</b></p><p> private void button2_Click(object sender, EventArgs e
109、)</p><p><b> {</b></p><p> 接受點菜菜譜ToolStripMenuItem_Click(sender, e);</p><p><b> }</b></p><p><b> }</b></p><p><b
110、> }</b></p><p><b> 數(shù)據(jù)傳輸:</b></p><p> namespace 點菜</p><p><b> {</b></p><p> public partial class 菜譜傳輸 : Form</p><p>&l
111、t;b> {</b></p><p> public 菜譜傳輸()</p><p><b> {</b></p><p> InitializeComponent();</p><p><b> }</b></p><p> public int
112、 cn=0;</p><p> public string cm,fm;</p><p> private void 菜譜傳輸_Load(object sender, EventArgs e)</p><p><b> {</b></p><p><b> }</b></p>
113、<p> int t = 0;</p><p> private void timer1_Tick(object sender, EventArgs e)</p><p><b> {</b></p><p> if (cn == 0)</p><p><b> {</b><
114、;/p><p><b> t+=29;</b></p><p> if(t>100)t=0;</p><p> progressBar1.Value= t;</p><p> textBox_菜名.Text = cm;</p><p><b> }</b><
115、/p><p><b> else</b></p><p><b> {</b></p><p> progressBar1.Visible = false;</p><p> timer1.Enabled = false;</p><p> timer2.Enabled
116、 = true;</p><p><b> }</b></p><p><b> }</b></p><p> int x = 0;</p><p> private void timer2_Tick(object sender, EventArgs e)</p><p&
117、gt;<b> {</b></p><p><b> x++;</b></p><p> textBox_菜名.Text = fm;</p><p><b> if(x>2)</b></p><p><b> {</b></p>
118、<p> timer2.Enabled = false;</p><p> this.Close();</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p&g
119、t;<b> }</b></p><p> C語言硬件控制部分:</p><p> /*******************************************************************/</p><p> /*
120、 */</p><p> /*上下翻動菜名 */</p><p> /* */</p><p>
121、 /* */</p><p> /*******************************************************************/</p><p> void LCD_up_down()</p><
122、p><b> {</b></p><p> uchar j,l=-1;</p><p> if(KeyNo==9)</p><p><b> { </b></p><p> P1 = 0x0F; while (P1!=0x0F);</p><p><b&
123、gt; x--;</b></p><p><b> g--;</b></p><p><b> l=f;</b></p><p><b> if(f==0)</b></p><p><b> {</b></p><
124、p><b> g=2;</b></p><p> LCD_Col--;</p><p><b> f=2;</b></p><p><b> }</b></p><p><b> else</b></p><p>&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 應(yīng)用單片機設(shè)計的電子鬧鐘的畢業(yè)論文
- 應(yīng)用單片機設(shè)計的電子鬧鐘的畢業(yè)論文
- 點餐系統(tǒng)畢業(yè)論文
- 畢業(yè)論文基于單片機設(shè)計的最小系統(tǒng)
- 電子與信息工程畢業(yè)論文模擬電網(wǎng)數(shù)據(jù)采集系統(tǒng)的單片機設(shè)計
- 基于單片機設(shè)計的畢業(yè)論文--基于單片機的的智能晾衣系統(tǒng)設(shè)計
- 單片機電子時鐘畢業(yè)論文設(shè)計
- 單片機電子時鐘畢業(yè)論文設(shè)計
- 單片機電子時鐘畢業(yè)論文設(shè)計
- 畢業(yè)論文——應(yīng)用單片機電子鬧鐘設(shè)計
- 應(yīng)用單片機設(shè)計的電子鬧鐘的畢業(yè)論文終極版
- 單片機電子時鐘畢業(yè)論文設(shè)計
- 單片機電子時鐘畢業(yè)論文設(shè)計
- 單片機電子時鐘畢業(yè)論文設(shè)計
- 采用單片機設(shè)計頻率計畢業(yè)論文
- 單片機功能豆?jié){機設(shè)計-畢業(yè)論文
- 基于單片機設(shè)計的數(shù)字時鐘畢業(yè)論文
- 電子與信息工程畢業(yè)論文花園澆水智能控制系統(tǒng)的單片機設(shè)計
- 電子系畢業(yè)論文--單片機病房呼叫系統(tǒng)設(shè)計
- 基于單片機的無線點餐系統(tǒng)的設(shè)計畢業(yè)設(shè)計
評論
0/150
提交評論