基于單片機(jī)的簡易超市收銀系統(tǒng)設(shè)計(jì)畢設(shè)論文_第1頁
基于單片機(jī)的簡易超市收銀系統(tǒng)設(shè)計(jì)畢設(shè)論文_第2頁
基于單片機(jī)的簡易超市收銀系統(tǒng)設(shè)計(jì)畢設(shè)論文_第3頁
基于單片機(jī)的簡易超市收銀系統(tǒng)設(shè)計(jì)畢設(shè)論文_第4頁
基于單片機(jī)的簡易超市收銀系統(tǒng)設(shè)計(jì)畢設(shè)論文_第5頁
已閱讀5頁,還剩57頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

擴(kuò)展條形碼輸入設(shè)備,實(shí)現(xiàn)商品的條形碼輸入;(選作)擴(kuò)展鍵盤可實(shí)現(xiàn)全拼漢字、中英文和數(shù)字輸入;(選作)具有多功能銷售操作,實(shí)現(xiàn)單次銷售、多件批發(fā)、退貨銷售、單向折扣等銷售;(選作)漢字打印每筆交易的商品名、商品單價(jià)、銷售數(shù)量、銷售金額、小計(jì)金額、商店店名、單據(jù)流水號、交易日期和時(shí)間等等。(選作)系統(tǒng)方案核心控制芯片核心控制芯片STC89C52復(fù)位到初始狀態(tài)Eeprom擴(kuò)展內(nèi)存條形碼掃描槍LED燈指示電源是否供電獨(dú)立鍵盤模塊電源供電LCD顯示信息DS18B20溫度采集圖1.1系統(tǒng)的主要框圖如圖1.1所示,本系統(tǒng)采用單片機(jī)STC89C52為主控芯片,單片機(jī)可以控制使能,可以實(shí)現(xiàn)復(fù)位,條形碼掃描模塊可以實(shí)現(xiàn)商品的掃描,采集商品的單價(jià),產(chǎn)地,條形碼編碼以及數(shù)量等信息;Led燈用來顯示是否有中斷信號輸入,以便知道是否掃描到信息或者有按鍵;商品信息的輸入通過矩陣鍵盤來完成;復(fù)位模塊可以復(fù)位系統(tǒng)最初狀態(tài),電源模塊可以給系統(tǒng)供電,有穩(wěn)壓電路,從直流源處得到9伏電壓,經(jīng)過穩(wěn)壓電路得到5伏直流電;Eeprom模塊用來擴(kuò)展單片機(jī)模塊的內(nèi)存,可以實(shí)現(xiàn)存儲1000個(gè)商品信息,同時(shí)可以實(shí)現(xiàn)掉電保護(hù);用DS18B20模塊采集環(huán)境溫度,液晶LCD1602則顯示商品信息,進(jìn)行溫度采集時(shí)則切換顯示環(huán)境溫度。方案論證主控芯片選擇方案一:采用32位的ARM2138作為收銀機(jī)的控制核心。ARM2138是一款有著強(qiáng)大的存儲空間的芯片,轉(zhuǎn)換速度快,具有在系統(tǒng)可編程功能,內(nèi)部集成32K靜態(tài)RAM以及512Kflash存儲器,具有較為豐富的引腳資源,多達(dá)47個(gè)可以承受5V電壓的通用I/O口,同時(shí)還有多個(gè)串行接口,2個(gè)高速I2C借口,SPI和具有緩沖作用和數(shù)據(jù)長度可變功能的SSP,這款芯片較為復(fù)雜,操作起來較為困難[1]。方案二:采用傳統(tǒng)的8位51系列單片機(jī)作為系統(tǒng)的控制器。STC89C51RC單片機(jī)是一款具有在系統(tǒng)可編程功能的單片機(jī),其內(nèi)部具有4K字節(jié)的Flash程序存儲器,2K字節(jié)的數(shù)據(jù)存儲器,3個(gè)16位定時(shí)/計(jì)數(shù)器,其中定時(shí)器0還可以當(dāng)成兩個(gè)8位定時(shí)器來使用,用戶程序不需要專用編程器即可實(shí)現(xiàn)串口直接下載,6個(gè)中斷、1個(gè)全雙工串行口和Eeprom等資源。51系列單片機(jī)的內(nèi)部構(gòu)造簡單,編程方面相對方便,容易掌握和使用。但需要更大的flash程序存儲器來存儲各種數(shù)據(jù)[2]。方案三:STC89C52RC單片機(jī)雖然屬于51系列單片機(jī)的一種,但與STC89C51RC單片機(jī)相比它具有STC89C51RC單片機(jī)的功能外,還具有更大的存儲空間。而且本次設(shè)計(jì)STC89C52RC單片機(jī)能夠達(dá)到要求。STC89C52RC芯片可以滿足設(shè)計(jì)要求,它的內(nèi)部有8K字節(jié)的Flash,256字節(jié)的RAM,以及4組8位的I/O口線,可方便用戶開發(fā)使用。三個(gè)16位定時(shí)器/計(jì)數(shù)器,具有一個(gè)2級中斷結(jié)構(gòu),全雙工串行口,芯片內(nèi)部具有晶振及時(shí)鐘電路。編程方便簡單,可以為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、強(qiáng)有效的解決方案[3]。綜上考慮,由于STC89S52單片機(jī)的IO口足夠本次設(shè)計(jì)使用,并且STC89C52成本低、便于操作,也容易編程。因此本次設(shè)計(jì)采用STC89C52單片機(jī),它滿足本次設(shè)計(jì)的基本要求。鍵盤方案選擇方案一:采用標(biāo)準(zhǔn)鍵盤PS/2鍵盤,PS/2標(biāo)準(zhǔn)鍵盤的價(jià)格低,而且它具有豐富的鍵盤資源,這款鍵盤可以實(shí)現(xiàn)中英文輸入、數(shù)字輸入,而考慮到PS/2鍵盤編碼困難,程序編寫有一定的難度,所以設(shè)計(jì)中不予采用。方案二:采用4*5矩陣鍵盤,矩陣鍵盤電路比較簡單,單片機(jī)通過一組IO口即可實(shí)現(xiàn)矩陣鍵盤的控制,判斷按鍵是否按下以及按下那個(gè)鍵,然后返回那個(gè)鍵的ASCII碼,從而達(dá)到輸入數(shù)字和英文字母的功能,因?yàn)楸鞠到y(tǒng)只需實(shí)現(xiàn)商品的存儲和銷售,因而采用矩陣鍵盤可以滿足要求。綜合以上兩種方案,聯(lián)系實(shí)際情況,考慮困難程度,本次設(shè)計(jì)采用矩陣鍵盤實(shí)現(xiàn)商品條形碼信息的輸入。液晶模塊選擇方案一:采用LCD1602顯示LCD1602是一種工業(yè)字符型液晶,可以同時(shí)顯示32個(gè)字符,即2行16列字符。它可以用來顯示字母、數(shù)字、符號。LCD1602能夠同時(shí)顯示多個(gè)數(shù)據(jù),并且有8個(gè)數(shù)據(jù)引腳和3個(gè)控制引腳,占用的I/O口的資源較多[4]。方案二:采用OCM4X8C作為液晶顯示。OCM4X8C液晶顯示器是128×64點(diǎn)陣的漢字圖形型液晶顯示模塊,可以顯示數(shù)字、漢字及英文字母,提供兩種界面來連接微處理器,可以和CPU直接連接,有兩種連接方式,可以8位并行或者串行。而且具有多種功能:畫面移位、光標(biāo)顯示、睡眠模式等。但在本次設(shè)計(jì)中不需要很高的配置,因此不給予采用[5]。方案三:采用七段共陰數(shù)碼管來顯示,七段共陰數(shù)碼管是顯示數(shù)字的一類顯示屏,對其管腳輸入不同電平可控制每段的亮滅。它可以顯示0-F的數(shù)字信息,價(jià)格便宜,使用簡單,但是占用I/O的資源也相對較多[6]。此次設(shè)計(jì)需要顯示商品的數(shù)字或英文字母信息,包括字符串及數(shù)字信息,如果只是采用數(shù)碼管進(jìn)行顯示的話則無法顯示字符串,而且需要占用非常多的I/O口,如果采用LCD1602來顯示字符串及數(shù)據(jù),相對于數(shù)碼管,LCD1602使用起來非常方便,因此本次設(shè)計(jì)液晶顯示模塊選擇LCD1602。存儲模塊選擇方案一:采用SD卡擴(kuò)展單片機(jī)內(nèi)存,SD卡數(shù)據(jù)傳輸率較快,其中SD卡的SPI總線配置較復(fù)雜,不過具有較高的記憶容量,移動靈活性較高并且安全性很高,SD卡讀寫時(shí)編程上的頭文件非常復(fù)雜,而且SD卡很容易造成接觸不良。對于本次設(shè)計(jì)用不上。方案二:采用Eeprom擴(kuò)展單片機(jī)的內(nèi)存,Eeprom可以實(shí)現(xiàn)掉電保護(hù),利用它還能很方便的對單片機(jī)的內(nèi)存進(jìn)行擴(kuò)展,而且編程也簡單。符合本次的設(shè)計(jì)要求。考慮到編程的難易程度,方案二更容易實(shí)現(xiàn)編程,所以選擇方案二作為本次的存儲模塊。溫度采集模塊方案一:采用PT100作為測溫電路的溫度傳感器,PT100傳感器還具有準(zhǔn)確度高,抗振動,穩(wěn)定性好,耐高壓等優(yōu)點(diǎn),PT100傳感器測溫的工作原理是鉑電阻的阻值隨溫度變化而變化,并且呈現(xiàn)一定函數(shù)關(guān)系。而PT100傳感器使用起來比較復(fù)雜,而且不常用PT100傳感器來實(shí)現(xiàn)溫度測量。因而本次設(shè)計(jì)中不予采用。方案二:采用DS18B20作為測溫電路的溫度傳感器。DS18B20的數(shù)字溫度輸出通過單總線;不同于其他的溫度傳感器的是,DS18B20使用起來比較方便,它使用單線接口方式,而且不需要其他外圍電路,測量結(jié)果是以串行方式傳送的9位數(shù)字量,與微處理器的雙向通信只需要一根接口線就可以實(shí)現(xiàn),還支持多個(gè)傳感器同時(shí)測量,當(dāng)多個(gè)DS18B20連接時(shí)可用一根總線與微機(jī)進(jìn)行通信,從而實(shí)現(xiàn)多點(diǎn)測溫功能。DS18B20測量溫度范圍為-55~+125oC,固有測溫分辨率為0.5oC[7]。通過比較發(fā)現(xiàn),DS18B20的測量方法比較簡單,直接輸出數(shù)字的溫度值,不需要校正,所以采用方案二。綜上所述,本次設(shè)計(jì)采用以STC89C52作為本次設(shè)計(jì)的核心控制器,擴(kuò)展矩陣鍵盤實(shí)現(xiàn)數(shù)字和英文字母輸入,通過擴(kuò)展EEPROM來擴(kuò)展單片機(jī)的存儲內(nèi)存,用LCD1602液晶來顯示商品的詳細(xì)信息,擴(kuò)展串口實(shí)現(xiàn)掃描槍掃描條碼輸入,以及串口通信。詳細(xì)硬件電路設(shè)計(jì)主控芯片STC89C52資料介紹STC89C52單片機(jī)芯片如圖3.1所示。圖3.1單片機(jī)的模塊圖如圖3.1所示為STC89C52RC單片機(jī),這款單片機(jī)是增強(qiáng)型的8051單片機(jī),可以任意選擇6時(shí)鐘/機(jī)器周期和12時(shí)鐘/機(jī)器周期,它的指令代碼完全兼容傳統(tǒng)8051。其工作電壓:5.5V~3.3V(5V單片機(jī))/3.8V~2.0V(3V單片機(jī))

,工作頻率范圍:0~40MHz,用戶應(yīng)用程序空間為8K字節(jié)

,片上集成512字節(jié)RAM,其通用I/O口有32個(gè),復(fù)位后的情況是:4組IO口為準(zhǔn)雙向口,P1口是一個(gè)內(nèi)部直接帶有上拉電阻的8位雙向I/O口。對P1口寫1時(shí),通過內(nèi)部的上拉電阻把端口拉到高電平,這樣則可以作為輸入口使用。P1口作輸入口使用時(shí),因?yàn)橛袃?nèi)部上拉電阻,那些被外部拉低的引腳會輸出一個(gè)電流。P0口的輸出是漏極開路,當(dāng)P0口作為總線擴(kuò)展用時(shí),不需要接上拉電阻,當(dāng)P0口作為普通I/O口使用時(shí),需要接上拉電阻。P1口的輸出緩沖器可驅(qū)動4個(gè)TTL電平的輸入[3]。液晶顯示模塊設(shè)計(jì)采用LCD1602英文點(diǎn)陣液晶顯示收銀機(jī)的工作情況,在商品存儲時(shí),可以顯示需要存儲的商品信息,例如名字、單價(jià)、產(chǎn)地等;在商品銷售時(shí)也可以顯示相關(guān)信息,LCD1602是一種專門用來顯示數(shù)字、英文字符的液晶模塊,它由32個(gè)5*8點(diǎn)陣字符為位組成,每一個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符。LCD1602的顯示器的特點(diǎn)是它是很薄的顯示器件,而且驅(qū)動電壓較低,工作電流極小,可以和場效應(yīng)管電路結(jié)合起來組成低功耗的系統(tǒng),其模塊內(nèi)部自帶有160個(gè)5*8的點(diǎn)陣字符型發(fā)生器。圖3.2LCD的電路連接圖如圖3.2是LCD1602與單片機(jī)的連接圖,液晶的3腳接精密電位器,接入電位器進(jìn)行調(diào)節(jié)液晶顯示器的偏壓,這樣可以調(diào)整液晶的顯示對比度,此引腳電壓為零時(shí)得到最強(qiáng)的對比度。4腳為RS數(shù)據(jù)命令選擇端,當(dāng)4腳為高電平時(shí),可以對液晶進(jìn)行數(shù)據(jù)字節(jié)的傳輸操作,當(dāng)為低電平時(shí),則是進(jìn)行命令字節(jié)的傳輸操作。命令字節(jié)則是對液晶LCD1602的工作方式作設(shè)置的字節(jié);數(shù)據(jù)字節(jié),是用來在LCD1602上顯示的字節(jié)。5腳R/W,讀寫選擇端。當(dāng)這個(gè)腳為高電平時(shí),可以對LCD1602進(jìn)行讀數(shù)據(jù)操作,當(dāng)為低電平時(shí),可以對數(shù)據(jù)寫操作。6腳E:使能信號,是對LCD1602的數(shù)據(jù)控制時(shí)鐘信號,利用該信號的上升沿實(shí)現(xiàn)對LCD1602的數(shù)據(jù)傳輸。7到14腳是8為并行口,是LCD1602進(jìn)行數(shù)據(jù)讀寫的數(shù)據(jù)口[4]。LCD1602引腳連接如表3.1所示:表3.1LCD1602與單片機(jī)的連接引腳連接說明引腳連接說明1電源地9P2.2接(STC89C52)23腳2+5V10P2.3接(STC89C52)24腳310K電阻2腳(10K電位器的中間抽頭,1腳接+5V,3腳接地)11P2.4接(STC89C52)25腳4P1.7接(STC89C52)8腳12P2.5接(STC89C52)26腳5P1.6接(STC89C52)7腳13P2.6接(STC89C52)27腳6P1.5接(STC89C52)6腳14P2.7接(STC89C52)28腳7P2.0接(STC89C52)21腳1510歐姆電阻的1端,10歐姆電阻的另一端接+5V8P2.1接(STC89C52)22腳16接地如表3.1所示:1腳為VSS為電源地;2腳為VCC接5V電源正極;3腳為V0為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地電源時(shí)對比度最高(對比度過高時(shí)會產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度。4腳為RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器;5腳為RW為讀寫信號線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作;6腳為E端為使能端,高電平時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令;7~14腳為D0~D7為8位雙向數(shù)據(jù)端;15~16腳為空腳或背燈電源。15腳背光正極,16腳背光負(fù)極[4]。1602的讀寫時(shí)序圖如下:圖3.3LCD1602的時(shí)序圖如圖3.3為LCD1602的讀寫時(shí)序圖,R/W為讀寫信號線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號,當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)[8]。存儲模塊電路設(shè)計(jì)本次采用EEPROM進(jìn)行對系統(tǒng)擴(kuò)展內(nèi)存,采用EEPROM24C02進(jìn)行對單片機(jī)進(jìn)行存儲空間進(jìn)行擴(kuò)展,因?yàn)榇鎯Φ纳唐分皇谴鎯λ膯蝺r(jià),產(chǎn)地和條碼,所以存儲一個(gè)商品用不了多少空間,因此采用存儲器24C02可以擴(kuò)展512字節(jié)的數(shù)據(jù)存儲空間。圖3.4Eeprom電路連接圖如圖3.2是EEPROM的電路連接圖,AT24C02的內(nèi)部分成32頁,存儲容量為2KB,每頁有8B,共有256頁,操作時(shí)有兩種尋址方法,分別是芯片尋址和片內(nèi)地址尋址。其SDA引腳通常被外圍器件拉高,SDA引腳的數(shù)據(jù)應(yīng)在SCL為低時(shí)變化;當(dāng)數(shù)據(jù)在SCL為高時(shí)變化,將視為下文所述的一個(gè)起始或停止命令;當(dāng)SCL為高,SDA由高到低的變化被視為起始命令,必須以起始命令作為任何一次讀/寫操作命令的開始,當(dāng)SCL為高,SDA由低到高的變化被視為停止命令,在一個(gè)讀操作后,停止命令會使EEPROM進(jìn)入等待態(tài)低功耗模式[9]。EEPROM的時(shí)序圖如下所示:圖3.5EEPROM的時(shí)序圖如圖3.5為EEPROM的時(shí)序圖,從中可以看出有時(shí)鐘和數(shù)據(jù)傳輸?shù)姆绞?,時(shí)鐘和數(shù)據(jù)傳輸:SDA引腳正常狀態(tài)下由外部器件拉高。SDA上的數(shù)據(jù)只有在SCL時(shí)鐘信號為低的時(shí)候才能進(jìn)行改變,在SCL為高時(shí)SDA上的數(shù)據(jù)表現(xiàn)為如下方式。開始條件:SCL為高,SDA由高變?yōu)榈褪且粋€(gè)開始條件,開始命令優(yōu)先于所有的其他命令。結(jié)束條件:SCL為高,SDA由低變?yōu)楦呤且粋€(gè)結(jié)束條件,在一個(gè)讀序列之后結(jié)束命令,會將EEPROM置于一個(gè)待機(jī)電源模式,響應(yīng):所有的地址和數(shù)據(jù)都是以8比bit的的形式進(jìn)行存儲和讀取,也就是串行的傳入或者傳出EEPROM,在第九個(gè)時(shí)鐘周期,EEPROM發(fā)出一個(gè)0作為收到一個(gè)字的響應(yīng)信號[9]。串口通訊模塊設(shè)計(jì)圖3.6串口的電路連接圖如圖3.6是串口的設(shè)計(jì),此設(shè)計(jì)可以用條碼掃描器來掃描條碼進(jìn)行商品的存儲和銷售,掃描槍在對商品的標(biāo)簽上的條形碼進(jìn)行掃描時(shí),通過串口通信傳送到MCU的數(shù)值應(yīng)該是一串13位的長度的數(shù)字串。MCU通過串口接收到掃描槍送出的數(shù)字串,然后對數(shù)字串進(jìn)行判斷,符合要求的進(jìn)行商品的存儲或者商品的銷售。此外這個(gè)串口可以用來單片機(jī)系統(tǒng)與計(jì)算機(jī)之間的串行通信,可以通過串口給計(jì)算機(jī)發(fā)送數(shù)據(jù),計(jì)算機(jī)在接收到數(shù)據(jù)后進(jìn)行處理,將處理的結(jié)果通過界面顯示在計(jì)算機(jī)屏幕上。此外圖中的MAX232串口芯片可以轉(zhuǎn)換電平,因?yàn)槿绻c計(jì)算機(jī)進(jìn)行通訊的話,計(jì)算機(jī)和單片機(jī)之間的電平是不一致的,所以要加串口轉(zhuǎn)換芯片。單片機(jī)輸出的是TTL電平,+5V表示高電平,0V表示低電平;而計(jì)算機(jī)的串口+12V表示高電平,-12V表示低電平,采用MAX232芯片可以將計(jì)算機(jī)的串口電平轉(zhuǎn)換成合適單片機(jī)的電平[10]。鍵盤電路設(shè)計(jì)本次設(shè)計(jì)的鍵盤主是要實(shí)現(xiàn)從鍵盤能輸入數(shù)字和英文字母,這樣才能輸入商品信息的條形碼和英文名字以及單價(jià)。本次設(shè)計(jì)的鍵盤因?yàn)榘?6個(gè)字母和十個(gè)數(shù)字,所以對16個(gè)鍵盤有特殊的要求,一個(gè)按鍵控制4個(gè)字母,一個(gè)按鍵控制左移,一個(gè)按鍵控制右移,一個(gè)按鍵控制確定。當(dāng)在一個(gè)按鍵中需要選擇4個(gè)字母中的一個(gè)時(shí),通過左移右移鍵來確定位置,然后按下確認(rèn)鍵就可以確定需要的字母。當(dāng)然,也需要一個(gè)鍵來控制當(dāng)前是數(shù)字輸入狀態(tài),還是字母輸入狀態(tài),這樣就可以實(shí)現(xiàn)16個(gè)鍵來實(shí)現(xiàn)26個(gè)字母和10個(gè)數(shù)字輸入。圖3.7矩陣鍵盤如圖3.7矩陣鍵盤的編碼規(guī)則為:先讀取鍵盤的狀態(tài),從而得到按鍵的特征編碼。先從P1口的高四位輸出低電平,低四位輸出高電平,從P1口的低四位讀取鍵盤的狀態(tài)。再從P1口低四位輸出低電平,再從P1口的高四位輸出高電平,從P1口高四位讀取鍵盤狀態(tài),將兩次讀取結(jié)果組合起來就可以得到當(dāng)前按鍵的特征編碼。本次設(shè)計(jì)的超市收銀機(jī)中,只要對商品進(jìn)行存儲和銷售,可以采用獨(dú)立鍵盤的形式進(jìn)行設(shè)計(jì)。這樣的非編碼鍵盤的按鍵排列成行、列。按鍵的作用只是簡單地接通或者斷開,不需要附加什么硬件電路,因此需要使用者進(jìn)行軟件編程,才能產(chǎn)生相應(yīng)的鍵碼。按鍵識別、防抖動和產(chǎn)生鍵碼要通過軟件進(jìn)行處理。4×4的簡易鍵盤,可以通過行掃描來確定是否有按鍵按下,確定已按鍵的行列位置。行掃描,就是按一定的順序給每條行線置低電平,而其余各行線置高電平,并檢測掃描每行時(shí)是否產(chǎn)生了列信號,此外,在此次設(shè)計(jì)中還多用兩個(gè)設(shè)計(jì)鍵來控制商品的存儲和銷售,當(dāng)按下S2鍵是對商品進(jìn)行存儲,當(dāng)按下S3鍵時(shí),是對商品進(jìn)行銷售[11]。復(fù)位和晶振電路設(shè)計(jì)單片機(jī)最小系統(tǒng)工作時(shí),起振器起到關(guān)鍵的作用,若振蕩器不規(guī)律地運(yùn)行,那么得到的結(jié)果可能不是很正確。一般的晶振電路都是由一個(gè)晶振和兩個(gè)瓷片電容組成的,而且兩個(gè)瓷片電容的相連端要接地。晶振一般選11.0592M,這個(gè)頻率是1.8432M的20倍。圖3.8晶振電路連接如圖3.8是晶振電路和復(fù)位電路的設(shè)計(jì),復(fù)位電路是單片機(jī)最小系統(tǒng)不可缺少的一部分,當(dāng)給單片機(jī)一個(gè)復(fù)位信號時(shí),單片機(jī)會使程序從頭開始執(zhí)行;單片機(jī)中一般有兩種復(fù)位方式:上電復(fù)位,在系統(tǒng)一上電時(shí)利用電容兩端的電壓不能突變的原理給系統(tǒng)一個(gè)短暫的低電平信號;手動復(fù)位,通過手動按鈕給系統(tǒng)低電平,從而達(dá)到復(fù)位的效果,如果手一直按著復(fù)位鍵不放,系統(tǒng)將一直復(fù)位。溫度測量電路設(shè)計(jì)本次采用DS180B20溫度傳感器作為溫度測量的核心模塊,其引腳排列和模塊芯片圖如圖3.9所示:圖3.9DS18B20模塊圖如圖3.9引腳說明:GND(接地),DQ(數(shù)據(jù)I/O),VDD(可選電源電壓),NC(無連接)。本次設(shè)計(jì)采用三極管型封裝的DS18B20,其原理圖連接如圖3.10所示:圖3.10DS18B20的連接圖如圖3.10采用DS18B20作為測溫電路的連接圖,DS18B20可達(dá)12位的數(shù)字值,分辨率為0.0625℃。DS18B20具有如下特點(diǎn):可以設(shè)置為兩種供電模式,即數(shù)據(jù)總線供電方式和外部供電方式。采用數(shù)據(jù)總線供電方式可以節(jié)省一根導(dǎo)線,但可能會導(dǎo)致測量溫度的時(shí)間會久一點(diǎn);而采取外部供電方式則多一根導(dǎo)線,但是測量速度會大大加快,所以采用一總線2路溫度測量使用外部供電的方式進(jìn)行測量。如下圖3.11所示為DS18B20的時(shí)序圖:DS18B20需要嚴(yán)格的單總線協(xié)議以確保數(shù)據(jù)的完整性。協(xié)議包括集中單總線信號類型:復(fù)位脈沖、存在脈沖、寫0、寫1、讀0和讀1。所有這些信號,除存在脈沖外,都是由總線控制器發(fā)出的。復(fù)位序列:復(fù)位和存在脈沖和DS18B20間的任何通訊都需要以初始化序列開始,初始化序列如下圖所示。一個(gè)復(fù)位脈沖跟著一個(gè)存在脈沖表明DS18B20已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)。在初始化序列期間,總線控制器拉低總線并保持480us以發(fā)出(TX)一個(gè)復(fù)位脈沖,然后釋放總線,進(jìn)入接收狀態(tài)(RX)。單總線由5K上拉電阻拉到高電平。當(dāng)DS18B20探測到I/O引腳上的上升沿后,在等待15-60us,然后發(fā)出一個(gè)由60-240us低電平信號構(gòu)成的存在脈沖[5]。圖3.11DS18B20的控制時(shí)序圖掃描器原理本次設(shè)計(jì)采用的是AS-8110條碼閱讀器,器件圖如圖3.8所示,AS-8110條碼閱讀器具有以下功能:內(nèi)部具有解碼器,手持近距虹光條碼閱讀器,各種一維條碼能被精確讀??;具有7種提示音和音量可調(diào)的蜂鳴器,可根據(jù)使用環(huán)境的調(diào)節(jié)蜂鳴器的音量;多個(gè)內(nèi)置接口,分別有RS-232、鍵盤接口、光筆及先進(jìn)的USB接口。圖3.8條碼掃描器圖3.8是AS-8110條形碼閱讀器,其有多種功能,有蜂鳴器提示采集到條碼信息,外形美觀,手握舒適,而已采用其作為掃描模塊。當(dāng)掃描器接觸到到條形碼后,能識別采集的話,蜂鳴器會響一聲作為提示音,說明掃到了條形碼。掃描器采用5伏供電,接到電路板上即可給掃描器供電。系統(tǒng)軟件設(shè)計(jì)系統(tǒng)主程序設(shè)計(jì)流程圖:開始初始化開始初始化打開串口中斷調(diào)用商品存儲程序存儲完成跳出循環(huán)顯示DS18B20測量的環(huán)境溫度調(diào)用商品銷售程序顯示商品信息復(fù)位鍵復(fù)位是是是按key2?按key3?按key4?否否否圖4.1主程序流程圖圖4.1為商品存儲和銷售系統(tǒng)的整體流程,當(dāng)按下Key2鍵時(shí),則調(diào)用商品存儲程序,對商品的單價(jià)、編號、條碼、產(chǎn)地存儲好,再按下一次Key2鍵確認(rèn)存儲完成;當(dāng)按下Key4鍵時(shí),則調(diào)用商品銷售函數(shù),然后在LCD1602上顯示出商品的相關(guān)信息;按下Key3鍵則是對DS18B20測量周圍環(huán)境操作,按下復(fù)位鍵則是對單片機(jī)進(jìn)行復(fù)位。對于串口中斷程序,當(dāng)掃描器掃描到條碼時(shí),程序會跳到串口中斷函數(shù)那里,接下來就是判斷是否有按鍵,當(dāng)檢測到有按鍵時(shí),在判斷是哪個(gè)按鍵,從而進(jìn)行存儲還是銷售;當(dāng)然也可以通過獨(dú)立按鍵鍵盤來進(jìn)行商品的存儲和銷售,獨(dú)立鍵盤可以實(shí)現(xiàn)英文和數(shù)字輸入。溫度采集軟件設(shè)計(jì):DS18B20溫度傳感器內(nèi)部有一個(gè)高速暫存的RAM和一個(gè)非易失的可電擦除的EEPRAM,而這個(gè)EEPRAM可以存放高溫度和低溫度觸發(fā)器TH、T和結(jié)構(gòu)寄存器。而這個(gè)暫存存儲器包含了8個(gè)連續(xù)字節(jié),前兩個(gè)字節(jié)是測得的溫度信息,第一個(gè)字節(jié)的內(nèi)容是溫度的低八位,第二個(gè)字節(jié)是溫度的高八位。主要流程圖如圖4.2所示:開始開始定時(shí)器初始化和初始化DS18B20讀取實(shí)時(shí)溫度設(shè)定溫度范圍讀存儲器溫度值,將溫度存入緩沖區(qū)報(bào)警是否顯示溫度值溫度超限?圖4.2溫度測量的流程圖如圖4.2系統(tǒng)上電后,首先加載EEPROM的上下限的溫度值,顯示實(shí)時(shí)溫度值,然后根據(jù)設(shè)計(jì)需要的溫度進(jìn)行設(shè)定溫度范圍,然后判定環(huán)境溫度是否超過設(shè)定的溫度范圍,當(dāng)超過設(shè)定的溫度范圍時(shí)會啟動報(bào)警,然后在次跳回到設(shè)定溫度范圍。只有當(dāng)環(huán)境溫度在設(shè)定的溫度范圍內(nèi),才不會啟動報(bào)警。DS18B20的理論分析:溫度傳感器采集到的數(shù)據(jù)是以補(bǔ)碼的形式存到暫存器RAM的第0、1兩個(gè)字節(jié)中,單片機(jī)可以通過單線接口讀到數(shù)據(jù),讀取時(shí),一般都是低位在前,高位在后。而二進(jìn)制中的前面5位是符號位,當(dāng)測得的數(shù)據(jù)大于0,這5為數(shù)據(jù)為0,然后將測得數(shù)據(jù)乘以0.0625就可以得到實(shí)際的溫度值,當(dāng)測得溫度小于0,則這5位為1,測得的溫度取反后在加1然后乘以0.0625才可以得到實(shí)際的溫度值。在DS18B20中,溫度都是以1/2LSB(最低位是有效位)的形式(TEMP_READ),然后再從讀計(jì)數(shù)器里面的值(COUNT_REMAIN),只需知道該溫度處每一個(gè)攝氏度的計(jì)數(shù)個(gè)數(shù)(COUNTER_PER_C),就可以用下列公式計(jì)算出實(shí)際的溫度值。TEMPRATURE(溫度)=TEMP-0.25+DS18B20測量溫度時(shí)采用特有的溫度測量技術(shù),將采集到的溫度值轉(zhuǎn)換成數(shù)值信號,測量得到的結(jié)果存到溫度寄存器中,溫度值和數(shù)值關(guān)系如下表所示:表一:溫度值和數(shù)字量的關(guān)系溫度數(shù)字值輸出(2進(jìn)制)數(shù)字值輸出(16進(jìn)制)+0.5℃00000000000010000008h+10.125℃000000001010001000A2h+25.0625℃00000001100100010191h+85℃00000101010100000550h+125℃000001111101000007D0h+0℃00000000000000000000h-0.5℃1111111111111111FFFFh-25℃1111111111001110FFCEh-55℃1111111110010010FF92h-25.0625℃1111111001101111FE6Eh-10.125℃1111111101011110FF5Eh鍵盤軟件流程設(shè)計(jì):4*4矩陣鍵盤的設(shè)計(jì)步驟:開始對第一列進(jìn)行掃描,判斷有無按鍵,如果沒有按鍵,在依次對第二列、第三列、第四列進(jìn)行掃描,如果掃描后沒有返回到開始的狀態(tài),當(dāng)一列有按鍵,那么接下來對第一行、第二行、第三行、第四行分別掃描,如果有按鍵按下就分別顯示0、1、2、3;第二列、第三列、第四列依次這樣類似的掃描得到相應(yīng)數(shù)值,數(shù)值應(yīng)該是0到9,字母是a到z共26個(gè)值。判斷有無按鍵按下的方法是:首先是讓置列線P1.4到P1.7為輸入狀態(tài),然后從行線P1.0到P1.3輸出低電平,接著讀入列線數(shù)據(jù),如果某一列線為低電平的話,則該列線有鍵閉合。第二步,行線依次輪流輸出低電平,然后從列線P1.4到P1.7讀入數(shù)據(jù),如果有某一列是低電平,則對應(yīng)行線上有按鍵按下。結(jié)合以上兩步就可以確定按鍵的編號,但是按鍵閉合一次只能進(jìn)行鍵功能操作,所以必須等到按鍵釋放后,在進(jìn)行鍵功能操作,否則按鍵一次,可能會進(jìn)行同樣操作多次。0XF0讀端口0XF0讀端口是否0XF0是否延時(shí)消抖是否0XF0是否寄存當(dāng)前值X10X0F讀端口寄存當(dāng)前值X2X1位或X2得到按鍵值圖4.3獨(dú)立按鍵流圖如圖4.3為獨(dú)立鍵盤的按鍵掃描流程圖,根據(jù)有無按鍵按下來卻定對應(yīng)鍵的鍵值。如上程序是判斷有無按鍵按下的部分程序,當(dāng)PKey為真時(shí)表示有按鍵按下,為假時(shí)表示無按鍵按下。當(dāng)有按鍵按下時(shí),如果是行線就去對應(yīng)行值,如果是列線,就取對應(yīng)列值,然后返回按鍵的碼值,接著等待按鍵釋放。Eeprom通信流程設(shè)計(jì)應(yīng)應(yīng)答開始初始化總線起始信號否是發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù)應(yīng)答是發(fā)送數(shù)據(jù)讀數(shù)據(jù)否應(yīng)答是發(fā)送數(shù)據(jù)結(jié)束是否否否否否否圖4.4Eeprom讀寫流程圖如圖4.4所示EEPROM的讀取開始為順序讀取,順序讀取由立即地址或者隨機(jī)地址讀取,在讀數(shù)據(jù)器件收到一數(shù)據(jù)之后,通過確認(rèn)應(yīng)答來判斷接下來的步驟,只要EEPROM在收到之后,便會繼續(xù)增加數(shù)據(jù)碼地址和串行輸出數(shù)據(jù)碼。如果達(dá)到存儲器的極限時(shí),數(shù)據(jù)碼地址將會重復(fù)滾動,順序讀取也將繼續(xù)下去,當(dāng)讀數(shù)據(jù)的器件不通過確認(rèn)應(yīng)答時(shí),而通過產(chǎn)生一個(gè)停止應(yīng)答時(shí),順序讀取操作將會被終止。上位機(jī)顯示設(shè)計(jì)圖4.5上位機(jī)程序框圖如圖4.5所示,這是通過LABVIEW來設(shè)計(jì)商品在電腦上顯示商品的各種信息,比如商品的單價(jià),商品的編號,商品的產(chǎn)地,及生產(chǎn)日期。首先現(xiàn)在LABVIEW中存好商品的相關(guān)信息,當(dāng)掃描槍掃描到條碼時(shí),通過串口傳來13位數(shù)據(jù),通過比較是否與存好的商品的條碼一致,一致的話就顯示商品的相關(guān)信息在顯示界面上,不一致的話就顯示商品不存在。圖中包括有選擇是進(jìn)行存儲還是銷售的按鈕,進(jìn)行相關(guān)按鈕就可以進(jìn)行商品的存儲和銷售。圖4.6顯示商品信息界面如圖4.6所示,這是在LABVIEW上顯示銷售時(shí)商品的相關(guān)信息界面,在圖上可以可能到商品的單價(jià),編號,生產(chǎn)日期和產(chǎn)地等信息。系統(tǒng)調(diào)試調(diào)試使用的儀器調(diào)試過程中,主要使用了下列的儀器:數(shù)字萬用板 1臺計(jì)算機(jī) 1臺單片機(jī)開發(fā)板 1臺掃描儀 1個(gè)獨(dú)立鍵盤一個(gè)1個(gè)直流電源1臺調(diào)試過程及誤差分析對于所設(shè)計(jì)的系統(tǒng)的調(diào)試過程具體如下:首先先對制作好的硬件進(jìn)行測試,再確保硬件各部分線路接觸良好之后,在對系統(tǒng)電路板進(jìn)行簡單粗略的系統(tǒng)整合調(diào)試,據(jù)此來判斷硬件與軟件是否可以同步正常工作。在確保正常工作后,轉(zhuǎn)而對系統(tǒng)軟件進(jìn)行編譯調(diào)試,確認(rèn)程序能實(shí)現(xiàn)軟件要求的功能的前提下,連接硬件進(jìn)行精確調(diào)試,直到完整的實(shí)現(xiàn)題目要求的功能,之后可以進(jìn)一步修改軟件程序,使之具有更完善的功能。硬件調(diào)試這一部分是對制作好的電路板進(jìn)行詳細(xì)的檢查,包括硬件焊接、裝配,還有對焊接好的電路板進(jìn)行檢測,測試電路連接是否良好,導(dǎo)線之間應(yīng)該導(dǎo)通的是否導(dǎo)通。銅線與銅線之間是否存在短路的情況,這是很重要的檢查,也是確保在接上元件后不會燒壞元件。具體步驟為:首先對腐蝕好的板子進(jìn)行元件的安裝,安裝有一個(gè)原則,一般都是從矮的開始,這樣方便焊;此外一邊焊元件的同時(shí)要用萬用表測試元件是否與原理圖上的值一樣,而且也要用萬用表測試線路通不通,如果線路不通,對照著PCB板進(jìn)行更改,直到正確為止。當(dāng)焊好板子后,不要急于給系統(tǒng)板子上電,先對整個(gè)主控板進(jìn)行上電,依照各芯片引腳資料,先對各個(gè)芯片的引腳電壓進(jìn)行測量,當(dāng)發(fā)現(xiàn)測試結(jié)果與芯片資料的輸出電壓不同時(shí),檢查芯片是否接穩(wěn),從而進(jìn)行加固焊接,在重復(fù)此步驟,倘若芯片電壓依舊不正確,就要查閱相關(guān)芯片相關(guān)資料,或者檢查原理圖,或者更換芯片,直到芯片工作正常才可以進(jìn)行軟件硬件結(jié)合調(diào)試。測試過程中遇到的困難具體調(diào)試模塊主要分為以下幾個(gè)模塊:LCD1602顯示模塊、主控模塊、獨(dú)立鍵盤模塊、測溫模塊、掃描器模塊。各模塊開始測試時(shí)存在以下問題。主控芯片模塊,剛開始給板子上電是,給系統(tǒng)供電的指示電源燈不亮,經(jīng)過仔細(xì)檢查發(fā)現(xiàn)焊接芯片底座有松動的現(xiàn)象,經(jīng)過對芯片底座進(jìn)行重新加固焊接后,上電后指示燈正常亮,至此,主控芯片電源供電正常。LCD1602顯示模塊:在下載液晶測試程序后,液晶無顯示,轉(zhuǎn)而進(jìn)行電路連接是否正確進(jìn)行檢查。經(jīng)過查閱資料資料后發(fā)現(xiàn)電路連接正常,就是沒有顯示,接著在軟件中對所有單片機(jī)的I/O口置0,結(jié)果測試單片機(jī)的I/O輸出電壓是高電平,就像加了非門一樣,經(jīng)仔細(xì)檢查也沒發(fā)現(xiàn)那哪里出現(xiàn)問題,接著進(jìn)行整個(gè)電路板的電路檢查,結(jié)果依然沒有發(fā)現(xiàn)那里有問題,就是線路太密,布局太緊,在考慮是不是導(dǎo)線之間的影響,結(jié)果在重做這個(gè)模塊后下載程序后可以正確顯示,所以應(yīng)該是硬件電路存在一些問題,但是檢查不出來;不過最后經(jīng)過重新硬件的制作后可以正確顯示了。獨(dú)立鍵盤的檢查:在連接硬件后下載程序,當(dāng)按下按鍵時(shí),液晶無法顯示按鍵的碼值,進(jìn)而進(jìn)行軟件部分的程序檢查,發(fā)現(xiàn)置的初值不正確,而且不小心把液晶的使能端程序給屏蔽了,經(jīng)過在三修改程序,最終實(shí)現(xiàn)獨(dú)立鍵盤輸入英文和數(shù)字。各模塊連接檢查:在連接好各模塊進(jìn)行整個(gè)系統(tǒng)調(diào)試時(shí),發(fā)現(xiàn)不能按照最初理論進(jìn)行功能顯示,首先當(dāng)按鍵時(shí)就不能用條碼掃描器進(jìn)行掃描,而且也不可以進(jìn)行按鍵切換進(jìn)行溫度顯示,可能是程序還不夠完善,正在修改中。(5)剛開始往Eeprom寫數(shù)據(jù)的時(shí)候,在液晶上沒有顯示,只是簡單地往地址里寫數(shù)據(jù)都無法顯示,對比資料也沒發(fā)現(xiàn)程序哪里出現(xiàn)錯(cuò)誤,然后就將程序從頭到尾檢查一遍,發(fā)現(xiàn)些如數(shù)據(jù)的地址不對,在更改好地址后,可以將商品信息成功存入Eeprom中。(6)串口設(shè)計(jì)接口剛開始連接掃描器時(shí),掃描器無法掃描到條碼,經(jīng)過仔細(xì)檢查發(fā)現(xiàn)原來是串口的2腳跟3腳接反了,經(jīng)過改正之后,可以實(shí)現(xiàn)通過掃描器掃描條碼進(jìn)單片機(jī)中。參數(shù)測試商品的存儲對商品存儲有兩個(gè)途徑,可以通過條形碼對條碼進(jìn)行掃描而后進(jìn)行存儲,也可以通過獨(dú)立鍵盤對商品的相關(guān)信息進(jìn)行存儲。由于本次設(shè)計(jì)的鍵盤是4*4獨(dú)立鍵盤,可以實(shí)現(xiàn)英文字符和數(shù)字輸入,所以商品的相關(guān)信息是以英文或是數(shù)字方式存儲,信息如表2表2:商品存儲的相關(guān)信息:商品編號商品名稱商品單價(jià)商品條碼1029Beizi1069316883250431037qianbi269316883250511039gangbi1569316883250531043shiyanzhi369316883250571036bijiben469316883250501027tuoxie869316883250411041xaingpicha169316883250551044lunwenzhi569316883250581049shupian46931688325063如表2所示,商品的信息存儲到Eeprom中,有商品的編號、商品名稱、單價(jià)、還有條碼編號;存儲好之后,當(dāng)需要要銷售時(shí),通過按鍵中斷進(jìn)行銷售,也可以通過串口的掃描器來掃描進(jìn)條碼,當(dāng)掃進(jìn)來的條與存儲好的條碼一致時(shí),就讓該商品的編號、名稱、單價(jià)、條碼在液晶屏上顯示,實(shí)現(xiàn)銷售操作。溫度測量如下圖所示,當(dāng)切換按鍵測量周圍環(huán)境溫度時(shí)可以顯示當(dāng)前的環(huán)境溫度。圖5.1溫度顯示如圖5.1所示,當(dāng)要進(jìn)行周圍環(huán)境溫度測試時(shí),通過按鍵可以進(jìn)入到測溫程序,通過溫度傳感器既可以測出周圍的溫度,溫度以十進(jìn)制的數(shù)字方式顯示在LCD1602上。當(dāng)然,當(dāng)通過外界條件改變周圍的環(huán)境溫度時(shí),也可以測出周圍的環(huán)境溫度。按鍵測試測試獨(dú)立按鍵能否實(shí)現(xiàn)數(shù)字和英文的輸入,如下圖:圖5.2鍵盤輸入顯示通過圖5.2可以看到獨(dú)立按鍵可以輸入數(shù)字和英文字母,證明獨(dú)立鍵盤可以實(shí)現(xiàn)0到9的數(shù)字輸入,以及26個(gè)字母的輸入。而液晶所顯示的是條碼的13位數(shù)字,也可以說明商品的條碼可以存到單片機(jī)的內(nèi)存中。條碼槍測試商品銷售通過使用條形碼掃描器掃描條形碼,當(dāng)掃描槍掃到已經(jīng)存過的商品條碼時(shí),液晶就會顯示商品的信息,下圖為商品的單價(jià)顯示。圖5.3商品價(jià)格顯示有圖5.3所示,當(dāng)進(jìn)行銷售時(shí),掃描器掃描商品的條碼時(shí),液晶上會顯示商品的價(jià)格,由于只能顯示兩行,所以商品的名字、產(chǎn)地未在液晶上顯示出來,可以實(shí)現(xiàn)讓對應(yīng)商品的信息顯示出來,但只能顯示其中一個(gè)。從能實(shí)現(xiàn)在液晶上顯示商品的單價(jià),也可以證明可以實(shí)現(xiàn)在單片機(jī)的內(nèi)存中存儲商品的相關(guān)信息。當(dāng)然,是進(jìn)行商品的存儲時(shí),是通過獨(dú)立鍵盤輸入還是通過掃描器的掃描輸入,下圖為選擇的顯示界面。圖5.4按鍵輸入或掃描輸入如圖5.4所示,當(dāng)進(jìn)行商品的存儲時(shí),可以通過按鍵進(jìn)行商品信息的輸入,也可以通過掃描器掃描條形碼進(jìn)行條碼的存儲。LABVIEW上銷售測試當(dāng)進(jìn)行銷售時(shí),先在LABVIEW上把控件打到銷售模式,然后利用掃描器掃描商品的條碼,當(dāng)掃描到存在的商品時(shí),掃描到的13位數(shù)據(jù)就會從單片機(jī)上發(fā)送13位數(shù)據(jù)過來,LABVIEW在收到13為數(shù)據(jù)后,進(jìn)行與存好的條碼進(jìn)行對比,存在的商品就會可在LABVIEW上顯示商品的相關(guān)信息。結(jié)果如下圖所示:圖5.5顯示商品信息界面如圖5.5所示,是在掃描器掃描到條碼后,在LABVIEW上顯示商品的信息,如圖可以看到商品的單價(jià),產(chǎn)地,編號還有生產(chǎn)日期。結(jié)論本次設(shè)計(jì)簡易超市收銀系統(tǒng),可以實(shí)現(xiàn)對商品的相關(guān)信息進(jìn)行存儲,可以實(shí)現(xiàn)從條碼器掃描進(jìn)商品的條碼而進(jìn)行存儲,商品的相關(guān)信息可在LCD1602上顯示,同時(shí)實(shí)現(xiàn)了通過按鍵中斷來判斷是進(jìn)行商品的存儲還是進(jìn)行商品的銷售。此外,還實(shí)現(xiàn)了從獨(dú)立鍵盤上進(jìn)行對商品信息的存儲,實(shí)現(xiàn)了通過按鍵切換來顯示當(dāng)前的環(huán)境溫度,實(shí)現(xiàn)了通過掃描器來進(jìn)行商品的銷售和存儲,實(shí)現(xiàn)在EEPROM中存儲100個(gè)商品信息。本次設(shè)計(jì)較為成功。但是本次設(shè)計(jì)也有很多不足,比如沒能拓展實(shí)現(xiàn)1000個(gè)商品信息的存儲,以及沒能從獨(dú)立鍵盤上輸入漢字字符;在者,溫度傳感器那部分未能實(shí)現(xiàn)溫度超限報(bào)警,而且溫度測試精度不夠;此外在液晶上顯示的字符數(shù)據(jù)不是很清晰,讓人看起來不是很舒服;執(zhí)行銷售操作時(shí),未能顯示商品的銷售額,存儲數(shù)量還有幾個(gè);沒能實(shí)現(xiàn)從打印機(jī)打印銷售清單,而且液晶上看不到當(dāng)前的實(shí)時(shí)時(shí)鐘,無法清楚知道當(dāng)前的時(shí)間。在本次設(shè)計(jì)中應(yīng)該增加實(shí)時(shí)時(shí)鐘模塊,便于顧客和超市管理員了解消費(fèi)和收入的詳情。以及應(yīng)該在程序中能實(shí)現(xiàn)每銷售一件商品后,對應(yīng)得到存儲商品數(shù)量應(yīng)該減一,每種商品的數(shù)量可以進(jìn)行實(shí)時(shí)更新。同時(shí)可以擴(kuò)展鍵盤能實(shí)現(xiàn)全拼漢字、中英文輸入和數(shù)字輸入就更為完善了。當(dāng)然,如果可以增加語音播報(bào)功能,讀出商品的單價(jià),總價(jià)以便找錢給顧客,讓顧客清晰了解所消費(fèi)的商品的單價(jià)以及單次消費(fèi)的總金額那就更完美了,這些是需要去完善的模塊。在本次設(shè)計(jì)中,我深刻體會到制作一個(gè)相對好一點(diǎn)的PCB板是有點(diǎn)困難的,不過在本次設(shè)計(jì)中,我了解了簡易超市收銀系統(tǒng)的整個(gè)工作原理和具體每一步的操作步驟,學(xué)會了設(shè)計(jì)一個(gè)獨(dú)立鍵盤來設(shè)計(jì)一個(gè)能進(jìn)行數(shù)字和字母輸入的鍵盤,學(xué)會通過用掃描器來進(jìn)行條形碼的輸入,而且學(xué)會了用溫度傳感器來進(jìn)行環(huán)境溫度的測量,并且可以在液晶上顯示,同時(shí)可以通過EEPROM來進(jìn)行擴(kuò)展單品機(jī)的內(nèi)存,而且通過本次的設(shè)計(jì),對DXP、KEIL4、VC等編程畫圖軟件更進(jìn)一步掌握和運(yùn)用。當(dāng)然,在設(shè)計(jì)中,我感覺到自己的動手能力有點(diǎn)欠缺,要么對芯片引腳的焊接不好,要么就是弄斷元件的引腳,而且對電路板的布局也不是很美觀,不過通過此次設(shè)計(jì)讓我加強(qiáng)了自己的動手能力和制作PCB板子的能力。

謝辭在本次的設(shè)計(jì)中,我之所以可以完成我的設(shè)計(jì)作品,完成大學(xué)最后的一步,順利畢業(yè),離不開老師和同學(xué)們的幫助,支持和關(guān)心,在本次設(shè)計(jì)完成的最后,我對他們表示由衷的感謝。在本次的設(shè)計(jì)中,剛開始時(shí)我覺得我自己的動手能力非常不足,但是經(jīng)過這次設(shè)計(jì)之后,我覺得我的動手能力有了很大的提升,這對我以后的工作有很大的幫助,就算自己畢業(yè)了,以后仍舊會努力學(xué)習(xí),多動手爭取有較大的提升。感謝此次對我的畢業(yè)設(shè)計(jì)有啟發(fā)的李莉老師,她不僅給了我設(shè)計(jì)上的啟發(fā),而且耐心指導(dǎo)我們,細(xì)心講解我們設(shè)計(jì)過程中遇到的問題,老師用她豐富的教學(xué)經(jīng)驗(yàn)和多年來的硬件知識解決了我在設(shè)計(jì)中遇到的許多問題,謝謝老師的耐心指導(dǎo)和講解。經(jīng)過這次的設(shè)計(jì)后,我相信我以后遇到相似的問題,自己應(yīng)該可以自己分析問題的原因并且解決問題。同時(shí)我要感謝我們班同學(xué)的幫助,剛開始時(shí)我的電路布局一塌糊涂,元件封裝也不對,不過由于我們班同學(xué)的熱心幫助,幫我解決了電路布局不好問題,以及元件封裝不對的問題,因?yàn)槲覀儼嗤瑢W(xué)的幫助,我可以順利完成設(shè)計(jì)硬件電路。當(dāng)然我的軟件程序部分,遇到問題的時(shí)候,我們自己的同學(xué)也會給我一些建議和幫助,非常感謝他們的熱心幫助。另外,我要感謝周圍的同學(xué),由于他們的監(jiān)督下,大家都努力的完成設(shè)計(jì),不敢偷懶,因?yàn)榇蠹业幕突ブ拍苁棺约喉樌瓿纱舜卧O(shè)計(jì),非常感謝他們。最后感謝母校對我四年來的培育,感謝老師同學(xué)們現(xiàn)出的關(guān)心和指導(dǎo),感謝各位老師對我學(xué)習(xí)上的幫助,謝謝你們大家。參考文獻(xiàn)周立功,張華.深入淺出ARM7(上冊)[M].北京:北京航空航天大學(xué)出版社,2001.朱宇光.單片機(jī)應(yīng)用新技術(shù)[M].北京:電子工業(yè)出版社.2000.白駒珩,雷曉平.單片計(jì)算機(jī)及其應(yīng)用[M].北京:高等教育出版社.2004:1~100.朱華光.淺議LCD1602的編程技巧[J].電腦知識與技術(shù).2010,9(18):4980~4982.gu20072034.基于MS32OF2812的液晶顯示模塊SO12864設(shè)計(jì)[OL]-/,2011.08.27/2015.06.05閻石.數(shù)字電路技術(shù)基礎(chǔ)[M].北京:高等教育出版社,2006:179~180.[7]張金,張鋒,盧勝.電子系統(tǒng)設(shè)計(jì)基礎(chǔ)[M].北京:電子工業(yè)出版社,2011:176~191.[8]825621895.lcd1602時(shí)序圖[OL]-/view/41a2324769eae009581becaa.html?re=view,2010.10.09/2015.06.05[9]王典洪,李東峰,劉兵.EEPROM與DSP的接口技術(shù)[J].

微處理機(jī).

2008,4(2):30~31.[10]黃亮.基于AT89C51單片機(jī)的串口通信程序的設(shè)計(jì)[J].電子制作.2006(07):20~32.[11]merry_song.關(guān)于4*4矩陣鍵盤工作原理[EB/OL]./a/2015/04-30/341997.html,2015-04-30.[12]RashaShaheen,ArneWinterhof.Permutationsoffinitefieldsforcheckdigitsystems[J].Designs,CodesandCryptography,2010,57(3):23~45.[13]TakeshiOhbuchi,FujihikoMatsumoto.

Anewdesignofalinearlocal-feedbackMOStransconductorforlowfrequencyapplications[J].

AnalogIntegratedCircuitsandSignalProcessing,2013,75(2).

附錄附錄A電路原理圖

附錄BPCB板

附錄CLABVIEW程序/********************************************************************** ***********************************************************************/#include<reg51.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedchar/****LCD1602命令/*顯示模式指令#defineLCD_Display_mode0X38//設(shè)置16x2顯示5x7點(diǎn)陣8位數(shù)據(jù)接口//*顯示開/關(guān)及光標(biāo)設(shè)置#defineLCD_shows00X0C//開顯示不顯示光標(biāo)光標(biāo)不閃爍#defineLCD_shows20X0E//開顯示顯示光標(biāo)光標(biāo)不閃爍#defineLCD_shows10X0F//開顯示顯示光標(biāo)光標(biāo)閃爍#defineLCD_shows30X08//關(guān)顯示不顯示光標(biāo)光標(biāo)不閃爍//*指針設(shè)置#defineLCD_cursor10X04//寫一個(gè)字符地址指針減1#defineLCD_cursor20X05//寫一個(gè)字符地址指針減1并屏幕右移#defineLCD_cursor30X06//寫一個(gè)字符地址指針加1#defineLCD_cursor40X07//寫一個(gè)字符地址指針加1并屏幕左移//*清屏指令#defineLCD_clear0x01//清屏指令數(shù)據(jù)指針清零所有顯示清零///*忙狀態(tài)字#defineLCD_WAY0x80//狀態(tài)字///*宏定義顯示起始地址#defineLCD_ADDH0X80//第一行地址0x80-0xA7#defineLCD_ADDL0XC0//第二行地址0xC0-0xE7*/#definejump_ROM0xCC //18B20#definestartv0x44#defineread_EEROM0xBE//連接1602引腳定義sbitE=P3^7; //1602使能sbitRW=P3^6; //1602讀/寫控制sbitRS=P3^5; //1602數(shù)據(jù)/指令控制sbitDQ=P3^4;//DS18B20數(shù)據(jù)口sbitscl=P1^1;//24c02SCLsbitsda=P1^2;//24c02SDAsbitwp=P1^0;//24c02WPuchartable[14]; //條碼數(shù)組uchartable_t[14];ucharpd_bit=0; //條碼數(shù)組下標(biāo)ucharpd_num=0; //24c02中存儲的商品數(shù)量ucharnum=0; //購物車商品數(shù)量uintmoney_pd=0; //購物價(jià)格ucharNew_rec=0; //條碼中斷標(biāo)記ucharUART_buff; //條碼槍串口數(shù)據(jù)寄存ucharbreak_flag=0; //退出標(biāo)記位ucharcountt=0; //中斷次數(shù)ucharcodetest[21]={1,10,147,176,127,7,157,'w','h','e','a','t','\0','\0','\0','\0','\0',48,0,0,0} ;ucharKeyscan(void);voidL1602_GB(ucharhang,ucharlie);voidL1602_string(ucharhang,ucharlie,uchar*p);voidL1602_char(ucharhang,ucharlie,charsign);voidL1602_init(void);voidwdata(uchardel);voidwcmd(uchardel);bitBusy(void);voidx24c02_write(ucharaddress,ucharinfo);ucharx24c02_read(ucharaddress);voidack(void);ucharreadx(void);voidwritex(ucharj);voidstop();voidstart(void);voidx24c02_init(void);voidflash(void);voiddelay();voidDelay_1ms(uinti);voiduart_init();voidwrite_byte(ucharval);ucharread_byte(void);voidwrite_bit(ucharbitval);ucharread_bit(void);ucharReset(void);//定義商品信息類型數(shù)據(jù)structpd_info{ unsignedcharname; unsignedcharprice;};structpd_infoinfo_pd[5]; //購物車//voidinput_pd()//{// structpd_infocodepd[5]={{88325015,"cooky",4},{88325027,"shoes",5},{88325024,"mungbean",4},{88325034,"banana",7}};////}/********************************************************************函數(shù)名:get_key()功能:按鍵判斷與消抖輸入:無輸出:鍵值1 2 3 ?abc defghi4 5 6 ?jkl mno pqr7 8 9 確定stuvwxyz左移 0 右移 退出 空格********************************************************************/ucharget_key(){ ucharkey_buf; P2=0xf0; if(P2!=0xf0) { Delay_1ms(20); //???? if(P2!=0xf0) { key_buf=Keyscan(); P2=0XF0; while(P2!=0XF0); returnkey_buf; } else return0; } else return0; }/*********************************************************************名稱:fin_pd(uchartable_t[14])*功能:查找條碼 一個(gè)13位的條碼分為低7位和高6位處理先對低七位進(jìn)行比較,如果匹配再比較高6位,否則退出*輸入:要查找的條碼*輸出:無***********************************************************************/ucharfin_pd(uchartable_t[14]){ ucharii=0,jj=0; ucharpd_code=1; //24c02地址寄存從1開始是因?yàn)榈?位為已商品數(shù)量位 unsignedlonginthh=1000000; //數(shù)組數(shù)轉(zhuǎn)換為長整型用到 unsignedlongintbarcode_t=0,barcode_h=0; //掃到的條碼和內(nèi)存中的條碼寄存 for(ii=6;ii<13;ii++) //掃描條碼數(shù)組低七位整合為一個(gè)長整型數(shù)字 { barcode_h+=(table_t[ii]-48)*hh; hh=hh/10; } pd_num=x24c02_read(0); //讀取已存入的數(shù)量 24C02第一個(gè)存儲地址永遠(yuǎn)保存的是內(nèi)部存入的商品數(shù)量 for(ii=0;ii<pd_num;ii++) //根據(jù)商品數(shù)量決定要循環(huán)比較的次數(shù) { for(jj=3;jj<6;jj++) //先獲取低3字節(jié)進(jìn)行判斷 3個(gè)字節(jié)總共24位二進(jìn)制數(shù),可以表示一個(gè)最大為16777216的數(shù)足以表示低7位條碼 { //存入規(guī)則為前6字節(jié)為條碼,緊接著是10字節(jié)的名字,最后為1字節(jié)的價(jià)格為了方便運(yùn)算一個(gè)商品占20字節(jié),空閑為保留位 barcode_t=barcode_t|x24c02_read(pd_code+jj); Delay_1ms(1); if(jj!=5) barcode_t<<=8; //一個(gè)字節(jié)一個(gè)字節(jié)的提取 }// while(1)//查看兩個(gè)比對數(shù)據(jù)調(diào)試用// { // wcmd(0x01); //// L1602_char(1,1,barcode_t/1000000+48);// L1602_char(1,2,barcode_t/100000%10+48);// L1602_char(1,3,barcode_t/10000%10+48);// L1602_char(1,4,barcode_t/1000%10+48);// L1602_char(1,5,barcode_t/100%10+48);// L1602_char(1,6,barcode_t/10%10+48);// L1602_char(1,7,barcode_t%10+48);//// L1602_char(2,1,barcode_h/1000000+48);// L1602_char(2,2,barcode_h/100000%10+48);// L1602_char(2,3,barcode_h/10000%10+48);// L1602_char(2,4,barcode_h/1000%10+48);// L1602_char(2,5,barcode_h/100%10+48);// L1602_char(2,6,barcode_h/10%10+48);// L1602_char(2,7,barcode_h%10+48);//// Delay_1ms(3000);// wcmd(0x01);// Delay_1ms(5000);// } if(barcode_t==barcode_h) //如果低7位條碼匹配上了,讀取剩下高六位來匹配 { // barcode_h 加入高位比較程序 info_pd[num].name=pd_code+6; //保存商品名在24C04中的存儲地址 info_pd[num].price=pd_code+16; //保存價(jià)格存儲地址 num++; //購物車商品數(shù)量加一 return1; //條碼匹配返回1不匹配返回0 // break; } else { pd_code+=20; //跳到下一個(gè)商品開始地址繼續(xù)比對 if(pd_code>=(pd_num*20)) //全部篩查完成,沒有發(fā)現(xiàn)條碼 { wcmd(0x01); L1602_string(1,1,"NOHAVE!"); L1602_string(2,1,"Nowreturn!"); Delay_1ms(3500); return0; // break; } } }}/*********************************************************************名稱:voidpd_car()*功能:購物車顯示*輸入:無*輸出:無***********************************************************************/voidpd_car(){ ucharii,jj,break_flag=0,num_t;// wcmd(0x01); money_pd=money_pd+x24c02_read(info_pd[ii].price);//總的商品價(jià)格等于所有商品價(jià)格之和 ii=0; num_t=ii; while(1) { switch(get_key()) { case1:break_flag=1;break; case2:++ii;if(ii>=num){ii-=1;num_t=0;}break; //下一個(gè)商品 case4:if(ii>0){ii--;num_t=0;}break; //上一個(gè)商品 default:break; } if(break_flag==1) { break; } if(num_t==0) //當(dāng)商品發(fā)生變化時(shí)才掃描顯示,避免閃爍 { num_t++; wcmd(0x01); //清屏 L1602_GB(2,1); L1602_string(2,1,"good:"); L1602_string(1,1,"num:price:."); L1602_GB(1,5); L1602_char(1,5,num+48); L1602_char(1,13,money_pd/100%10+48); L1602_char(1,14,money_pd/10%10+48); L1602_char(1,16,money_pd%10+48); for(jj=0;(jj<10)&&(x24c02_read(info_pd[ii].name+jj)!='\0');jj++) //輪流顯示商品名字 { L1602_char(2,jj+1+5,x24c02_read(info_pd[ii].name+jj)); //讀取商品名顯示 } } //Delay_1ms(1); }}/*********************************************************************名稱:do_key_abc(uchara)*功能:根據(jù)鍵值執(zhí)行相應(yīng)操作*輸入:鍵值*輸出:無***********************************************************************uchardo_key_abc(uchara){ switch(a) { case0:break; case1:break_flag=1;break case2:if(state) //有字符輸入標(biāo)記位為1時(shí)才執(zhí)行操作//按下后右移一位選擇; { ++lie_abc; //輸入字符選擇右移 if(lie_abc>3) //右移限定 lie_abc=3; wcmd(0x80+lie_abc-1); //執(zhí)行右移 }break; case3:if(state==0) //沒字符輸入狀態(tài)下執(zhí)行 //空格 { ++lie_in; //產(chǎn)品名右移,相當(dāng)于一個(gè)空格 wcmd(0xc0+lie_in-1); //執(zhí)行右移 pd_buff.pd_name[i]=0; //寫入產(chǎn)品名緩存 i++; //跳到下一位 }break; case4:if(state) //有字符輸入標(biāo)記位為1時(shí)才執(zhí)行操作 //按下后左移一位選擇; { ++lie_abc; //輸入字符選擇左移 if(lie_abc<1) //左移限定 lie_abc=1; wcmd(0x80+lie_abc-1); //執(zhí)行左移 }break; //確定鍵按下 case5:if(state) { pd_buff.pd_name[i]=state+lie_abc; //寫入產(chǎn)品名緩存 L1602_char(2,lie_in,state+lie_abc); // 顯示選擇的字符 i++; //跳到下一位 state=0; //字符按下標(biāo)記清零 }break; case16:L1602_string(1,1,"abc"); //顯示將要選擇的字符ABC //abc L1602_GB(1,1); //開光標(biāo)指示將要選擇的位 lie_abc=1; //光標(biāo)位置1 state=97; //標(biāo)記有輸入字符可供左右移動ascll碼+偏移位lie_abc可得到準(zhǔn)確字符 break; } if(break_flag==1) return0; else return1;}/*********************************************************************名稱:do_key_123(uchara)*功能:根據(jù)鍵值執(zhí)行相應(yīng)操作*輸入:鍵值*輸出:無***********************************************************************/voiddo_key_123(uchara){ uintbb; if((pd_bit==13)&&(a!=1)&&(a!=5)&&(a!=13)) //限定13位輸入 a=0; else switch(a) { case1:break_flag=1;a=0;break; //退出鍵按下 case2: a=0;break; case3:table[pd_bit]='0';++pd_bit;a=0;break; //0 case4: a=0;break; case5:a=3; if(pd_bit==13) //檢查輸入條碼是否達(dá)到13位 { while(a--)//這是啟動電源時(shí),液晶顯示:start(并閃爍3次) { L1602_string(1,1,"compare"); Delay_1ms(500); wcmd(0x01); Delay_1ms(500); } if(fin_pd(table)) //判斷是否找到對應(yīng)的條碼 { pd_car(); //購買商品處理 pd_bit=0; wcmd(0x01); for(bb=0;bb<14;bb++) //清除條碼緩沖區(qū) { table[bb]='\0'; table_t[bb]=0; } } } else { L1602_string(1,1,"codesshouldbe"); L1602_string(2,1,"13bits"); Delay_1ms(2000); } a=0; break; case6:table[pd_bit]='9';++pd_bit;a=0;break; //9 case7:table[pd_bit]='8';++pd_bit;a=0;break; //8 case8:table[pd_bit]='7';++pd_bit;a=0;break; //7 case10:table[pd_bit]='6';++pd_bit;a=0;break; //6 case11:table[pd_bit]='5';++pd_bit;a=0;break; //5 case12:table[pd_bit]='4';++pd_bit;a=0;break; //4 case14:table[pd_bit]='3';++pd_bit;a=0;break; //3 case15:table[pd_bit]='2';++pd_bit;a=0;break; //2 case16:table[pd_bit]='1';++pd_bit;a=0;break; //1 default:a=0;break; } L1602_GB(2,2); L1602_string(2,2,table); L1602_string(1,1,"THEBARCODEIS:"); //顯示將要輸入的條碼}/*********************************************************************名稱:Main()*功能:主函數(shù) 主函數(shù)*輸入:無*輸出:無***************************************************************************************************************************/voidMain(void){ ucharKey_Value=0;//鍵值 ucharfuntion=0; uchari; unsignedcharTMPH,TMPL; uinttemp; L1602_init(); L1602_string(1,1,"CashRegister"); L1602_string(2,1,"Inputafuntion!"); x24c02_init(); //初始化24C02 wp=0; //使能24c02芯片讀寫 for(i=0;i<21;i++) { x24c02_write(i,test[i]); Delay_1ms(1);} uart_init(); while(1) { //加入另外四個(gè)功能按鍵判斷給funtion Key_Value=get_key(); //掃描按鍵功能選擇1購買商品2存入商品信息3溫度顯示 switch(Key_Value) { case1:funtion=1;TR1=1;ES=1;Key_Value=0;break; //開中斷. case2:funtion=2;Key_Value=0;break; default:Key_Value=0;break; } if(funtion==1)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論