




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第一章緒論1.1研究背景和意義人類利用無線通信技術(shù)的歷史已經(jīng)有幾千年了,古時(shí)候用的烽火臺(tái)就是最原始的無線通信。但這時(shí)候的無線通信技術(shù)還只是處于萌芽階段,只有到19世紀(jì)末意大利人馬可尼發(fā)明無線電報(bào)開始,人類才真正開始大規(guī)模地利用無線通信技術(shù)。近數(shù)十年來隨著計(jì)算機(jī)技術(shù)和電子技術(shù)的發(fā)展,無線通信技術(shù)更是以日新月異的速度向前發(fā)展,它也成為了通信領(lǐng)域的一個(gè)重點(diǎn)研究方向?,F(xiàn)代的無線通信技術(shù)是建立在硬件電路的基礎(chǔ)上的,因此微電子技術(shù)的發(fā)展直接制約著無線通信技術(shù)的發(fā)展[1]?;仡櫦呻娐返陌l(fā)展歷程,我們可以看到,自發(fā)明集成電路至今40多年以來,“從電路集成到系統(tǒng)集成”這句話是對(duì)IC產(chǎn)品從SSI(SmallScaleIntegrated小規(guī)模集成電路)到VLSI(VeryLargeScaleIntegrated超大規(guī)模集成電路)今天特大規(guī)模集成電路發(fā)展過程的最好總結(jié),即整個(gè)集成電路產(chǎn)品的發(fā)展經(jīng)歷了從傳統(tǒng)的板上系統(tǒng)(System-on-board)到片上系統(tǒng)(System-on-a-chip)的過程。隨著集程度的提高,芯片的體積能耗和成本在逐步降低,這也使電子產(chǎn)品向便攜式和低端市場發(fā)展。雖然微電子的發(fā)展歷史已經(jīng)有半個(gè)多世紀(jì),但是射頻芯片的發(fā)展卻是近幾年的事。從分類上來看,射頻芯片屬于專用集成電路。目前國際上有很多專門生產(chǎn)射頻芯片的公司,例如Nordic公司和Chipcon公司。這些芯片一般工作在免費(fèi)頻段,采用專門的調(diào)制解調(diào)技術(shù),內(nèi)部集成了很多電路。像Nordic公司的NRF24L01芯片,它是單片射頻收發(fā)芯片,工作于2.4~2.5GHzISM(IndustrySciencemedicine,工業(yè)、科學(xué)、醫(yī)學(xué))頻段,芯片內(nèi)置頻率合成器、功率放大器、晶體振蕩器和調(diào)制器等功能模塊,輸出功率和通信頻道可通過程序進(jìn)行配置。芯片能耗非常低,以-5dBm的功率發(fā)射時(shí),工作電流只有10.5mA,接收時(shí)工作電流只有18mA,多種低功率工作模式,節(jié)能設(shè)計(jì)更方便。其DuoCeiverTM技術(shù)使NRF24L01可以使用同一天線,同時(shí)接收兩個(gè)不同頻道的數(shù)據(jù)。無線電子點(diǎn)菜系統(tǒng)是無線通信技術(shù)的一個(gè)典型應(yīng)用。近些年來,隨著人民生活水平的提高和生活方式的轉(zhuǎn)變,餐飲業(yè)具有巨大的投資市場,被稱為中國的黃金產(chǎn)業(yè)。人們?cè)谙M(fèi)過程中對(duì)服務(wù)質(zhì)量也有了更高的要求,同時(shí)餐館之間的激烈競爭也促進(jìn)了無線通信技術(shù)在餐飲業(yè)中的應(yīng)用。無線電子點(diǎn)菜系統(tǒng)的目的就是利用最先進(jìn)的2.4GRF無線通信技術(shù)、嵌入式移動(dòng)數(shù)據(jù)庫技術(shù)以及觸摸屏的掌上電腦技術(shù),實(shí)現(xiàn)餐飲業(yè)的全面數(shù)字化,降低人工費(fèi)用。無線電子點(diǎn)菜系統(tǒng)能夠進(jìn)一步提高餐廳檔次、提高點(diǎn)菜效率,而且具有結(jié)賬、更新菜單、實(shí)時(shí)查看賬單等功能,而且能夠有效避免人為錯(cuò)誤、避免跑單、實(shí)時(shí)查看餐館收益情況、提供查看諸如今日流水賬這樣的統(tǒng)計(jì)信息等,用數(shù)字化的手段來革新餐飲行業(yè),優(yōu)化業(yè)務(wù)流程,為每位客戶提供更優(yōu)質(zhì)的服務(wù),實(shí)現(xiàn)餐廳利潤的最大化而又不至于成本過高,是餐飲行業(yè)向信息化發(fā)展的一個(gè)重要標(biāo)志。由于使用無線技術(shù)通信,可以不用進(jìn)行復(fù)雜的布線,這也大大降低了餐館的建設(shè)成本,減少了對(duì)線路維護(hù)的開支。同時(shí),無線通信設(shè)備的可移動(dòng)性也使服務(wù)員隨時(shí)可以和吧臺(tái)聯(lián)系。無線電子點(diǎn)菜系統(tǒng)基于目前很熱門的技術(shù)——嵌入式技術(shù),依托一定的硬件平臺(tái)。因此微電子技術(shù)的發(fā)展對(duì)系統(tǒng)的性能有很大的限制,目前微電子技術(shù)已經(jīng)發(fā)展到了SOC(SystemOnChip,片上系統(tǒng)),集成度獲得了極大的提高。同時(shí),芯片的價(jià)格,體積和能耗進(jìn)一步降低,這些都使無線電子點(diǎn)菜系統(tǒng)向移動(dòng)化和大眾化方向發(fā)展。可以說,隨著微電子技術(shù)的進(jìn)一步發(fā)展,無線電子點(diǎn)菜系統(tǒng)仍然有很大的發(fā)展空間。1.2論文的研究目標(biāo)本設(shè)計(jì)主要是用一個(gè)主控模塊控制外圍器件使其協(xié)調(diào)工作,初步?jīng)Q定通信方式使用單工方式,先實(shí)現(xiàn)其功能,即多個(gè)從機(jī)只向主機(jī)發(fā)送信息,主機(jī)不返回任何信息,可制作一個(gè)移動(dòng)端(發(fā)送端)和一個(gè)連接電腦的接收端進(jìn)行演示。其基本功能應(yīng)包括:1.移動(dòng)端能進(jìn)行菜單顯示,利用觸屏等方式輸入信息;2.點(diǎn)菜過程中需要有一定的交互,例如進(jìn)行語音提示;3.移動(dòng)端在點(diǎn)菜完畢后利用預(yù)定的協(xié)議打包發(fā)送數(shù)據(jù),連接電腦的接收端實(shí)時(shí)接收數(shù)據(jù)并解碼,再利用串口傳送至電腦,電腦上位機(jī)程序最后進(jìn)行相應(yīng)操作,完成一次點(diǎn)單過程。對(duì)于后期產(chǎn)品功能初步實(shí)現(xiàn)后再考慮半雙工的通信方式,進(jìn)行實(shí)時(shí)數(shù)據(jù)更新、點(diǎn)單反饋等更人性化的操作。1.3內(nèi)容安排本文是對(duì)無線電子菜譜系統(tǒng)系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)進(jìn)行了深入的研究,全文共分為六章,各章節(jié)的內(nèi)容安排如下:第一章介紹了本文的研究背景和各章節(jié)的內(nèi)容安排情況。第二章先介紹了系統(tǒng)總體的結(jié)構(gòu),然后對(duì)每個(gè)模塊進(jìn)行選型,并對(duì)所使用的芯片及其原理進(jìn)行了簡單的介紹。第三章在上一章的基礎(chǔ)上設(shè)計(jì)自己的硬件平臺(tái),詳細(xì)介紹了平臺(tái)的組成部分和各自的功能。第四章主要介紹了移動(dòng)端、接收端和上位機(jī)軟件方面的設(shè)計(jì)。第五章主要講了系統(tǒng)調(diào)試方面所遇到的問題,以及對(duì)該問題的分析,并提出解決方法。第六章對(duì)本次的設(shè)計(jì)工作進(jìn)行了總結(jié),包括所思、所感、所得等。第二章系統(tǒng)總體方案設(shè)計(jì)與論證2.1系統(tǒng)組成根據(jù)對(duì)本系統(tǒng)基本功能的理解,可為本系統(tǒng)描述一個(gè)基本的使用場景:當(dāng)顧客從服務(wù)員手中拿到點(diǎn)菜系統(tǒng)的移動(dòng)端,餐桌號(hào)已由服務(wù)員預(yù)先輸入,此時(shí)播放語音提示,提示顧客直接進(jìn)入點(diǎn)菜流程,通過觸屏顧客一頁頁的瀏覽菜單,包括價(jià)格、菜品圖片、菜系等信息,最終顧客完成點(diǎn)菜,單擊“完成”按鈕,進(jìn)行語音溫馨提醒“美味稍等片刻”,此后屏幕再次恢復(fù)到點(diǎn)菜前的界面,為豐富顯示內(nèi)容,此時(shí)顯示實(shí)時(shí)溫度,直到觸發(fā)進(jìn)入下次點(diǎn)菜流程。而電腦端在接收到經(jīng)過解碼的數(shù)據(jù)之后,信息入庫,提示有一新菜單。這樣移動(dòng)端與接收端就協(xié)調(diào)工作最終完成一次點(diǎn)單流程。由此可確定本系統(tǒng)的硬件系統(tǒng)應(yīng)包括語音模塊、TFT彩屏模塊、主控模塊、存儲(chǔ)模塊、無線模塊、觸屏模塊、溫度檢測模塊。其移動(dòng)端系統(tǒng)結(jié)構(gòu)框圖如圖2-1,連接電腦的接收端系統(tǒng)結(jié)構(gòu)框圖如圖2-2。圖2-1移動(dòng)端系統(tǒng)結(jié)構(gòu)圖圖2-1移動(dòng)端系統(tǒng)結(jié)構(gòu)圖圖2-2接收端系統(tǒng)結(jié)構(gòu)圖在確定了系統(tǒng)的總體方案后再逐步細(xì)化到各模塊,下面將對(duì)系統(tǒng)各模塊的選型及其簡介進(jìn)行闡述。2.2總體方案設(shè)計(jì)2.2.1主控制器模塊在開題報(bào)告中曾經(jīng)將主控制器選為MC9S12XS128,這是基于對(duì)彩屏刷屏速率的考慮,在之后的硬件調(diào)試中發(fā)現(xiàn)將MC9S12XS128的時(shí)鐘頻率設(shè)置在32MHZ時(shí),彩屏的刷屏速度并不是很快,平均顯示一張320*240的圖片會(huì)用38S左右的時(shí)間,而將頻率設(shè)為40MHZ以后,刷屏速率也并無明顯增快。而且因?yàn)闆]有用文件系統(tǒng),存儲(chǔ)的圖片是用Image2Lcd軟件轉(zhuǎn)換成bin的二進(jìn)制格式,存儲(chǔ)在1G內(nèi)存卡里面,當(dāng)頻率設(shè)置過高后讀SD卡會(huì)變得不穩(wěn)定,錯(cuò)誤率過高。故處于上述考慮,將主控制模塊換為STC90C516RD+,該款單片機(jī)最高可使用40M晶振[2],經(jīng)測試使用24M晶振后,單片機(jī)平均顯示一張320*240的圖片會(huì)用46S左右的時(shí)間,而讀內(nèi)存卡時(shí)由于速度不是很快,傳輸誤碼率也幾乎可以忽略。故將主控模塊選為該款單片機(jī)。下面將對(duì)STC90C516RD+單片機(jī)進(jìn)行簡要介紹。STC90C516RD+系列單片機(jī)是宏晶科技推出的新一代增強(qiáng)型單片機(jī),具有抗干擾/高速/低功耗的的特點(diǎn),完全兼容傳統(tǒng)的8051單片機(jī)指令碼,可任意選擇12時(shí)鐘/機(jī)器周期或6時(shí)鐘/機(jī)器周期,內(nèi)部整合了MAX810專用復(fù)位電路,時(shí)鐘頻率在12MHz以下時(shí),復(fù)位腳可直接接地[3]。工作電壓:5.5V-3.8V(5V單片機(jī))/3.8V-2.4V(3V單片機(jī));工作頻率范圍:0-40MHz;用戶所使用的應(yīng)用程序空間最大可達(dá)61KB;內(nèi)部集成了1280字節(jié)/512/256字節(jié)RAM;通用I/O口(35/39個(gè)),復(fù)位后為:P1/P2/P3是準(zhǔn)雙向口/弱上拉,P0口是開漏輸出,作為總線擴(kuò)展用時(shí),不用加上拉電阻,作為I/O口用時(shí),需加上拉電阻;ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用編程器/仿真器,可通過串口(P3.0/P3.1)直接下載用戶程序,8K程序3-5秒即可完成一片;電可擦除只讀存儲(chǔ)功能;內(nèi)部集成看門狗功能;片上集成MAX810專用復(fù)位電路,外部晶體12M以下時(shí),可不接外部復(fù)位電路,此時(shí)復(fù)位腳可直接接地;共2個(gè)16位定時(shí)器/計(jì)數(shù)器,其中定時(shí)器0還可以當(dāng)成2個(gè)8位定時(shí)器使用;2路外部中斷,采用下降沿中斷或低電平方式觸發(fā)中斷,低功耗模式可由外部中斷以低電平方式觸發(fā)中斷喚醒;1路通用異步串行口(UART),方便傳輸數(shù)據(jù);工作溫度范圍:0-75℃/-40-+85℃;封裝:LQFP-44,PDIP-40,PLCC-44;2.1.2無線模塊根據(jù)要求無線模塊選用NRF24L01?,F(xiàn)在國際上有很多公司生產(chǎn)基于ZigBee協(xié)議的芯片,芯片的集成度也越來越高。例如挪威的Nordic公司的NRF系列芯片,還有Chipcon公司的無線數(shù)據(jù)傳輸芯片等。各個(gè)公司的芯片原理基本相同,編程規(guī)則大致相同,因此選用Nordic公司的NRF24L01也能符合系統(tǒng)要求,下面詳細(xì)敘述一下NRF24L01芯片的特點(diǎn)[4]。同藍(lán)牙一樣NRF24L01無線收發(fā)一體芯片也工作在2.4GHZ自由頻段,能夠在世界各地的無線領(lǐng)域暢通無阻。NRF24L01支持多點(diǎn)間的通信,比藍(lán)牙具有更高的傳輸速度,最高傳輸速率可超過1Mbit/s。它采用SOC方法設(shè)計(jì),僅需焊接少量的外圍元件便可組成一塊射頻收發(fā)電路。與藍(lán)牙不同的是,NRF24L01沒有復(fù)雜的通信協(xié)議,方便用戶使用,相同產(chǎn)品之間可以自由通信而無限制。更重要的是,NRF24L01的價(jià)格比藍(lán)牙產(chǎn)品更低。因此NRF24L01是業(yè)界體積最小、功耗最少、外圍元件最少的低成本射頻系統(tǒng)級(jí)芯片。NRF24L01的內(nèi)部結(jié)構(gòu)原理及外部組成框圖如圖2-3所示,它主要有四種工作方式。
圖2-3NRF24L01的內(nèi)部結(jié)構(gòu)原理及外部組成框圖1.待機(jī)模式待機(jī)模式1在保證快速啟動(dòng)的同時(shí)降低了系統(tǒng)平均消耗電流。晶振在待機(jī)模式1下正常工作。而在待機(jī)模式2下僅有部分時(shí)鐘緩沖器處在工作狀態(tài)。當(dāng)發(fā)送端發(fā)送輸入輸出寄存器為空并且引腳CE電平為高時(shí)進(jìn)入待機(jī)模式2。在處于待機(jī)模式時(shí),芯片保持寄存器配置字內(nèi)容不變。2.掉電模式工作在掉電模式時(shí),關(guān)閉NRF24L01各功能,保持著最小的電流消耗。而在進(jìn)入掉電模式后,NRF24L01停止工作,但保持寄存器內(nèi)容不變。掉電模式由寄存器中PWR_UP位來控制。3.ShockBurstTM模式ShockBurstTM模式下該芯片可以與成本較低的低速M(fèi)CU連接。高速信號(hào)處理是由芯片本部的射頻協(xié)議處理的,NRF24L01提供SPI接口,數(shù)據(jù)率取決于單片機(jī)本身接口速度。在ShockBurstTM模式下,當(dāng)接收到有效的地址和數(shù)據(jù)時(shí)IRQ通知MCU,隨后MCU可將接收到的數(shù)據(jù)從RXFIFO寄存器中讀出。4.增強(qiáng)型ShockBurstTM模式增強(qiáng)型ShockBurstTM模式使得執(zhí)行雙向鏈接協(xié)議更為容易、有效。一般典型的雙向鏈接為:發(fā)送方要求接收端設(shè)備在接收到數(shù)據(jù)后應(yīng)有應(yīng)答信號(hào),以便于發(fā)送方檢測是否有數(shù)據(jù)丟失的情況,一旦發(fā)生數(shù)據(jù)丟失,則重新發(fā)送丟失的數(shù)據(jù)將該數(shù)據(jù)恢復(fù)。在增強(qiáng)型的ShockBurstTM模式下可以同時(shí)控制應(yīng)答及重發(fā)功能而無需增加MCU的工作量。2.1.3彩屏模塊彩屏顯示較傳統(tǒng)12864等顯示屏顯示更為美觀,可顯示內(nèi)容更多。但彩屏相對(duì)價(jià)格也比較昂貴,本次設(shè)計(jì)采用分辨率為320*240的2.8寸屏幕,控制器為ILI9325,并行端口操作,一般市場價(jià)格為50左右,相對(duì)低廉。且彩屏上附觸屏,減少外圍電路設(shè)計(jì)。ILI9325有一個(gè)16位的變址寄存器(IR)、一個(gè)18位的寫數(shù)據(jù)寄存器(WDR)和一個(gè)18位的讀數(shù)據(jù)寄存器(RDR)。變址寄存器(IR)存儲(chǔ)來自控制寄存器和內(nèi)部的GRAM的指令信息。寫數(shù)據(jù)寄存器(WDR)用來暫時(shí)存儲(chǔ)要被寫到控制寄存器和內(nèi)部的GRAM中的數(shù)據(jù)。讀數(shù)據(jù)寄存器(RDR)用來暫時(shí)存儲(chǔ)從GRAM中讀取的數(shù)據(jù)。MCU中要寫入內(nèi)部GRAM的數(shù)據(jù),首先寫到寫數(shù)據(jù)寄存器(WDR),然后再由內(nèi)部操作自動(dòng)的寫到內(nèi)部的GRAM中。要讀取的數(shù)據(jù)要通過讀數(shù)據(jù)寄存器(RDR)從內(nèi)部GRAM中讀取,因此無效數(shù)據(jù)將被讀到數(shù)據(jù)總線,當(dāng)ILI9325從內(nèi)部的GRAM中讀取第一個(gè)數(shù)據(jù)的時(shí)候,有效數(shù)據(jù)將在ILI9325進(jìn)行了第二次讀操作之后被讀出。寄存器在寄存器執(zhí)行時(shí)間中會(huì)被連續(xù)的寫入數(shù)據(jù),除非在振蕩器起震的時(shí)候執(zhí)行了0個(gè)循環(huán)。ILI9325根據(jù)外部的接口和顯示移動(dòng)圖片的情況提供了并行的RGB接口和VSYNC(垂直同步)接口。當(dāng)RGB接口被選擇,顯示操作將和外部提供的信號(hào)VSYNC,HSYNC,DOTCLK同步。在RGB模式,根據(jù)使能信號(hào)的極性(高電平或是低電平)數(shù)據(jù)(DB17-0)將會(huì)根據(jù)這些同步信號(hào)被寫入來阻止在數(shù)據(jù)更新的時(shí)候屏幕閃爍。2.1.4SD卡模塊單片機(jī)內(nèi)部僅有最大61KB的ROM,而一副50*50像素的圖片就有5000字節(jié)的數(shù)據(jù),所以依靠單片機(jī)內(nèi)部的存儲(chǔ)容量是遠(yuǎn)遠(yuǎn)不夠的,所以本次設(shè)計(jì)為了存儲(chǔ)顯示的圖片,采用內(nèi)存卡存儲(chǔ)。并且由于后期產(chǎn)品升級(jí)的時(shí)候會(huì)有菜單信息等需要更新,所以將關(guān)于菜單方面的圖片等存儲(chǔ)在內(nèi)存卡里面也,這樣便于更換里面的文件。SD卡的技術(shù)是基于MultiMedia卡(MMC)格式上發(fā)展而來,大小和MMC差不多,尺寸為32mm*24mm*2.1mm。SD卡與MMC卡保持著向上兼容。
SD卡內(nèi)部主要分兩部分:存儲(chǔ)介質(zhì)(nandflash)和主控制器。以51為核心而設(shè)計(jì)的主控制器,內(nèi)部鎖相環(huán)電路最高可以倍頻到近100M。而作為存儲(chǔ)介質(zhì)的nandflash容量從1Gbit至128Gbit,甚至還高。
其主要分類有:
1.MMC卡:結(jié)構(gòu)類似SD卡,采用MMC協(xié)議。
2.SD1.0:SD1.0卡最大可支持容量達(dá)2Gbyte。
3.SD2.0:SD2.0卡最大可支持容量達(dá)32Gbyte。這三種卡的協(xié)議是向上兼容的。也就是說SD2.0可以兼容SD1.0協(xié)議,SD1.0可以兼容MMC卡協(xié)議,即MMC協(xié)議的指令可以操SD1.0、SD2.0,同理SD1.0協(xié)議的命令可以操作SD2.0卡。所以平時(shí)看到初始化SD卡的時(shí)候只用了CMD0和CMD1兩條命令就可以讓上面三類卡進(jìn)入傳輸狀態(tài)的原因:使用MMC卡協(xié)議初始化時(shí)只定義了CMD0和CMD1。
SD卡接口支持SD和SPI兩種模式。在SD模式下采用4線并行模式,占用更多的端口。一般為提高傳輸速度,多媒體存儲(chǔ)設(shè)備都會(huì)采用此種接口,而SPI模式更適合于低端MCU的使用,傳輸速度有限。
圖2-4 SD卡引腳封裝圖2-4 SD卡引腳封裝2.1.5觸屏模塊基于目前主流的輸入方式是觸屏輸入,本次設(shè)計(jì)采用觸屏輸入方式一方面是為了迎合趨勢,另一方面采用此種輸入方式可大大簡化硬件電路設(shè)計(jì),且輸入的信息可根據(jù)軟件而定制,比傳統(tǒng)的鍵盤輸入方式更為靈活。由于價(jià)格的原因本次設(shè)計(jì)采用電阻屏,驅(qū)動(dòng)芯片利用集成的XPT2046。電阻觸摸屏的工作原理主要是通過壓力感應(yīng)原理來實(shí)現(xiàn)對(duì)屏幕內(nèi)容的操作和控制的,這種觸摸屏屏體部分是一塊與顯示器表面非常配合的多層復(fù)合薄膜。面板(PET)面板(PET)下電極(ITO膜或ITO玻璃)OCA光學(xué)膠背板(PC等)鍵片上電極(ITO膜)OCA光學(xué)膠圖2-5 電阻式觸屏結(jié)構(gòu)圖2-5 電阻式觸屏結(jié)構(gòu)不同線制的電阻屏坐標(biāo)計(jì)算方法也不一樣,我所采用的是四線電阻屏。當(dāng)有物體施加一定的壓力在觸摸屏表面時(shí),導(dǎo)致上層的ITO導(dǎo)電層發(fā)生形變與下層的ITO層發(fā)生接觸,該結(jié)構(gòu)可等效為圖2-6Y-X-Y-X-Y+X+圖2-6 觸摸時(shí)等效電路圖2-6 觸摸時(shí)等效電路可分為如下兩步計(jì)算觸點(diǎn)的X,Y坐標(biāo):1.計(jì)算X坐標(biāo),在電極X+端施加驅(qū)動(dòng)電壓Vdrive,X-電極接地,測量引出端Y+的電壓,由于ITO層均勻?qū)щ?Y+端的電壓與Vdrive電壓之比等于觸點(diǎn)X坐標(biāo)與屏幕的寬度之比,即2.計(jì)算Y坐標(biāo),在電極Y+端施加驅(qū)動(dòng)電壓Vdrive,Y-電極接地,測量引出端X+的電壓,由于ITO層均勻?qū)щ?,X+端的電壓與Vdrive電壓之比等于觸點(diǎn)Y坐標(biāo)與屏幕的高度之比,即 驅(qū)動(dòng)芯片XPT2046是一種典型的逐次逼近模數(shù)轉(zhuǎn)換器(SARADC),包含了采樣/保持、模數(shù)轉(zhuǎn)換、串口數(shù)據(jù)輸出等功能。同時(shí)芯片集成有一個(gè)2.5V的內(nèi)部參考電壓源、溫度檢測電路,工作時(shí)使用外部時(shí)鐘。XPT2046可以單電源供電,電源電壓范圍為2.7V~5.5V。參考電壓值直接決定ADC的輸入范圍,參考電壓可以使用內(nèi)部參考電壓,也可以從外部直接輸入1V~VCC范圍內(nèi)的參考電壓(要求外部參考電壓源輸出阻抗低)。X、Y、Z、VBAT、Temp和AUX模擬信號(hào)經(jīng)過片內(nèi)的控制寄存器選擇后進(jìn)入ADC,ADC可以配置為單端或差分模式。選擇VBAT、Temp和AUX時(shí)可以配置為單端模式,作為觸摸屏應(yīng)用時(shí),可以配置為差分模式,這可有效消除由于驅(qū)動(dòng)開關(guān)的寄生電阻及外部的干擾帶來的測量誤差,提高轉(zhuǎn)換準(zhǔn)確度。在有觸摸動(dòng)作時(shí)的坐標(biāo)轉(zhuǎn)換由XPT2046完成,在得到坐標(biāo)值后,會(huì)向MCU發(fā)出IRQ通知信號(hào),單片機(jī)讀取數(shù)據(jù)后經(jīng)轉(zhuǎn)換程序,轉(zhuǎn)換為屏幕上對(duì)應(yīng)的像素點(diǎn),這樣就完成了一次觸屏取樣過程。2.1.6語音模塊本系統(tǒng)在設(shè)計(jì)時(shí)提出語音提示,這是一款人性化的產(chǎn)品所必須的,并且在最后的設(shè)計(jì)中由于大量端口的復(fù)用,最后不得不放棄震動(dòng)提示的功能,這也使得該模塊的存在意義重大。語音模塊保持原來的設(shè)計(jì)思路,采用集成的WTV020-SD模塊,可外置SD卡,將語音用特定軟件轉(zhuǎn)換成ad4格式后,再將語音數(shù)據(jù)按照順序存儲(chǔ)于SD卡內(nèi),單片機(jī)只需按照時(shí)序進(jìn)行相應(yīng)觸發(fā)即可播放特定語音,使用方便,外圍電路簡單。2.1.7電源模塊設(shè)計(jì)中有單片機(jī)、TFT彩屏、觸屏模塊需5V供電,而SD卡、NRF24L01、WTV020-SD模塊需3.3V供電,所以本系統(tǒng)電源模塊中必須能同時(shí)提供5V、3.3V的電源。其中5V采用LM7805穩(wěn)壓,而3.3V則采用AMS11173.3經(jīng)5V降壓產(chǎn)生,該電路技術(shù)也很成熟,只需在焊接引腳時(shí)需要注意一下。2.1.8傳感器模塊由于單片機(jī)的刷屏速率不高,為了在不操作本系統(tǒng)時(shí),豐富彩屏的顯示內(nèi)容,并且又能夠顯示一些實(shí)用信息而不占用過多的端口資源,所以采用單總線式溫度傳感器DS18B20。所謂的單總線接口是指僅需一個(gè)端口引腳進(jìn)行通訊,而無需外部器件,由數(shù)據(jù)線供電,待機(jī)功耗為零。測溫范圍為-55~+125℃,以0.5℃遞增,溫度以9位數(shù)字量讀出,轉(zhuǎn)換溫度數(shù)字量時(shí)間為200ms(典型值)。用戶可自定義非易失性報(bào)警溫度,傳感器報(bào)警搜索命令識(shí)別并標(biāo)識(shí)超過用戶所限定溫度(溫度報(bào)警條件)的器件。DS18B20是這樣測溫的:用一個(gè)高溫度系數(shù)的振蕩器確定一個(gè)門周期,在這個(gè)門周期內(nèi),內(nèi)部計(jì)數(shù)器對(duì)一個(gè)低溫度系數(shù)的振蕩器的脈沖進(jìn)行計(jì)數(shù),從而來得到溫度值。計(jì)數(shù)器一開始被預(yù)置到對(duì)應(yīng)于-55℃的一個(gè)值,如果在門周期結(jié)束前計(jì)數(shù)器到達(dá)0,則增加溫度寄存器的值,表示所測得的溫度大于-55℃。同時(shí),將計(jì)數(shù)器復(fù)位到某個(gè)值,這個(gè)值由斜坡式累加器電路確定,用以補(bǔ)償感溫振蕩器的拋物線特性。之后計(jì)數(shù)器又重新計(jì)數(shù)直到0,如果仍未結(jié)束門周期,將一直重復(fù)上述過程。為了獲得更高的分辨率可用下述方法。首先,讀取傳感器所測得的溫度值,并將表示0.5℃位(LSB)的值從讀取的值中截去,這個(gè)值叫做READ。然后再讀取計(jì)數(shù)器中剩余的值,這個(gè)值是在門周期結(jié)束后所保留下來的值,這個(gè)值叫做REMAIN。最后,我們用到在這個(gè)溫度下每度的計(jì)數(shù)值PER_C。用戶可以用公式計(jì)算實(shí)際溫度值。2.1.9串口模塊由于接收端需要和上位機(jī)進(jìn)行通訊,所以需要應(yīng)用到串口模塊,串口通信的兩種最基本的方式有同步串行通信方式和異步串行通信方式。同步串行是指SPI(SerialPeripheralInterface)的縮寫,顧名思義就是串行外圍設(shè)備接口。SPI總線系統(tǒng)是一種同步串行外設(shè)接口,它可以使MCU與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息,TRM450是SPI接口。異步串行是指UART(UniversalAsynchronousReceiver/Transmitter),通用異步接收/發(fā)送。UART是一個(gè)并行輸入成為串行輸出的芯片。UART包含TTL電平的串口和RS232電平的串口。TTL電平是3.3V的,而RS232是負(fù)邏輯電平,它定義+5~+12V為低電平,而-12~-5V為高電平。本次設(shè)計(jì)采用異步串行通信方式。轉(zhuǎn)換芯片使用美信(MAXIM)公司專為RS-232標(biāo)準(zhǔn)串口設(shè)計(jì)的MAX232芯片,使用+5V單電源供電。圖2-7 MAX232內(nèi)部電路及外圍接口電路圖2-7 MAX232內(nèi)部電路及外圍接口電路第三章硬件電路設(shè)計(jì)3.1主控制器模塊單片機(jī)最小系統(tǒng)做為整個(gè)開發(fā)板的控制中心,控制各個(gè)外圍電路協(xié)調(diào)工作,完成系統(tǒng)設(shè)計(jì)的功能。單片機(jī)工作時(shí)需要為其焊接一個(gè)最小應(yīng)用系統(tǒng)板,其上電路應(yīng)包括復(fù)位電路、時(shí)鐘電路。圖3-151最小系統(tǒng)板原理圖圖3-151最小系統(tǒng)板原理圖外部RST引腳復(fù)位就是從外部向RST引腳加一定寬度的復(fù)位脈沖,從而實(shí)現(xiàn)單片機(jī)的復(fù)位。將RST復(fù)位管腳拉高并維持至少24個(gè)時(shí)鐘加10us后,單片機(jī)會(huì)進(jìn)入復(fù)位狀態(tài),將RST復(fù)位管腳拉回低電平后,單片機(jī)結(jié)束復(fù)位狀態(tài)并從用戶程序區(qū)的0000H處開始正常工作。時(shí)鐘電路負(fù)責(zé)為單片機(jī)提供能源。XTAL1內(nèi)部時(shí)鐘電路反相放大器的輸入端,接外部晶振的一個(gè)引腳。當(dāng)直接使用外部時(shí)鐘源時(shí),此引腳接外部時(shí)鐘源的輸入端。XTAL2內(nèi)部時(shí)鐘電路反相放大器的輸出端,接外部晶振的另一引腳。當(dāng)直接使用外部時(shí)鐘源時(shí),此引腳可浮空,此時(shí)XTAL2實(shí)際將XTAL1輸入的時(shí)鐘進(jìn)行輸出。我用的是典型的時(shí)鐘電路,時(shí)鐘從XTAL1進(jìn)再從XTAL2出來。上圖的第40、20引腳分別接電源的Vcc、Gnd,負(fù)責(zé)為單片機(jī)供電。第31引腳為內(nèi)外存儲(chǔ)器選擇引腳,本系統(tǒng)中將其拉高,選擇內(nèi)部存儲(chǔ)器,此時(shí)PSEN、ALE引腳可浮空。由于PO口默認(rèn)為高阻狀態(tài)所以為PO口加上上拉電阻。3.2無線模塊無線模塊根據(jù)要求用NRF24L01,該模塊的電路如圖3-2。圖3-2圖3-2NRF24L01應(yīng)用電路將上述電路焊接好并通過預(yù)留的插針連接到單片機(jī),這樣將無線模塊與最小系統(tǒng)板通過拔插的方式連接,這樣無論在硬件還是在軟件上改變單片機(jī)與其連接的引腳時(shí)都非常方便。圖3-3 預(yù)留的引腳圖3-3 預(yù)留的引腳VCC腳所接電壓范圍為1.9V~3.6V之間,而不能在這個(gè)區(qū)間之外,大于3.6V將會(huì)毀壞該模塊。推薦使用電壓3.3V左右。除了電源VCC和接地端之外,其余引腳均可直接和普通的5V單片機(jī)IO口直接相連,無需電平轉(zhuǎn)換,當(dāng)然這個(gè)模塊也更加適用于3V單片機(jī)了。在硬件上面沒有SPI的單片機(jī)同樣也可以控制本模塊,單片機(jī)用軟件模擬SPI通訊協(xié)議,用普通IO口即可。3.3TFT彩屏模塊TFT彩屏模塊利用購買的現(xiàn)成模塊,利用FPC接口將其與單片機(jī)進(jìn)行連接。圖3-4圖3-4FPC接口該模塊采用并行數(shù)據(jù)傳輸方式,DB0~DB7、DB10~DB17為其數(shù)據(jù)端口,占用單片機(jī)大量端口,使得單片機(jī)僅有的32個(gè)通用I/O引腳一下子用去16個(gè),剩余模塊的端口資源所剩無幾,這也為之后的單片機(jī)編程提出要求,需要統(tǒng)籌規(guī)劃各模塊,否則對(duì)于復(fù)用的端口易引起沖突。引腳名稱功能CS片選RS數(shù)據(jù)/命令RW讀RD寫DB0-DB7數(shù)據(jù)低8位DB10-DB17數(shù)據(jù)高8位LED背光-極LED_K背光+極VCCTFT電源+GNDTFT電源-表3-1FPC接口引腳說明表3-1FPC接口引腳說明3.4SD卡模塊SD卡支持兩種總線方式:SD方式與SPI方式。其中SD方式采用6線制,使用CLK、CMD、DAT0~DAT3進(jìn)行數(shù)據(jù)通信。而SPI方式采用4線制,使用CS、CLK、MOSI、MISO進(jìn)行數(shù)據(jù)通信。SD方式的數(shù)據(jù)傳輸速度比SPI方式要快,采用單片機(jī)對(duì)SD卡進(jìn)行讀寫時(shí)一般都采用SPI模式。采用不同的初始化方式可以使SD卡工作于SD方式或SPI方式。圖3-5SD卡應(yīng)用電路圖3-5SD卡應(yīng)用電路SD卡的工作電壓是3.3V,并且若用5V單片機(jī)直接驅(qū)動(dòng)SD卡時(shí)需要為各端口加一限流電阻。表3-2SD卡引腳說明表3-2SD卡引腳說明引腳編號(hào)SD模式SPI模式名稱類型描述名稱類型描述1CD/DAT3IO或PP卡檢測/數(shù)據(jù)線3CSI片選2CMDPP命令/回應(yīng)DII數(shù)據(jù)輸入3VSS1S電源地VSSS電源地4VDDS電源VDDS電源5CLKI時(shí)鐘SCLKI時(shí)鐘6VSS2S電源地VSS2S電源地7DAT0IO或PP數(shù)據(jù)線0DOO或PP數(shù)據(jù)輸出8DAT1IO或PP數(shù)據(jù)線1RSV9DAT2IO或PP數(shù)據(jù)線2RSV注:S:電源供給 I:輸入、O:采用推拉驅(qū)動(dòng)的輸出PP:采用推拉驅(qū)動(dòng)的輸入輸出本系統(tǒng)設(shè)計(jì)時(shí)只是希望將SD卡作為一個(gè)大的存儲(chǔ)器,實(shí)現(xiàn)簡單的扇區(qū)讀寫,沒有引用復(fù)雜的文件系統(tǒng),那樣無疑會(huì)增加軟件的編寫難度,也并沒有必要。用51單片機(jī)操作SD實(shí)現(xiàn)對(duì)它的讀寫,最核心的是它的時(shí)序,采用SD方式或SPI方式,也具有不同的操作方法。SD方式提供更大的總線數(shù)據(jù)帶寬,但占用的端口也更多,所以本次設(shè)計(jì)采用SPI方式。3.5觸屏模塊本次設(shè)計(jì)中采用的是四線電阻屏,XPT2046的典型應(yīng)用電路如圖3-6。PENIRQ變低并作為處理器的中斷信號(hào)。在測量X、Y和Z坐標(biāo)的過程中,XP輸入將與PENIRQ內(nèi)部上拉電阻分離,這樣可以避免來自這個(gè)內(nèi)部上拉電阻的漏電流流過觸摸屏,同時(shí)也避免了誤差。此外,在X、Y和Z坐標(biāo)測量中,PENIRQ被禁止,輸出為低電平;在測量VBAT、AUX和temp過程中,PENIRQ被禁止,輸出為高電平。如果最后寫進(jìn)XPT2046的控制字包含了PD0=1,筆中斷輸出功能禁止,不能監(jiān)測觸摸屏上觸摸動(dòng)作。在這些情況下,要重新使能筆中斷輸出功能,需把帶有PD0=0的控制字寫進(jìn)XPT2046。如果在最后寫入的控制字中包含了PD0=0,筆中斷輸出將在這次轉(zhuǎn)換結(jié)束后使能。轉(zhuǎn)換結(jié)束發(fā)生在輸出轉(zhuǎn)換數(shù)據(jù)位1時(shí)的DCLK時(shí)鐘的下降沿。建議無論在任何時(shí)候,處理器在發(fā)控制字給XPT2046之前都要屏蔽PENIRQ的中斷,以避免錯(cuò)誤的中斷的觸發(fā)。圖3-6XPT2046應(yīng)用電路圖3-6XPT2046應(yīng)用電路3.6語音模塊語音模塊采用購買現(xiàn)成的WTV020-SD模塊,這是一款大容量存儲(chǔ)類型的可重復(fù)擦寫語音內(nèi)容的語音模塊,最大可外掛容量為1GB的MicroSD卡。能加載AD4格式語音和WAV格式語音。WTV020-SD模塊SD卡存儲(chǔ)器控制端WTV020-SD模塊SD卡存儲(chǔ)器控制端音頻輸出BUSY輸出圖3-7WTV020-SD應(yīng)用方框圖圖3-7WTV020-SD應(yīng)用方框圖由于本設(shè)計(jì)中需要用單片機(jī)控制其語音播放,可利用該模塊的二線串口控制模式來達(dá)到控制目的,封裝好的模塊其應(yīng)用電路圖如圖3-8。圖3-8WTV020-SD應(yīng)用電路圖3-8WTV020-SD應(yīng)用電路音頻信號(hào)選擇從SPK+、SPK-端輸出到揚(yáng)聲器。該模塊可直接驅(qū)動(dòng)0.5W揚(yáng)聲器。但由于沒有找到小功率的揚(yáng)聲器,故在SPK+后加了LM386功放電路,增益200,以此來驅(qū)動(dòng)2W的揚(yáng)聲器。選擇二線串口控制模式,脈沖觸發(fā),由MCU或按鍵對(duì)I/O口進(jìn)行控制。I/O口P02、P03、P07分別為下一曲、上一曲、播放/停止功能,P04為CLK輸入,P05為DI輸入,P04、P05組成二線串口控制模式。SD卡支持根目錄文件讀取方式,就是說,只把文件放置到SD卡的根目錄就可以了。文件名為十六進(jìn)制數(shù)據(jù),包括WAV、AD4格式音頻文件均如此,如0000.AD4、0001.AD4等。最多可讀取到前512個(gè)音頻文件。按鍵類型控制模式進(jìn)行控制時(shí),如點(diǎn)擊“下一曲”可觸發(fā)下一段音頻,按文件名的數(shù)據(jù)順序進(jìn)行觸發(fā)。并口模式和二線串口模式則直接發(fā)送文件名的二進(jìn)制數(shù)據(jù),進(jìn)行觸發(fā)播放語音。焊接按鍵主要是為了測試用,也可不用焊接。3.7電源模塊本次設(shè)計(jì)中需要有5V和3.3V供電電路,其中5V供電采用LM7805,而3.3V采用AMS11173.3穩(wěn)壓芯片。并且焊接了一個(gè)開關(guān)和電源指示燈,方便操作和觀察,其應(yīng)用電路如圖3-9。圖3-9電源模塊應(yīng)用電路圖3-9電源模塊應(yīng)用電路3.8溫度傳感器模塊DS18B20通過單總線發(fā)送或接收信息,在單片機(jī)和DS18B20之間只需要一條連接線即可。無需外部電源,用于讀寫和溫度轉(zhuǎn)換的電源可以從數(shù)據(jù)線本身獲得。圖3-10DS18B20應(yīng)用電路圖3-10DS18B20應(yīng)用電路因?yàn)槌鰪S時(shí)每個(gè)DS18B20都有一個(gè)獨(dú)特的片序列號(hào),所以多只DS1820可以同時(shí)連在一根單總線上,這樣就大大簡化了電路的設(shè)計(jì),讀取某個(gè)DS18B20的溫度只需先進(jìn)行片序列號(hào)匹配即可。3.9串口模塊同上位機(jī)通訊需要將TTL和RS232電平進(jìn)行轉(zhuǎn)換,采用MAX232芯片完成這樣的功能,其原理圖如圖3-11。圖3-10 MAX232原理圖圖3-10 MAX232原理圖圖3-11 MAX232原理圖圖3-11 MAX232原理圖通訊時(shí)利用單片機(jī)的P30、P31來進(jìn)行串口通訊。設(shè)計(jì)上位機(jī)程序時(shí)若采用事件驅(qū)動(dòng)方式,由計(jì)算機(jī)直接管理時(shí),字節(jié)之間不可控,而且單片機(jī)串行口和PC機(jī)串行口速率差別較大,接收程序一定要精心合理的設(shè)計(jì),才能使傳輸穩(wěn)定可靠,否則很容易出現(xiàn)意想不到的問題。在調(diào)試過程中,如果不小心將串行口調(diào)試工具的波特率和開發(fā)板串行口的波特率設(shè)置為不同,就會(huì)出現(xiàn)錯(cuò)誤。第四章軟件的設(shè)計(jì)4.1開發(fā)調(diào)試工具驅(qū)動(dòng)程序是硬件電路的靈魂,沒有驅(qū)動(dòng)的硬件電路是沒有用的。STC89C516RD+是51類單片機(jī),可以像開發(fā)其他51單片機(jī)驅(qū)動(dòng)一樣開發(fā)它的驅(qū)動(dòng)程序。單片機(jī)軟件開發(fā)平臺(tái)選擇比較流行的KeiluVision4,因?yàn)楝F(xiàn)在關(guān)于KeiluVision4軟件的資料很多,這樣上手就會(huì)很快[5]。圖4-1是該軟件的運(yùn)行界面。圖4-1KeiluVision4運(yùn)行界面圖4-1KeiluVision4運(yùn)行界面而開發(fā)上位機(jī)軟件則采用VisualC++6.0,是微軟公司推出的一款優(yōu)秀開發(fā)工具。VisualC++6.0在不犧牲靈活性、性能和控制力度的同時(shí),給C++帶來了更高水平的生產(chǎn)效率。它具有可視化的界面,封裝了大量的類,使界面制作變的很簡單,使用它可以方便快捷地開發(fā)Windows環(huán)境下的應(yīng)用程序。VisualC++6.0專門為串行口通信提供了MSComm控件,使用該控件程序員不必花時(shí)間去了解比較復(fù)雜的API函數(shù),通過簡單修改控件的屬性和使用控件提供的方法就可以實(shí)現(xiàn)對(duì)串口的配置,完成串口發(fā)送和接收數(shù)據(jù)[6]。圖4-2是該軟件的運(yùn)行界面。圖4-2VisualC++6.0運(yùn)行界面圖4-2VisualC++6.0運(yùn)行界面4.2軟件調(diào)試整個(gè)數(shù)據(jù)傳輸系統(tǒng)有兩部分組成:與PC機(jī)相連的開發(fā)板為接收端,它不能移動(dòng),接收移動(dòng)端發(fā)送過來的數(shù)據(jù),經(jīng)編碼成預(yù)定的格式向上位機(jī)發(fā)送數(shù)據(jù);可以移動(dòng)的為移動(dòng)端,它由開發(fā)板和無線數(shù)據(jù)傳輸?shù)饶K組成。由于兩端的地位和功能不同,因此對(duì)應(yīng)的驅(qū)動(dòng)程序也不同。4.2.1移動(dòng)端硬件驅(qū)動(dòng)程序移動(dòng)端的硬件驅(qū)動(dòng)程序主要功能有:驅(qū)動(dòng)TFT彩屏、讀觸屏坐標(biāo)、操作SD卡、播放語音、讀取實(shí)時(shí)溫度、無線發(fā)送點(diǎn)菜數(shù)據(jù)。對(duì)于程序的編寫如果按照以前那樣全部寫在一個(gè)文件里,大量的代碼,不易于維護(hù)及修改,程序出錯(cuò)了難以定位,故采用構(gòu)件化的方式將各模塊的驅(qū)動(dòng)程序分開來寫,然后再添加到工程,程序結(jié)構(gòu)清晰[7]。表4-1移動(dòng)端端口分配表模塊引腳名稱端口備注ILI9325TFT彩屏模塊RSP2^4復(fù)用WRP2^5復(fù)用CSP2^6不可復(fù)用RSTP2^7不可復(fù)用DATA_HP1不可復(fù)用DATA_LP0不可復(fù)用DS18B20溫度傳感器DATAP2^5復(fù)用XPT2046觸屏模塊DCLKP2^4復(fù)用CSP3^3不可復(fù)用DINP3^1未復(fù)用DOUTP2^0復(fù)用IRQP3^2不可復(fù)用WTV020-SD語音模塊RST未使用CLKP2^2不可復(fù)用DIP2^1不可復(fù)用SD卡DCLKP2^5復(fù)用DIP2^4復(fù)用DOP3^6不可復(fù)用CSP3^7不可復(fù)用NRF24L01無線模塊MISOP3^0未復(fù)用MOSIP2^3未復(fù)用SCKP2^0復(fù)用CEP3^5不可復(fù)用CSNP3^4不可復(fù)用在寫程序之前需要將每個(gè)模塊的所用的端口分配好,由于本設(shè)計(jì)MCU的端口嚴(yán)重不足,不得不復(fù)用端口,而由端口復(fù)用所產(chǎn)生的問題在編程時(shí)也很難查出來,所以編寫程序時(shí)需要格外注意。本次設(shè)計(jì)采用的方法是,先分別調(diào)試每個(gè)模塊,然后再綜合,表4-1是經(jīng)過調(diào)試后定下的端口分配表。圖4-3是移動(dòng)端主程序的流程圖,圖4-2為中斷流程圖。圖4-4中斷流程圖圖4-4中斷流程圖圖4-3移動(dòng)端主程序流程圖圖4-3移動(dòng)端主程序流程圖其中“*輸入桌號(hào)”、“*點(diǎn)菜”里面均是死循環(huán),通過跳轉(zhuǎn)程序轉(zhuǎn)到下一流程,這樣設(shè)計(jì)也是仿照VC++的窗口編程,每一個(gè)窗口都是一個(gè)while(1){...}循環(huán),只有收到特定的消息或滿足特定的條件才轉(zhuǎn)到另一個(gè)流程,“*輸入桌號(hào)”、“*點(diǎn)菜”這兩個(gè)流程內(nèi)部的流程分別如圖4-5、圖4-6。在圖4-4中斷流程圖中采用的是外部中斷0下降沿中斷方式,在觸屏有物體按下時(shí),XPT2046會(huì)發(fā)出中斷信號(hào)IRQ,單片機(jī)進(jìn)入中斷進(jìn)行相應(yīng)處理,在退出中斷時(shí)返回主程序繼續(xù)顯示實(shí)時(shí)溫度。圖4-5圖4-5“輸入桌號(hào)”流程圖在圖4-5中標(biāo)識(shí)“”的對(duì)應(yīng)于TFT屏幕上顯示的相應(yīng)按鈕,而流程圖中的“跳轉(zhuǎn)到diancai”、“跳轉(zhuǎn)到end”,其中的字母標(biāo)號(hào)是在程序中設(shè)置的某段程序的入口標(biāo)號(hào),當(dāng)滿足條件時(shí),如利用“gotodiancai;”這樣的程序進(jìn)行跳轉(zhuǎn),跳出死循環(huán),轉(zhuǎn)到下一個(gè)流程,類似于匯編里的JUMP指令,跳轉(zhuǎn)到某段程序的入口地址[8]。圖4-6“點(diǎn)菜圖4-6“點(diǎn)菜”流程圖在圖4-6中也用了圖4-5中的表示方法。并且在圖4-3主程序流程圖中用了“清全屏”,而在圖4-5“輸入桌號(hào)”流程圖和圖4-6“點(diǎn)菜”流程圖中用了“清屏”這是有區(qū)別的,因?yàn)閱纹瑱C(jī)的刷屏速率不高,在程序開始時(shí)才用了“清全屏”,這是必須的,因?yàn)門FT彩屏初始化成功后顯示的是一系列雜色,所以必須將整個(gè)屏幕進(jìn)行刷新,而之后在程序正常運(yùn)行時(shí)用“清屏”只是進(jìn)行局部刷新,只對(duì)需要改變的地方,進(jìn)行寫入新數(shù)據(jù),退出時(shí)再恢復(fù),這樣提高了運(yùn)行效率。不求單項(xiàng)設(shè)計(jì)的最先進(jìn)性,但求總體設(shè)計(jì)的合理性。在程序最后所發(fā)送的數(shù)據(jù)的格式為:桌號(hào),菜1,菜2,...,菜n,0x63,0x73。其中菜n表示該菜品所對(duì)應(yīng)的序號(hào),存儲(chǔ)于數(shù)組menu_data中,最大可存儲(chǔ)100字節(jié)的數(shù)據(jù),其中0x63是‘c’的ASCII字碼符,在接收端通過判斷是否接收到該字符作為結(jié)束標(biāo)志,而0x73是‘s’的ASCII字碼符,移動(dòng)端發(fā)送數(shù)據(jù)時(shí)通過判斷該字符來結(jié)束發(fā)送。NRF24L01一次性最多只能發(fā)送32字節(jié)的數(shù)據(jù),當(dāng)需要發(fā)送的數(shù)據(jù)非32的倍數(shù)時(shí),就會(huì)使得發(fā)送的最后一組數(shù)據(jù)并不是每個(gè)都是有效的,在定義NRF24L01最大發(fā)送個(gè)數(shù)時(shí),將其設(shè)置為1,這樣當(dāng)遇到‘s’時(shí)停止發(fā)送,發(fā)送方式更靈活,軟件編程更方便。在本設(shè)計(jì)中單片機(jī)通過軟件模擬SPI方式與NRF24L01傳輸數(shù)據(jù),數(shù)據(jù)發(fā)送函數(shù)如下:/*************************************************************//*函數(shù):NRF24L01_SingleSend(unsignedchar*tx_buf)/*功能:單個(gè)循環(huán)發(fā)送tx_buf中數(shù)據(jù)/*************************************************************/voidNRF24L01_SingleSend(unsignedcharTxBuf[]){unsignedchari=0;while(TxBuf[i]!='s') NRF24L01_TxPacket(&TxBuf[i++]); //TransmitTxbufferdata}4.2.2接收端硬件驅(qū)動(dòng)程序接收端的硬件驅(qū)動(dòng)程序主要有兩種功能:實(shí)現(xiàn)開發(fā)板通過串行口和PC機(jī)通信;實(shí)現(xiàn)開發(fā)板通過某些I/O口和無線數(shù)據(jù)傳輸模塊進(jìn)行通信。表4-2接收端端口分配表模塊引腳名稱端口備注NRF2401無線模塊MISOP2^5未復(fù)用MOSIP2^3未復(fù)用SCKP2^2未復(fù)用CEP2^1未復(fù)用CSNP2^4未復(fù)用串口通信模塊TXDP3^0未復(fù)用RXDP3^1未復(fù)用接收端僅有無線模塊和串口模塊,功能比較少,所以單片機(jī)的端口完全夠用,表4-7則為接收端的端口分配表。圖4-7接收端主程序流程圖圖4-7接收端主程序流程圖STC89C52RC單片機(jī)串行口的工作方式和波特率由控制寄存器SCON和特殊功能寄存器PCON組成。通過設(shè)置合適的波特率和幀格式,來實(shí)現(xiàn)開發(fā)板和PC機(jī)之間準(zhǔn)確的數(shù)據(jù)傳遞。串行口可以通過軟件設(shè)置四種工作方式,各種工作方式的數(shù)據(jù)格式和波特率均有所不同,在本設(shè)計(jì)中將串行口工作于方式2、8位數(shù)據(jù)位、1位停止位、無校驗(yàn)、波特率9600,用的函數(shù)為:voidStartUART(void)//晶振12M{ TMOD=0x20;SCON=0x50;TH1=0xFD;TL1=TH1;PCON=0x00;TR1=1;}接收端在接收到數(shù)據(jù)后將所有的數(shù)據(jù)轉(zhuǎn)換成ASCII碼,并且在每相鄰兩個(gè)數(shù)據(jù)之間插入一個(gè)‘a(chǎn)’以便于區(qū)分,轉(zhuǎn)換成形如“1a2a5a8a9a”這樣的字符串,其中第一個(gè)為桌號(hào),其余數(shù)字為所點(diǎn)菜品對(duì)應(yīng)的序號(hào),該序號(hào)在上位機(jī)的數(shù)據(jù)庫里與菜單的序號(hào)也是一一對(duì)應(yīng)的。數(shù)據(jù)編碼的函數(shù)如下:while(menu_data[j]!='\0'){ if(menu_data[j]<=9) { send_data[i++]=menu_data[j++]|0x30; send_data[i++]='a'; } else { send_data[i++]=(menu_data[j]/10)|0x30; send_data[i++]=(menu_data[j++]%10)|0x30; send_data[i++]='a'; } }send_data[i]='\0';因?yàn)楝F(xiàn)在設(shè)計(jì)的菜單數(shù)量還不是很多,菜單序號(hào)沒有上3位數(shù)字的,因此采用if(menu_data[j]<=9){...}else{}這樣的判斷足矣,最后在字符串結(jié)尾寫‘\0’結(jié)束符,向上位機(jī)發(fā)送數(shù)據(jù),采用的發(fā)送函數(shù)如下:while(send_data[i]!='\0')R_S_Byte(send_data[i++]);4.2.2上位機(jī)程序設(shè)計(jì)上位機(jī)的功能主要有:對(duì)接收端發(fā)送來的數(shù)據(jù)進(jìn)行解碼存儲(chǔ)到數(shù)據(jù)庫;設(shè)置串口相關(guān)信息;對(duì)歷史賬單進(jìn)行管理;對(duì)菜單的添加、刪除、修改操作。上位機(jī)程序采用VisualC++6.0開發(fā),該工具集成大量的API函數(shù),利用其提供的方法可方便的編寫上位機(jī)軟件[9]。本次設(shè)計(jì)初步設(shè)計(jì)了四個(gè)基于對(duì)話框的窗口,為其創(chuàng)建的類有CWirelessMenuDlg、History、Setting、Updata四個(gè)類。而所有操作的基礎(chǔ)都是基于數(shù)據(jù)庫的,所以下面首先介紹數(shù)據(jù)庫的設(shè)計(jì)。(一)數(shù)據(jù)庫的設(shè)計(jì)在程序里由于涉及到了數(shù)據(jù)庫,所以首先要設(shè)計(jì)數(shù)據(jù)庫結(jié)構(gòu),存儲(chǔ)某桌賬單時(shí)需要的信息有桌號(hào)、點(diǎn)菜時(shí)間、點(diǎn)菜順序、點(diǎn)菜數(shù)、應(yīng)付金額、付賬情況、點(diǎn)菜菜單,而存儲(chǔ)菜單時(shí)最基本的信息應(yīng)包括菜品名稱、單價(jià)。這樣可分別設(shè)計(jì)BILL表、MENU表分別存儲(chǔ)賬單信息和菜單信息。數(shù)據(jù)庫采用MicrosoftAccess創(chuàng)建。表4-3和表4-4分別為BILL表和MENU表的結(jié)構(gòu)。表4-3BILL表結(jié)構(gòu)表4-3BILL表結(jié)構(gòu)字段名稱數(shù)據(jù)類型備注序號(hào)自動(dòng)編號(hào)主鍵點(diǎn)菜順序數(shù)字點(diǎn)菜時(shí)間文本桌號(hào)數(shù)字點(diǎn)菜數(shù)數(shù)字應(yīng)付金額數(shù)字付賬情況文本字段名稱數(shù)據(jù)類型備注點(diǎn)菜1文本點(diǎn)菜2文本續(xù)表4-3續(xù)表4-3在BILL表設(shè)置了兩個(gè)字段“點(diǎn)菜1”和“點(diǎn)菜2”,在存儲(chǔ)的菜單信息量不大的情況下將從下位機(jī)接受來的菜單信息存儲(chǔ)到“點(diǎn)菜1”下,“點(diǎn)菜2”下寫‘a(chǎn)’表示未存儲(chǔ)信息。而當(dāng)所存儲(chǔ)的菜單的字符長度超過255時(shí)則將其余信息存儲(chǔ)到“點(diǎn)菜2”下,這樣兩個(gè)字段共同存儲(chǔ)的最大字符長度將達(dá)到510,完全能夠滿足要求。表4-4MENU表結(jié)構(gòu)表4-4MENU表結(jié)構(gòu)字段名稱數(shù)據(jù)類型備注序號(hào)數(shù)字主鍵菜品名稱文本單價(jià)數(shù)字在MENU表中將字段“序號(hào)”的數(shù)據(jù)類型設(shè)置成數(shù)字而非自動(dòng)編號(hào),主要是為了實(shí)現(xiàn)在程序中對(duì)該表的修改。在刪除該表中某條記錄時(shí)會(huì)造成“序號(hào)”的不連續(xù),若用自動(dòng)編號(hào)則數(shù)據(jù)庫會(huì)標(biāo)識(shí)該條記錄所對(duì)應(yīng)的“序號(hào)”的唯一性,而無法用新的記錄進(jìn)行填充,所以將其數(shù)據(jù)類型設(shè)置為數(shù)字,以便于修改。(二)上位機(jī)軟件的設(shè)計(jì)1.下面首先介紹主窗口類CWirelessMenuDlg,表4-5列出了其中所擁有的控件資源及為其映射的消息和對(duì)應(yīng)的消息處理函數(shù)。該窗口中主要完成的功能有:付賬;接收數(shù)據(jù)并對(duì)其處理刷新顯示;顯示今日賬單;點(diǎn)擊顯示每個(gè)賬單的詳情;進(jìn)入各個(gè)子窗口的入口。由于本窗口需要操作數(shù)據(jù)庫,所以先介紹關(guān)于數(shù)據(jù)庫的操作。在StdAfx.h文件中先用#import"C:\\ProgramFiles\\CommonFiles\\System\\ado\\msado15.dll"no_namespacerename("EOF","adoEOF")語句引入數(shù)據(jù)庫環(huán)境在應(yīng)用程序CWirelessMenuApp:InitInstance()初始化里加入:::CoInitialize(NULL);...::CoUninitialize();然后在對(duì)話框程序CWirelessMenuDlg中增加兩個(gè)數(shù)據(jù)成員:_ConnectionPtrm_pc; //智能對(duì)象/指針_RecordsetPtrm_pr;在構(gòu)造函數(shù)里增加對(duì)上述數(shù)據(jù)成員的初始化: m_pc.CreateInstance("adodb.connection");m_pr.CreateInstance("adodb.recordset");這樣就可以用m_pr、m_pc兩個(gè)指針操作數(shù)據(jù)庫了。在對(duì)話框初始化里打開自己建的庫CStringconsql="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\\Users\\Administrator\\Desktop\\WirelessMenu.mdb;PersistSecurityInfo=False"; m_pc->Open((_bstr_t)consql,"","",adConnectUnspecified);在整個(gè)程序里只可打開一次庫,否則會(huì)發(fā)生錯(cuò)誤,但可以打開多次表。對(duì)表的操作主要有查詢和三種動(dòng)作插入、刪除、更新。下面對(duì)這幾種操作各舉一例,其余的都大同小異。查詢:sql.Format("select*fromBILLwhere序號(hào)=%s",bill_num);m_pr->Open((_bstr_t)sql,m_pc.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);插入:sql.Format("insertintoMENUvalues(%d,'%s','%s')",maxno,m_vgename,m_price);m_pc->Execute((_bstr_t)sql,NULL,adCmdText);刪除:sql.Format("deletefromMENUwhere序號(hào)=%s",bill_num);m_pc->Execute((_bstr_t)sql,NULL,adCmdText);更新:sql.Format("updateMENUset序號(hào)=序號(hào)-1where序號(hào)>%s",bill_num);m_pc->Execute((_bstr_t)sql,NULL,adCmdText);尤其要注意每次打開表之后,在操作完之后一定要用m_pr->Close();關(guān)閉打開的表,否則會(huì)發(fā)生錯(cuò)誤[10][11]。表4-5CWirelessMenuDlg類控件資源表4-5CWirelessMenuDlg類控件資源控件名稱ID標(biāo)題變量名類型消息消息處理函數(shù)備注主框架IDD_WIRELESSMENU_DIALOGWirelssMenuWM_INITDIALOGOnInitDialog靜態(tài)文本默認(rèn)今日賬單靜態(tài)文本默認(rèn)賬單詳情靜態(tài)文本默認(rèn)今日客戶數(shù):靜態(tài)文本默認(rèn)今日流水賬:靜態(tài)文本IDC_COUNTm_countCString靜態(tài)文本IDC_TOTALMONEYm_totalmoneyCString按鈕IDC_PAYBILL結(jié)賬BN_CLICKEDOnPaybill按鈕IDC_HISBILL歷史賬單BN_CLICKEDOnHisbill按鈕IDC_SET設(shè)置BN_CLICKEDOnSet按鈕IDC_UPDATA更新BN_CLICKEDOnUpdata按鈕IDCANCEL退出系統(tǒng)BN_CLICKED編輯框IDC_STATUSm_statusCString列表控件IDC_LIST1m_list1CListCtrlNM_CLICKOnClickList1勾選“Report”列表控件IDC_LIST2m_list2CListCtrl勾選“Report”串口控件IDC_MSCOMM1m_ctrlCommCMSCommOnCommOnOnCommMscomm1在主窗口中添加了MSComm控件,對(duì)該控件的初始化我放在了“設(shè)置”窗口中,使得主窗口的界面更加清晰。對(duì)接收來的數(shù)據(jù)處理放置在函數(shù)OnOnCommMscomm1()里面,采用事件驅(qū)動(dòng)方式,即當(dāng)通信事件發(fā)生時(shí),MSComm控件會(huì)觸發(fā)OnComm事件,調(diào)用者可以捕獲該事件,通過檢查其CommEvent屬性便可確認(rèn)發(fā)生的是哪種事件或錯(cuò)誤,從而進(jìn)行相應(yīng)的處理。這種方法的優(yōu)點(diǎn)是響應(yīng)及時(shí)、可靠性高[12]。數(shù)據(jù)處理的流程圖如圖4-8。圖4-8上位機(jī)數(shù)據(jù)處理流程圖圖4-8上位機(jī)數(shù)據(jù)處理流程圖當(dāng)m_ctrlComm.GetCommEvent()==2時(shí)候,數(shù)據(jù)到來,觸發(fā)OnComm事件,調(diào)用函數(shù)OnOnCommMscomm1()。在圖4-8中,因?yàn)榻邮斩税l(fā)送來的數(shù)據(jù)格式是形如“2a3a5a8a”這樣的字符串,其中第一個(gè)數(shù)字是桌號(hào),其余的才是所點(diǎn)的菜單,所以首先應(yīng)將這兩部分分離并分別存儲(chǔ)。然后查表獲取當(dāng)前時(shí)間日期,再遍歷整個(gè)數(shù)據(jù)庫找到最大序號(hào),利用獲取的當(dāng)前日期查表找出最大點(diǎn)菜順序。將所點(diǎn)的菜單字符串分離得到每個(gè)序號(hào),查MENU表計(jì)算該單總金額。具體的函數(shù)實(shí)現(xiàn)見附錄第89頁voidCWirelessMenuDlg::OnOnCommMscomm1()函數(shù)。2.子窗口“設(shè)置”,為其映射了類Setting,表4-6列出了其中所擁有的控件資源及為其映射的消息和對(duì)應(yīng)的消息處理函數(shù)。該窗口完成的主要功能有:設(shè)置串口各參數(shù),包括串口號(hào)、波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn);打開設(shè)置的串口。之所以將串口控件放在主窗口,而沒有放在“設(shè)置”窗口,是因?yàn)楫?dāng)“設(shè)置”窗口關(guān)閉后,該窗口中的資源將會(huì)被銷毀,而無法繼續(xù)使用串口資源,所以放在了主窗口??丶QID標(biāo)題變量名類型消息消息處理函數(shù)主框架IDD_SETTING設(shè)置WM_INITDIALOGOnInitDialog列表框IDC_COMBO1m_comCComboBox列表框IDC_COMBO2m_baudCComboBox列表框IDC_COMBO3m_corectCComboBox列表框IDC_COMBO4m_dataCComboBox列表框IDC_COMBO5m_stopCComboBox靜態(tài)文本默認(rèn)串口靜態(tài)文本默認(rèn)波特率靜態(tài)文本默認(rèn)校驗(yàn)位靜態(tài)文本默認(rèn)數(shù)據(jù)位靜態(tài)文本默認(rèn)停止位按鈕IDC_CONN連接BN_CLICKEDOnConn表4-6Setting類控件資源表4-6Setting類控件資源MSComm控件有許多很重要的屬性,限于篇幅只給出幾個(gè)較為重要和常用的屬性[13][14]。表4-7MSComm控件的重要屬性表4-7MSComm控件的重要屬性屬
性說
明CommPort通信端口號(hào)Settings以字符串形式表示的波特率、奇偶校驗(yàn)、數(shù)據(jù)位PortOpen通信端口的狀態(tài),打開或是關(guān)閉Input接收數(shù)據(jù)Output發(fā)送數(shù)據(jù)InputMode接收數(shù)據(jù)的類型:0為文本;1為二進(jìn)制打開串口時(shí)先獲取用戶設(shè)置的關(guān)于串口的各參數(shù),然后利用表4-7中的方法對(duì)串口進(jìn)行設(shè)置,具體的函數(shù)實(shí)現(xiàn)見附錄voidSetting::OnConn()函數(shù)。3.子窗口“歷史賬單”,為其映射了類History,表4-8列出了其中所擁有的控件資源及為其映射的消息和對(duì)應(yīng)的消息處理函數(shù)。在該窗口中主要完成的功能有:顯示最近記錄數(shù)150條;對(duì)非今日的賬單的進(jìn)行付賬;查詢某日期賬單,并更新所選取日期的統(tǒng)計(jì)信息??丶QID標(biāo)題變量名類型消息消息處理函數(shù)備注主框架IDD_HISBILL歷史賬單WM_INITDIALOGOnInitDialog靜態(tài)文本默認(rèn)未付(人):靜態(tài)文本默認(rèn)欠賬(元):靜態(tài)文本默認(rèn)總收入(元):靜態(tài)文本IDC_NOPAYPERSONm_nopaypersonCString靜態(tài)文本IDC_NOPAYMONEYm_nopaymoneyCString靜態(tài)文本IDC_TOTALMONEYm_totalmoneyCString按鈕IDC_FIXBILL補(bǔ)賬BN_CLICKEDOnFixbill按鈕IDC_REFRESHOLD刷新BN_CLICKEDOnRefreshold按鈕IDCANCEL退出BN_CLICKED日期時(shí)間拾取器IDC_DATETIMEPICKER2DTN_CLOSEUPOnCloseupDatetimepicker2列表控件IDC_LIST1m_list1CListCtrl勾選“Report”表4-8History類控件資源由于這是在主窗口下打開的一個(gè)子窗口,所以為了要用主窗口打開的數(shù)據(jù)庫里面的資源,要獲得在在對(duì)話框程序CWirelessMenuDlg類中增加的兩個(gè)數(shù)據(jù)成員:_ConnectionPtrm_pc; _RecordsetPtrm_pr;的指針地址[15],實(shí)現(xiàn)如下:_ConnectionPtr&m_pc=((CWirelessMenuDlg*)AfxGetMainWnd())->m_pc;_RecordsetPtr&m_pr=((CWirelessMenuDlg*)AfxGetMainWnd())->m_pr;這樣就可操作數(shù)據(jù)庫里的BILL表和MENU表了。4.子窗口“更新”,為其映射了類Updata,表4-9列出了其中所擁有的控件資源及為其映射的消息和對(duì)應(yīng)的消息處理函數(shù)。在該窗口中主要完成的功能有:對(duì)數(shù)據(jù)庫MENU表里的記錄進(jìn)行添加、刪除、修改。表4-9Updata類控件資源控件名稱ID標(biāo)題變量名類型消息消息處理函數(shù)備注主框架IDD_UPDATA更新WM_INITDIALOGOnInitDialog靜態(tài)文本默認(rèn)菜單靜態(tài)文本默認(rèn)菜品名稱靜態(tài)文本默認(rèn)價(jià)格(元)編輯框IDC_VGENAMEm_vgenameCString編輯框IDC_PRICEm_priceCString列表控件IDC_LIST1m_list1CListCtrlNM_CLICKOnClickList1勾選“Report”按鈕IDC_ADD添加BN_CLICKEDOnAdd按鈕IDC_MODIFY修改BN_CLICKEDOnModify按鈕IDC_DELETE刪除BN_CLICKEDOnDelete按鈕IDCANCEL返回BN_CLICKED在本窗口里同樣也用到了數(shù)據(jù)庫,使用的方法同在“歷史賬單”窗口中的使用方法一樣。第五章系統(tǒng)調(diào)試分析在完成所有的軟硬件設(shè)計(jì)并實(shí)現(xiàn)后,最后進(jìn)行系統(tǒng)聯(lián)調(diào),看各個(gè)部分能否按預(yù)定義的想法進(jìn)行協(xié)調(diào)工作,這是系統(tǒng)設(shè)計(jì)的最后一步,也是最重要的一步。5.1移動(dòng)端調(diào)試在打開電源后系統(tǒng)能正常初始化,TFT屏先清全屏,然后讀內(nèi)存卡顯示圖片,之后也能正常顯示實(shí)時(shí)溫度。在按下觸摸屏之后,顯示提示界面,但按下“取消”之后,本來應(yīng)該將屏幕下半部還原,然后顯示溫度,但出現(xiàn)了如圖5-1的情況。圖5-1問題界面圖5-1問題界面本來不應(yīng)該在頂部寫數(shù)據(jù)的,但在寫入溫度數(shù)據(jù)之前,在頂部顯示了一系列亂碼。經(jīng)過查找代碼分析應(yīng)該是本來在底部寫溫度數(shù)據(jù)時(shí),突然觸發(fā)進(jìn)入中斷,在底部重新寫入了數(shù)據(jù),改變了TFT彩屏地址指針的地址,等到退出中斷,重新顯示溫度時(shí),已經(jīng)在顯示溫度函數(shù)的內(nèi)部了,地址指針變了,不能接著進(jìn)入中斷之前的位置進(jìn)行寫入新的數(shù)據(jù),此時(shí)就會(huì)發(fā)生上述不可預(yù)料的錯(cuò)誤,等到再次在主程序里面執(zhí)行到顯示溫度的函數(shù)時(shí),才重新指定顯示的地址,這時(shí)候才正常顯示溫度了。找出問題解決的方法是盡量減少在主程序里顯示字符的個(gè)數(shù),這樣出錯(cuò)的幾率就會(huì)少一點(diǎn),在改變了程序的結(jié)構(gòu)之后,再測試上述問題沒有再出現(xiàn)。其它功能均能按正常計(jì)劃進(jìn)行。5.2移動(dòng)端和接收端聯(lián)調(diào)這樣的測試主要是為了看無線收發(fā)數(shù)據(jù)是否正常,是否能正常編、解碼,此時(shí)未引入上位機(jī)軟件,利用STC-ISP4.83軟件的串口調(diào)試功能進(jìn)行調(diào)試,其運(yùn)行界面如圖5-2,串口波特率9600,8位數(shù)據(jù)位,無校驗(yàn)、1位停止位。圖5-2串口調(diào)試助手圖5-2串口調(diào)試助手在接收端數(shù)據(jù)未進(jìn)行處理,直接將數(shù)據(jù)發(fā)送給串口調(diào)試助手,數(shù)據(jù)收發(fā)正常。但如果接收端每接收一個(gè)數(shù)據(jù)就將接收的數(shù)據(jù)進(jìn)行處理,再接收下一個(gè)數(shù)據(jù),就會(huì)產(chǎn)生如果發(fā)送的數(shù)據(jù)為“1,2,3,4,5,6,7,‘c’,‘s’”,而傳給串口調(diào)試助手的數(shù)據(jù)卻為“1aa3a4a5a6a7a”,這樣的情況。經(jīng)分析這樣的情況有可能是,發(fā)送端不斷的發(fā)送數(shù)據(jù),而接收端正在處理某個(gè)數(shù)據(jù)時(shí),就不能及時(shí)的讀取接收到的數(shù)據(jù),產(chǎn)生丟失數(shù)據(jù)的情況。所以接收端將數(shù)據(jù)處理的部分放在接收到字符c之后,之前將每次收到的字符存儲(chǔ)在預(yù)定的數(shù)組中,之后再統(tǒng)一處理,這樣問題就能很好的解決。程序配置NRF24L01的工作模式為增強(qiáng)型ShockBurstTM,這樣每次的數(shù)據(jù)收發(fā)問答就由NRF24L01模塊自動(dòng)進(jìn)行,而無需人為干預(yù)。5.3系統(tǒng)聯(lián)調(diào)系統(tǒng)聯(lián)調(diào)的最終目的就是要實(shí)現(xiàn)論文開篇虛擬的那樣場景的功能。移動(dòng)端點(diǎn)菜完畢,發(fā)送數(shù)據(jù),接收端對(duì)數(shù)據(jù)接收后進(jìn)行處理通過串口發(fā)送給上位機(jī),上位機(jī)再將接收到的數(shù)據(jù)進(jìn)行處理存入數(shù)據(jù)庫再提示新賬單的到來,刷新顯示,這樣完成一次點(diǎn)單過程。系統(tǒng)正常運(yùn)行時(shí)的界面如圖5-3。圖5-3上位機(jī)運(yùn)行界面圖5-3上位機(jī)運(yùn)行界面接收端發(fā)送數(shù)據(jù)給上位機(jī)會(huì)引起串口的中斷,從而會(huì)進(jìn)入函數(shù)voidCWirelessMenuDlg::OnOnCommMscomm1()內(nèi)進(jìn)行數(shù)據(jù)處理,由于一些未知名的原因,有時(shí)將數(shù)據(jù)發(fā)送給上位機(jī),而從緩沖區(qū)不能完整的讀出發(fā)送的數(shù)據(jù),有時(shí)又會(huì)將發(fā)送的數(shù)據(jù)分成好幾個(gè)片段讀出,不能一次性讀出,例如發(fā)送“1a2a3a5a8a10a”,有時(shí)會(huì)連續(xù)兩次進(jìn)入OnOnCommMscomm1()函數(shù)內(nèi)部,利用MessageBox彈窗功能觀察到會(huì)連續(xù)彈出“1a2a3a”、“5a8a10a”,在將程序改變之后,只能減少這種情況的發(fā)生,卻不能完全抑制,一旦發(fā)生這樣的錯(cuò)誤,程序不得不中止或產(chǎn)生錯(cuò)誤的賬單信息,這也是我后來尤其要注意修改的地方。第六章總結(jié)我畢業(yè)設(shè)計(jì)主要涉及硬件和軟件兩個(gè)方面的內(nèi)容,通過這些我的硬件和軟件開發(fā)能力都獲得了提高。鍛煉了自己解決問題的能力,學(xué)到了很多的知識(shí)。在畢業(yè)設(shè)計(jì)剛開始覺得很簡單的東西,等到真正去做的時(shí)候又會(huì)遇到很多的問題,基本上在做設(shè)計(jì)的時(shí)候每遇到一個(gè)模塊就是一個(gè)新的問題,必須去想辦法解決,雖然有的模塊技術(shù)都已經(jīng)很成熟了,但是如果不去了解的話,程序移植的時(shí)候還是會(huì)有許多的問題,還是不能使用這個(gè)模塊。在這段期間我學(xué)會(huì)了怎么通過各種方式查詢相關(guān)的資料,通過對(duì)這些資料的學(xué)習(xí),去了解硬件,試著去編寫驅(qū)動(dòng)程序,這樣才能夠更好的將我所需要的代碼加到我自己的工程中去。印象比較深刻的就是在調(diào)試TFT顯示屏的時(shí)候,一開始我是用別人提供的驅(qū)動(dòng)程序來測試彩屏,使用的是51單片機(jī),也沒有什么問題。但是本次設(shè)計(jì)一開始決定所采用的主控芯片是MC9S12XS128,所以我必須將這個(gè)驅(qū)動(dòng)程序進(jìn)行移植,但再驅(qū)動(dòng)彩屏的時(shí)候卻怎么也不行,因?yàn)檫B接的電路都是完全按照之前連接51單片機(jī)的線路連接的,所以硬件方面肯定沒有問題了,我必須在軟件上找問題,通過查找大量的ILI9325的資料,并對(duì)應(yīng)著驅(qū)動(dòng)程序,了解每一句為什么這樣寫,最后也終于成功了。所以做每件事情都不能生搬硬套,要能夠讀懂為什么,并提升自己解決問題的能力。在電腦上我通過VisualC++6.0開發(fā)了上位機(jī)軟件,也溫習(xí)了以前的知識(shí),將以前所學(xué)的知識(shí)綜合運(yùn)用到自己的實(shí)踐中,加深了對(duì)類封裝的理解。當(dāng)然,由于單片機(jī)功能的局限性,本次設(shè)計(jì)也只能初步實(shí)現(xiàn)無線點(diǎn)菜系統(tǒng)的功能,而不能進(jìn)行復(fù)雜的工作調(diào)度,也不能驅(qū)動(dòng)復(fù)雜的外圍電路,因此使用單片機(jī)完全實(shí)現(xiàn)點(diǎn)菜系統(tǒng)的要求比較困難。但在這樣的情況下也讓我學(xué)到了,不求單項(xiàng)設(shè)計(jì)的最先進(jìn)性,但求總體設(shè)計(jì)的合理性,通過對(duì)整個(gè)系統(tǒng)進(jìn)行合理的協(xié)調(diào),來彌補(bǔ)一些缺陷。參考文獻(xiàn)[1]鄒濤.網(wǎng)絡(luò)與無線通信技術(shù)[M].北京:人民郵電出版社,2004.[2]涂時(shí)亮.單片機(jī)軟件設(shè)計(jì)技術(shù)[M].重慶:科學(xué)文獻(xiàn)出版社,1990.[3]萬福君,潘松峰.單片微機(jī)原理系統(tǒng)設(shè)計(jì)與應(yīng)用[M].合肥:中國科學(xué)技術(shù)大學(xué)出版社,2001.[4]張崇.單片2.4GHz無線收發(fā)一體芯片nRF2401及其應(yīng)用[J].國外電子元器件,2004,Vol.27,No.5:34-36.[5]郭天祥.51單片機(jī)C語言教程入門提高、開發(fā)、拓展全攻略[M].北京:電子工業(yè)出版社,2009.[6]屈磊,李媛媛.VisualC++開發(fā)入門與編程實(shí)踐[M].北京:電子工業(yè)出版社,2007.[7]彭偉.單片機(jī)C語言程序設(shè)計(jì)實(shí)訓(xùn)100例:基于8051+Proteus仿真[M].北京:電子工業(yè)出版社,2009.[8]周荷琴,吳秀清.微型計(jì)算機(jī)原理與接口技術(shù)(第四版)[M].合肥:中國科學(xué)技術(shù)大學(xué)出版社,2008.[9]李俊,于良耀.VisualC++6.0實(shí)用教程[M].北京:人民郵電出版社,2002.[10]楊佃福.VC中幾種數(shù)據(jù)庫訪問技術(shù)的比較與選擇[J].計(jì)算機(jī)應(yīng)用與研究,2002,Vol.28,No.4:24-26.[11]潘愛民.一致的數(shù)據(jù)訪問技術(shù)ADO/OLEDB[J].微電腦世界,1999,Vol.24,No.4:21-22.[12]孫鑫.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.[13]任哲.MFCWindows應(yīng)用程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2004.6.[14]求是科技.WindowsAPI程序設(shè)計(jì)參考大全[M].北京:人民郵電出版社,2006.[15]Kang,+Woochul"+DBID:NSTL_QK"KangWoochul,Son,+Sang+Hyuk"+DBID:NSTL_QK"Son,SangHyuk,Stankovic,+John+A"+DBID:NSTL_QK"Stankovic,JohnA.Design,Implementation,andEvaluationofaQoS-AwareReal-TimeEmbeddedDatabase[J].IEEETransactionsonComputers,2012,Vol.25,No.3:20-22.致謝大學(xué)最后一個(gè)學(xué)期的畢業(yè)設(shè)計(jì)很快結(jié)束了,轉(zhuǎn)眼間四年的大學(xué)學(xué)習(xí)生活也即將結(jié)束。在論文完成之際,謹(jǐn)向四年來關(guān)心、幫助、教導(dǎo)過我的所有的老師、同學(xué)、朋友表示最誠摯的謝意!首先,我要感謝我的指導(dǎo)老師丁健老師在畢業(yè)設(shè)計(jì)中對(duì)我給以細(xì)心的指導(dǎo)和嚴(yán)格要求。而在這次畢業(yè)設(shè)計(jì)的過程中家里也發(fā)生了一些事情,感謝指導(dǎo)老師對(duì)我的理解,還記得在中期檢查的時(shí)候不得不走,在和丁老師說過之后,他也沒有多說什么,只讓我交代一下目前的畢設(shè)進(jìn)度就讓我走了,沒有過多的為難我,要不那天我真的會(huì)錯(cuò)過一些我這輩子都會(huì)后悔的事情。此外,感謝的還有在畢業(yè)設(shè)計(jì)過程中給予我?guī)椭耐踅游耐瑢W(xué)、陳鑫同學(xué),在我遇到困難時(shí)他們也總是和我一起討論,一起解決問題,尤其是在自己最后想盡一切辦法都無法解決問題的時(shí)候,是他們?cè)谝恢迸惆橹?。同時(shí)感謝本專業(yè)的所有老師,在大三的時(shí)候,老師們給我們安排了一些課程設(shè)計(jì),鍛煉了我們的實(shí)踐能力,特別是儲(chǔ)忠老師關(guān)于單片機(jī)的課程設(shè)計(jì),使我在這次的畢業(yè)設(shè)計(jì)中能夠很好地運(yùn)用單片機(jī)。畢業(yè)答辯敲響了大學(xué)校園生活的尾聲,在這四年期間,在大學(xué)里結(jié)識(shí)到的各位,無論是在學(xué)習(xí)上,還是在生活上,都必須感謝你們,你們是我人生中的一筆財(cái)富,正因?yàn)槟銈兊拇嬖?,我的大學(xué)生活才會(huì)變得如此有意義。最后,謹(jǐn)以此文獻(xiàn)給對(duì)我學(xué)習(xí)、工作和生活給予支持、關(guān)懷和幫助的老師和同學(xué)。萬羊所2013年5月于合肥學(xué)院附錄附錄一系統(tǒng)電路圖附錄二系統(tǒng)實(shí)物圖移動(dòng)端點(diǎn)菜界面接收端上位機(jī)接收到數(shù)據(jù)附錄三 源程序清單//移動(dòng)端主程序#include<REG52.h>#include"gui.h"#include"ILI9325.h"#include"SD.h"#include"DS18B20.h"#include"Touch.h"#include"Audio.h"#include"NRF24L01.h" #include"menu.h"#defineMAX_NUM30dataunsignedintcount=0;datacharPAGE=1;xdataunsignedcharTxBuf[]={33,35,26,38,18,54,23,10,2,11,4,5,6,7,8,9,10,25,12,13,47,'c','s'};dataunsignedcharsend_flag=1;datainttemp=0;voidInitInt0(void);voidmain(){VoicePlay(0);Init_NRF24L01();Init_DS18B20();ILI9325_Initial(); //TFT初始化GUI_clearscreen(RGB(255,255,0)); //清屏 if(SdInit()) //SD卡初始化DisInitMenu(); GUI_sprintf_string(0,304,"Temperature:",BLUE,MAIN_BACKGROUND,1);InitInt0();while(1){ temp=ReadTemp_DS18B20(); GUI_wrlval(136,304,temp,4,2,BLUE,MAIN_BACKGROUND,1); } }voidInt0Interrupt(void)inte
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省泰州市2025屆高三第一次調(diào)研測試數(shù)學(xué)試題(解析版)
- 美國稅人心得體會(huì)
- 室內(nèi)設(shè)計(jì)的發(fā)展方向
- 招標(biāo)代理委托居間合同
- 辦公區(qū)域大型活動(dòng)策劃方案與指南
- 工業(yè)污水處理可行性報(bào)告
- 中醫(yī)護(hù)理學(xué)(第5版)課件 望診1
- 食品行業(yè)質(zhì)量安全追溯與智能倉儲(chǔ)管理方案
- 二零二五年度辦公室新風(fēng)系統(tǒng)智能化升級(jí)改造合同
- 工作效率提升策略實(shí)施計(jì)劃
- 江蘇紅豆實(shí)業(yè)股份有限公司償債能力分析
- 四川省2023年普通高等學(xué)校高職教育單獨(dú)招生文化考試(中職類)數(shù)學(xué)試題(原卷版)
- 水力機(jī)械原理與設(shè)計(jì)課件
- 江蘇電子信息職業(yè)學(xué)院單招職業(yè)技能測試參考試題庫(含答案)
- 充電樁采購安裝投標(biāo)方案(技術(shù)方案)
- 7.1開放是當(dāng)代中國的鮮明標(biāo)識(shí)課件-高中政治選擇性必修一當(dāng)代國際政治與經(jīng)濟(jì)(1)2
- 2024年浙江首考英語聽力原文解惑課件
- 民族團(tuán)結(jié)教材
- 煤礦頂板管理技術(shù)培訓(xùn)課件
- 紀(jì)念中國人民抗日戰(zhàn)爭暨世界反法西斯戰(zhàn)爭勝利周年大合唱比賽
- 生化檢驗(yàn)質(zhì)控及失控分析
評(píng)論
0/150
提交評(píng)論