單片機(jī)設(shè)計(jì)電子點(diǎn)餐系統(tǒng)畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  本科畢業(yè)論文(設(shè)計(jì)) </p><p>  題 目 電子點(diǎn)菜系統(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è)計(jì)原理……………………………………………………2 </p><p>  1.1該系統(tǒng)概述 ………………

3、………………………………………2 </p><p>  1.2系統(tǒng)框圖 …………………………………………………………2 </p><p>  1.3系統(tǒng)設(shè)計(jì)原理 ……………………………………………………3 </p><p>  2.硬件電路設(shè)計(jì)與計(jì)算……………………………………………………4 </p><p>  2.1 AT89C51部

4、分………………………………………………………4 </p><p>  2.2 24C1024總線部分…………………………………………………7 </p><p>  2.3液晶顯和鍵盤(pán)矩陣部示部分………………………………………8 </p><p>  3.系統(tǒng)設(shè)計(jì)流程……………………………………………………………11</p><p>  3.1

5、硬件部分……………………………………………………………11</p><p>  3.2軟件部分……………………………………………………………12</p><p>  4. 小結(jié)………………………………………………………………………31</p><p>  參考文獻(xiàn)………………………………………………………………………32</p><p>  

6、致 謝 …………………………………………………………………………33</p><p>  內(nèi)容摘要:本電子點(diǎn)菜系統(tǒng)采用AT89C51單片機(jī)控制,處理數(shù)據(jù)并驅(qū)動(dòng)液晶屏來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的現(xiàn)實(shí)。主要過(guò)程如下:利用鍵盤(pán)輸入對(duì)菜號(hào)的選擇,然后將選擇菜號(hào),傳送給單片機(jī)進(jìn)行數(shù)據(jù)處理,從24C1024存儲(chǔ)芯片中提取菜名數(shù)據(jù)信息,并通過(guò)液晶屏將提取菜名數(shù)據(jù)信息顯示出來(lái),最后通過(guò)串口傳輸?shù)诫娔X上面。</p><p&g

7、t;  關(guān) 鍵 詞:AT89C51單片機(jī) 24C1024存儲(chǔ)芯片 12864液晶屏 鍵盤(pán)矩陣</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è)計(jì)原理</p><p><b>  1.1該系統(tǒng)概述</b></p><p>  隨著人們的生活水平提高,餐飲業(yè)的發(fā)展也越來(lái)越迅猛。對(duì)于人滿為患的酒店來(lái)說(shuō),確保快速、準(zhǔn)確的點(diǎn)單是十分必要的,這就需要科學(xué)技術(shù)做堅(jiān)強(qiáng)的后盾。在這種情況下,電子點(diǎn)菜系統(tǒng)便應(yīng)運(yùn)而生,該系統(tǒng)是

11、一款應(yīng)用于中大型餐廳,方便顧客和服務(wù)員點(diǎn)菜的系統(tǒng)。它打破了傳統(tǒng)點(diǎn)菜的方式,顧客只需通過(guò)手中小巧的電子點(diǎn)菜器就可以隨意點(diǎn)到自己需要的菜肴,并且方便酒店隨時(shí)刷新菜譜,為消費(fèi)者提供最新的美食信息。電子點(diǎn)菜系統(tǒng)不僅滿足了現(xiàn)代人對(duì)快節(jié)奏的需要,而且時(shí)尚、新穎。相信使用電子點(diǎn)菜系統(tǒng)的酒店肯定備受消費(fèi)者的青睞。</p><p>  電子點(diǎn)菜系統(tǒng)應(yīng)用于中大型酒店,無(wú)需傳統(tǒng)菜單及服務(wù)生,顧客只需使用桌上提供的電子點(diǎn)菜器就可以隨意挑

12、選自己想吃的菜品,精致小巧的點(diǎn)菜器配上適合眼睛感官視覺(jué)的四行中文液晶顯示器,免去了您頻繁翻閱傳統(tǒng)菜單的煩惱。</p><p>  用單片機(jī)技術(shù)設(shè)計(jì)、制造的點(diǎn)菜器控制系統(tǒng),具有集成度高、功能強(qiáng)、體積小、速度快、存儲(chǔ)量大、指令豐富,抗干擾性強(qiáng),性能價(jià)格比高,通用性好,推廣范圍大,工作可靠,指示準(zhǔn)確,易于匹配,使用壽命長(zhǎng),標(biāo)準(zhǔn)化系數(shù)高等一系列優(yōu)勢(shì)和特點(diǎn)。</p><p><b>  1

13、.2 系統(tǒng)框圖</b></p><p><b>  1.3系統(tǒng)設(shè)計(jì)原理</b></p><p>  十二個(gè)按鍵式鍵盤(pán)矩陣,是讓顧客可以方便選擇菜名,同時(shí)可以輸入桌號(hào)。一個(gè)上翻和下翻鍵方便顧客瀏覽更多的菜系,一個(gè)確定鍵確認(rèn)顧客點(diǎn)的菜肴,還有一個(gè)按鍵是選擇。</p><p>  在電子點(diǎn)菜器上,主要是24 C1024和AT89C51兩

14、塊芯片,其中24C1024用來(lái)存儲(chǔ)所有菜名信息,通過(guò)AT89C51,將菜譜信息傳輸給液晶顯示。但顧客選擇好自己需要的菜品后,菜單將自動(dòng)存儲(chǔ)到AT89C51中,再可以通過(guò)串口與電腦直接相連,將菜單傳輸?shù)綌?shù)據(jù)庫(kù)中進(jìn)行存儲(chǔ),并顯示、打印出來(lái)。而AT89C51主要是用來(lái)控制24 C1024與液晶之間數(shù)據(jù)傳輸,液晶顯示部分以及串口通訊部分。是整塊板的核心部分。他是通過(guò)C語(yǔ)言程序燒制進(jìn)去的。</p><p>  在顧客點(diǎn)菜過(guò)

15、程中,顧客可以通過(guò)字母按鍵對(duì)菜單進(jìn)行分類(lèi),找出符合自己口味的菜品類(lèi)。若顧客還想點(diǎn)到固定的菜肴,可以直接通過(guò)輸入菜名拼音首字母,即可獲取菜肴名。</p><p>  全部點(diǎn)完按完成鍵,上方的中文液晶屏將清晰顯示謝謝惠顧和請(qǐng)輸入桌號(hào)等信息,顧客只需控制按鍵就可以點(diǎn)到自己所需的菜肴,既方便,又省事。點(diǎn)菜完成后,服務(wù)生可以通過(guò)電子點(diǎn)菜器上的串口傳輸點(diǎn)菜信息到總服務(wù)臺(tái)上的電腦中,電腦再對(duì)信息加以分類(lèi)存儲(chǔ)、打印,這樣避免了傳

16、統(tǒng)點(diǎn)菜的手寫(xiě)誤差,也方便顧客結(jié)賬和餐廳管理。</p><p>  2 硬件電路設(shè)計(jì)與計(jì)算</p><p>  2.1 AT89C51單片機(jī)</p><p><b>  2.1.1 描述</b></p><p>  AT89C51是美國(guó)ATMEL公司生產(chǎn)的低電壓,高性能CMOS8位單片機(jī),片內(nèi)含4Kbytes的快速可擦寫(xiě)的

17、只讀程序存儲(chǔ)器(PEROM)和128 bytes 的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51產(chǎn)品指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和flish存儲(chǔ)單元,功能強(qiáng)大AT89C51單片機(jī)可為您提供許多高性價(jià)比的應(yīng)用場(chǎng)合,可靈活應(yīng)用于各種控制領(lǐng)域。</p><p>  AT89C51提供以下標(biāo)準(zhǔn)功能:4K 字節(jié)flish閃速存儲(chǔ)器,128字節(jié)內(nèi)部R

18、AM,32個(gè)I/O口線,兩個(gè)16位定時(shí)/計(jì)數(shù)器,一個(gè)5向量?jī)杉?jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí),AT89C51可降至0HZ的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。</p><p><b>  2.1.

19、2電路圖</b></p><p><b>  引腳功能說(shuō)明:</b></p><p><b>  Vcc:電源電壓。</b></p><p><b>  GND:地。</b></p><p>  P0口:P0口是一組8位漏極開(kāi)路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)位

20、口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng)8個(gè)邏輯門(mén)電路,對(duì)端口寫(xiě)“1”可 作為高阻抗輸入端用。</p><p>  P1口:P1是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。對(duì)端口寫(xiě)“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可做熟出口。做輸出口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(Iil)。</p>&

21、lt;p>  P2口:P2是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門(mén)電路。對(duì)端口寫(xiě)“1”,通過(guò)內(nèi)部地山拉電阻把端口拉到高電平,此時(shí)可作為輸出口,作輸出口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(Iil)。</p><p>  P3口:P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)

22、TTL邏輯門(mén)電路。對(duì)P3口寫(xiě)入“1”時(shí),他們被內(nèi)部上拉電阻拉高并可作為輸出口。做輸出端時(shí),被外部拉低的P3口將用上拉電阻輸出電流(Iil)。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,如下表:</p><p>  RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。</p><p>  ALE/PROG:當(dāng)訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí)

23、,ALE(地址所存允許)輸出脈沖用于所存地址的低8位字節(jié)。即使不訪問(wèn)外部存儲(chǔ)器,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的正脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過(guò)一個(gè)ALE脈沖。</p><p>  PSEN:程序存儲(chǔ)允許(^PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89C51由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩個(gè)^PSEN有效,即輸出兩個(gè)脈沖

24、。在此期間,當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,這兩次有效的^PSEN信號(hào)不出現(xiàn)。</p><p>  EA/VPP:外部訪問(wèn)允許。欲使CPU僅訪問(wèn)外部程序存儲(chǔ)器(地址為0000H---FFFFH),EA端必須保持低電平(接地)。需注意的是; 如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。</p><p>  XTAL1: 振蕩器反相放大器的及內(nèi)部時(shí)鐘發(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)成及信號(hào)類(lèi)型: </p><p>  I2C總線是由數(shù)據(jù)線SD

26、A和時(shí)鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進(jìn)行雙向傳送,最高傳送速率100kbps。各種被控制電路均并聯(lián)在這條總線上,但就像電話機(jī)一樣只有撥通各自的號(hào)碼才能工作,所以每個(gè)電路和模塊都有唯一的地址,在信息的傳輸過(guò)程中,I2C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能。CPU發(fā)出的控制信號(hào)分為地址碼和控制量?jī)刹糠郑刂反a用來(lái)選址,即接通需要控制

27、的電路,確定控制的種類(lèi);控制量決定該調(diào)整的類(lèi)別(如對(duì)比度、亮度等)及需要調(diào)整的量。這樣,各控制電路雖然掛在同一條總線上,卻彼此獨(dú)立,互不相關(guān)。 </p><p>  I2C總線在傳送數(shù)據(jù)過(guò)程中共有三種類(lèi)型信號(hào), 它們分別是:開(kāi)始信號(hào)、結(jié)束信號(hào)和應(yīng)答信號(hào)。 </p><p>  開(kāi)始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開(kāi)始傳送數(shù)據(jù)。 </p><p>

28、  結(jié)束信號(hào):SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。 </p><p>  應(yīng)答信號(hào):接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個(gè)信號(hào)后,等待受控單元發(fā)出一個(gè)應(yīng)答信號(hào),CPU接收到應(yīng)答信號(hào)后,根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號(hào)的判斷。若未收到應(yīng)答信號(hào),由判斷為受控單元出現(xiàn)故障。 </p><p> 

29、 這些信號(hào)中,起始信號(hào)是必需的,結(jié)束信號(hào)和應(yīng)答信號(hào),都可以不要。</p><p>  目前有很多半導(dǎo)體集成電路上都集成了I2C接口。帶有I2C接口的單片機(jī)有:CYGNAL的 C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外圍器件如存儲(chǔ)器、監(jiān)控芯片等也提供I2C接口。 </p><p>  2.2.2 I2C總線操作</

30、p><p>  I2C規(guī)程運(yùn)用主/從雙向通訊。器件發(fā)送數(shù)據(jù)到總線上,則定義為發(fā)送器,器件接收數(shù)據(jù)則定義為接收器。主器件和從器件都可以工作于接收和發(fā)送狀態(tài)。 總線必須由主器件(通常為微控制器)控制,主器件產(chǎn)生串行時(shí)鐘(SCL)控制總線的傳輸方向,并產(chǎn)生起始和停止條件。SDA線上的數(shù)據(jù)狀態(tài)僅在SCL為低電平的期間才能改變,SCL為高電平的期間,SDA狀態(tài)的改變被用來(lái)表示起始和停止條件。 </p><p

31、><b>  控制字節(jié): </b></p><p>  在起始條件之后,必須是器件的控制字節(jié),其中高四位為器件類(lèi)型識(shí)別符(不同的芯片類(lèi)型有不同的定義,EEPROM一般應(yīng)為1010),接著三位為片選,最后一位為讀寫(xiě)位,當(dāng)為1時(shí)為讀操作,為0時(shí)為寫(xiě)操作。 </p><p><b>  寫(xiě)操作:</b></p><p> 

32、 寫(xiě)操作分為字節(jié)寫(xiě)和頁(yè)面寫(xiě)兩種操作,對(duì)于頁(yè)面寫(xiě)根據(jù)芯片的一次裝載的字節(jié)不同有所不同。 </p><p><b>  讀操作: </b></p><p>  讀操作有三種基本操作:當(dāng)前地址讀、隨機(jī)讀和順序讀。圖4給出的是順序讀的時(shí)序圖。應(yīng)當(dāng)注意的是:最后一個(gè)讀操作的第9個(gè)時(shí)鐘周期不是“不關(guān)心”。為了結(jié)束讀操作,主機(jī)必須在第9個(gè)周期間發(fā)出停止條件或者在第9個(gè)時(shí)鐘周期內(nèi)保持

33、SDA為高電平、然后發(fā)出停止條件。</p><p>  2.2.3 主要功能</p><p>  在我這個(gè)作品中,由于單片機(jī)本身存儲(chǔ)控件很小,所以24C1024芯片的主要作為一塊存儲(chǔ)芯片使用的。作用就是存儲(chǔ)菜譜信息,用戶操作按鍵選擇在液晶屏上顯示的菜名信息全部是通過(guò)讀取24C1024芯片中的菜譜數(shù)據(jù)。同時(shí)24C1024芯片還要實(shí)時(shí)接收Csharp軟件對(duì)菜譜的更新。</p>&

34、lt;p>  2.3 12864液晶屏和鍵盤(pán)矩陣</p><p>  2.3.1 12864液晶屏簡(jiǎn)介</p><p>  帶中文字庫(kù)的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國(guó)標(biāo)一級(jí)、二級(jí)簡(jiǎn)體中文字庫(kù)的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為12864,   內(nèi)置8192個(gè)16*16點(diǎn)漢字,和128個(gè)16*8點(diǎn)ASCII字符集.利

35、用該模塊靈活的接口方式和簡(jiǎn)單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面??梢燥@示84行1616點(diǎn)陣的漢字.   也可完成圖形顯示.低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案與同類(lèi)型的圖形點(diǎn)陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡(jiǎn)潔得多,且該模塊的價(jià)格也略低于相同點(diǎn)陣的圖形液晶模塊。</p><p><b>  基本特性:</b></p

36、><p>  1.低電源電壓(VDD:+3.0--+5.5V</p><p>  2.顯示分辨率:128×64點(diǎn)</p><p>  3.內(nèi)置漢字字庫(kù),提供8192個(gè)16×16點(diǎn)陣漢字(簡(jiǎn)繁體可選)</p><p>  4.內(nèi)置 128個(gè)16×8點(diǎn)陣字符</p><p>  5.2MHZ時(shí)鐘頻

37、率</p><p>  6.顯示方式:STN、半透、正顯</p><p>  7.驅(qū)動(dòng)方式:1/32DUTY,1/5BIAS</p><p><b>  7.視角方向:6點(diǎn)</b></p><p>  8.背光方式:側(cè)部高亮白色LED,功耗僅為普通LED的1/5—1/10</p><p>  9.

38、通訊方式:串行、并口可選</p><p>  10.內(nèi)置DC-DC轉(zhuǎn)換電路,無(wú)需外加負(fù)壓</p><p>  11.無(wú)需片選信號(hào),簡(jiǎn)化軟件設(shè)計(jì)</p><p>  12.工作溫度: 0℃ - +55℃ ,存儲(chǔ)溫度: -20℃ - +60℃</p><p>  ● 忙標(biāo)志:BF </p><p>  BF標(biāo)志提供內(nèi)

39、部工作情況.BF=1表示模塊在進(jìn)行內(nèi)部操作,此時(shí)模塊不接受外部指令和數(shù)據(jù).BF=0時(shí),模塊為準(zhǔn)備狀態(tài),隨時(shí)可接受外部指令和數(shù)據(jù).利用STATUS RD 指令,可以將BF讀到DB7總線,從而檢驗(yàn)?zāi)K之工作狀態(tài).</p><p>  ● 字型產(chǎn)生ROM(CGROM) </p><p>  字型產(chǎn)生ROM(CGROM)提供8192個(gè)此觸發(fā)器是用于模塊屏幕顯示開(kāi)和關(guān)的控制。DFF=1為開(kāi)顯示

40、(DISPLAY ON),DDRAM的內(nèi)容就顯示在屏幕上,DFF=0為關(guān)顯示(DISPLAY OFF)。DFF 的狀態(tài)是指令DISPLAY ON/OFF和RST信號(hào)控制的。 </p><p>  ● 顯示數(shù)據(jù)RAM(DDRAM)</p><p>  模塊內(nèi)部顯示數(shù)據(jù)RAM提供64×2個(gè)位元組的空間,最多可控制4行16字(64個(gè)字)的中文字型顯示,當(dāng)寫(xiě)入顯示數(shù)據(jù)RAM時(shí),可分別顯示

41、CGROM與CGRAM的字型;此模塊可顯示三種字型,分別是半角英數(shù)字型(16*8)、CGRAM字型及CGROM的中文字型,三種字型的選擇,由在DDRAM中寫(xiě)入的編碼選擇,在0000H—0006H的編碼中(其代碼分別是0000、0002、0004、0006共4個(gè))將選擇CGRAM的自定義字型,02H—7FH的編碼中將選擇半角英數(shù)字的字型,至于A1以上的編碼將自動(dòng)的結(jié)合下一個(gè)位元組,組成兩個(gè)位元組的編碼形成中文字型的編碼BIG5(A140—

42、D75F),GB(A1A0-F7FFH)。 </p><p>  字型產(chǎn)生RAM(CGRAM) </p><p>  字型產(chǎn)生RAM提供圖象定義(造字)功能,可以提供四組16×16點(diǎn)的自定義圖象空間,使用者可以將內(nèi)部字型沒(méi)有提供的圖象字型自行定義到CGRAM中,便可和CGROM中的定義一樣地通過(guò)DDRAM顯示在屏幕中。</p><p>  ● 地

43、址計(jì)數(shù)器AC地址計(jì)數(shù)器</p><p>  是用來(lái)貯存DDRAM/CGRAM之一的地址,它可由設(shè)定指令暫存器來(lái)改變,之后只要讀取或是寫(xiě)入DDRAM/CGRAM的值時(shí),地址計(jì)數(shù)器的值就會(huì)自動(dòng)加一,當(dāng)RS為“0”時(shí)而R/W為“1”時(shí),地址計(jì)數(shù)器的值會(huì)被讀取到DB6——DB0中。 </p><p>  ● 光標(biāo)/閃爍控制電路</p><p>  此模塊提供硬體光標(biāo)及閃爍控

44、制電路,由地址計(jì)數(shù)器的值來(lái)指定DDRAM中的光標(biāo)或閃爍位置</p><p>  2.3.2 液晶部分主要功能</p><p>  液晶部分主要就是顯示功能。將按鍵對(duì)菜譜的操作顯示出來(lái),同時(shí)為了方便客人點(diǎn)菜,還要將客人點(diǎn)菜信息和消費(fèi)情況顯示出來(lái)供客人預(yù)覽,等客人確定后在傳送到Csharp軟件中去。</p><p>  2.3.3 鍵盤(pán)部分主要功能</p>

45、<p>  十二個(gè)按鍵式鍵盤(pán)矩陣,是讓顧客可以方便選擇菜名,同時(shí)可以輸入桌號(hào)。一個(gè)上翻和一個(gè)下翻鍵方便顧客瀏覽更多的菜系,一個(gè)確定鍵確認(rèn)顧客點(diǎn)的菜肴,還有一個(gè)按鍵是選擇。顧客可以通過(guò)字母按鍵對(duì)菜單進(jìn)行分類(lèi),找出符合自己口味的菜品類(lèi)。若顧客還想點(diǎn)到固定的菜肴,可以直接通過(guò)輸入菜名拼音首字母,即可獲取菜肴名。12864液晶屏主要是顯示作用,把在鍵盤(pán)上的種種操作都通過(guò)液晶屏顯示出來(lái),方便顧客使用。</p><p

46、><b>  3.系統(tǒng)設(shè)計(jì)流程</b></p><p><b>  3.1 硬件部分</b></p><p>  3.1.1 硬件部分功能簡(jiǎn)介</p><p>  單片機(jī)硬件部分包括:鍵盤(pán)矩陣,12863液晶屏,24C1024存儲(chǔ)芯片,AT89C51芯片。</p><p>  硬件功能:硬件部

47、分包括電子點(diǎn)菜電路板和一個(gè)4*4的鍵盤(pán)矩陣,通過(guò)控制電路板上的按鍵通過(guò)單片機(jī)使液晶顯示自己需要的信息,并保存在單片機(jī)中,還有MAX232串口驅(qū)動(dòng)芯片用來(lái)驅(qū)動(dòng)串口,然后就可以通過(guò)串口輸入或輸出信息,并保存到C#數(shù)據(jù)庫(kù)中去。硬件部分還包含包括電子點(diǎn)菜器電路板的設(shè)計(jì)及焊接,24C1024芯片,AT89C51芯片,液晶,串口等部分。其中液晶顯示上我選擇的是分部顯示的原則,就是將我想顯示的信息預(yù)先存儲(chǔ)在我選好的位置上,不同按鍵按下觸發(fā)不同內(nèi)容顯示

48、在液晶上,還有個(gè)難點(diǎn)就是要將使用者所選擇的菜記錄下來(lái),我原本的設(shè)想是想把所選擇的菜名和菜價(jià)用一個(gè)數(shù)組了,可8052的存儲(chǔ)空間太小如果點(diǎn)的太多就根本無(wú)法存儲(chǔ)。于是我想到了另一種辦法,就是記錄菜名號(hào)的方法,我在C#發(fā)送菜譜時(shí)給每一道菜加上一個(gè)唯一固定編號(hào)一起放送到24C1024中去,當(dāng)客人點(diǎn)菜時(shí)我就用一個(gè)數(shù)組來(lái)存儲(chǔ)被點(diǎn)菜的編號(hào),這樣就大大降低了對(duì)存儲(chǔ)空間的使用也提高了數(shù)據(jù)傳輸?shù)陌踩浴?lt;/p><p>  在一個(gè)就是

49、對(duì)菜的搜索問(wèn)題,客人有時(shí)想點(diǎn)自己喜歡的菜,在點(diǎn)菜器中翻找太麻煩,他可以自己輸入菜的索引從而尋找自己想要點(diǎn)的菜,做搜索在C#上很好做但在單片機(jī)上時(shí)很難做到的,因?yàn)閱纹瑱C(jī)空間小,沒(méi)有現(xiàn)成的控件使用,也不能針對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。我用的辦法是將顧客所按按鍵記錄下來(lái)當(dāng)顧客點(diǎn)擊查詢時(shí)將得到按鍵索引和24C1024固定位置的到的菜名索引進(jìn)行對(duì)比,如果相同就從24C1024的相應(yīng)位置取出菜名和菜價(jià)顯示在液晶上,這就要求數(shù)據(jù)存放要做嚴(yán)格要求.再就是每次點(diǎn)完

50、都要記錄菜價(jià),這就要求再點(diǎn)菜我確定是必須同時(shí)記錄所選菜在24C1024中存儲(chǔ)的位置,再在這個(gè)基礎(chǔ)上查詢菜價(jià)進(jìn)行記錄保存,以便傳輸?shù)紺#進(jìn)行保存和查詢。</p><p>  3.1.2 硬件電路圖</p><p>  通過(guò)串口與電腦相連相互傳送數(shù)據(jù)。單片機(jī)通過(guò)P0口控制液晶顯示,通過(guò)PI口控制24C1024芯片存儲(chǔ)數(shù)據(jù),通過(guò)串口將菜譜數(shù)據(jù)寫(xiě)入到24C1024芯片中去,同時(shí)調(diào)用24C1024芯

51、片數(shù)據(jù)顯示到液晶屏中。按鍵部分圖略。按鍵選擇菜名,客人最后確認(rèn)后通過(guò)串口回傳到PC中。</p><p><b>  3.2 軟件部分</b></p><p>  3.2.1 軟件功能簡(jiǎn)介</p><p>  C sharp軟件程序后臺(tái)軟件部分:C#用于后臺(tái)程序,酒店內(nèi)部添加刪除菜名及菜名索引,并將顧客所點(diǎn)菜顯示在C#上;數(shù)據(jù)庫(kù)應(yīng)用與保存菜譜表,

52、桌號(hào)消費(fèi)統(tǒng)計(jì)(桌號(hào),總消費(fèi),時(shí)間),查詢視圖。</p><p>  軟件功能:包括C,C#,數(shù)據(jù)庫(kù)三大部分。其中C用于收集菜譜和存儲(chǔ),用于顧客查找,瀏覽菜譜并對(duì)菜譜進(jìn)行選擇,查看和統(tǒng)計(jì)消費(fèi)總價(jià),并且回傳顧客消費(fèi)信息;C#用于后臺(tái)程序,酒店內(nèi)部添加刪除菜名及菜名索引,并將顧客所點(diǎn)菜顯示在C#上;數(shù)據(jù)庫(kù)應(yīng)用與保存菜譜表,桌號(hào)消費(fèi)統(tǒng)計(jì)(桌號(hào),總消費(fèi),時(shí)間),查詢視圖。在就是串口的數(shù)據(jù)收發(fā),由于我在顯示和搜索時(shí)對(duì)數(shù)據(jù)的格

53、式有很高要求,所以在用串口傳輸數(shù)據(jù)時(shí)在傳輸前必須要對(duì)數(shù)據(jù)進(jìn)行嚴(yán)格的格式轉(zhuǎn)換。在接受數(shù)據(jù)時(shí),因?yàn)榻邮艿臄?shù)據(jù)有很多種,所以在接受時(shí)要對(duì)數(shù)據(jù)進(jìn)行判斷然后再進(jìn)行分類(lèi)存儲(chǔ)。</p><p>  3.2.2 軟件流程</p><p>  3.2.3 軟件主要代碼</p><p>  Csharp后臺(tái)控制部分:</p><p><b>  菜譜管

54、理:</b></p><p>  namespace 點(diǎn)菜</p><p><b>  {</b></p><p>  public partial class 菜譜管理_當(dāng)前時(shí)間 : Form</p><p><b>  {</b></p><p>  publ

55、ic 菜譜管理_當(dāng)前時(shí)間()</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)號(hào)碼記錄</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]["類(lèi)型"].ToString(),</p><p>  dt.Rows[i]["時(shí)價(jià)"].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 菜譜 (分類(lèi)號(hào),菜名,時(shí)價(jià),菜名縮寫(xiě)) 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 時(shí)價(jià)='" + 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("菜名縮寫(xiě) 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_向點(diǎn)菜器寫(xiě)入菜譜_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 編號(hào)", conn);</p><p>  //3------------</p><p>  DataTable dt = new DataTable();</p><p>  odapr.Fill(dt);</p><p>  //4--訪問(wèn)所有表

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>  //序號(hào),分類(lèi)號(hào),名稱,價(jià)格,簡(jiǎn)記 4-2-10-4-5</p><p>  byte[] f1 = Encoding.Default.GetBytes(dt.Rows[i]["編號(hào)"].ToString());</p><p>  byte[] f3 = Encoding.Default.GetBytes(dt.Rows[i][&

87、quot;菜名"].ToString());</p><p>  byte[] f4 = Encoding.Default.GetBytes(dt.Rows[i]["時(shí)價(jià)"].ToString());</p><p>  byte[] f5 = Encoding.Default.GetBytes(dt.Rows[i]["菜名縮寫(xiě)"].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>  接受顧客消費(fèi)信息 guest = new 接受顧客消費(fèi)信息();</p><p>  已點(diǎn)

95、菜 diancai = new 已點(diǎn)菜();</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 向點(diǎn)菜器寫(xiě)入菜譜ToolStripMenuItem_Click(object sender, EventA

103、rgs e)</p><p><b>  {</b></p><p>  button_向點(diǎn)菜器寫(xiě)入菜譜_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 從點(diǎn)菜器接受菜單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_向從點(diǎn)菜器接受菜單_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p>  向從點(diǎn)菜

107、器接受菜單ToolStripMenuItem_Click(sender, e);</p><p><b>  }</b></p><p>  private void 接受點(diǎn)菜菜譜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>  接受點(diǎn)菜菜譜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 點(diǎn)菜</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語(yǔ)言硬件控制部分:</p><p>  /*******************************************************************/</p><p>  /*

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

最新文檔

評(píng)論

0/150

提交評(píng)論