畢業(yè)論文基于單片機(jī)的自動(dòng)售貨機(jī)系統(tǒng)設(shè)計(jì)_第1頁(yè)
畢業(yè)論文基于單片機(jī)的自動(dòng)售貨機(jī)系統(tǒng)設(shè)計(jì)_第2頁(yè)
畢業(yè)論文基于單片機(jī)的自動(dòng)售貨機(jī)系統(tǒng)設(shè)計(jì)_第3頁(yè)
畢業(yè)論文基于單片機(jī)的自動(dòng)售貨機(jī)系統(tǒng)設(shè)計(jì)_第4頁(yè)
畢業(yè)論文基于單片機(jī)的自動(dòng)售貨機(jī)系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩44頁(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)介

目錄摘要………………2Aastract…………………………3一、自動(dòng)售貨機(jī)的系統(tǒng)結(jié)構(gòu)……………………41.1自動(dòng)售貨機(jī)的總體系統(tǒng)結(jié)構(gòu)………………41.2自動(dòng)售貨過(guò)程的控制子系統(tǒng)簡(jiǎn)述…………5二、自動(dòng)售貨機(jī)的功能介紹……………………62.1此次設(shè)計(jì)的自動(dòng)售貨機(jī)的功能簡(jiǎn)介………62.2實(shí)現(xiàn)自動(dòng)售貨機(jī)的功能的設(shè)計(jì)思路………7三、硬件接口電路………………73.1中央控制元件簡(jiǎn)介…………83.2投幣及投幣總數(shù)LCD顯示系統(tǒng)…………93.2.1投幣系統(tǒng)…………………93.2.2貨幣累加的實(shí)現(xiàn)……………103.2.3LCD顯示…………………103.3貨物選擇系統(tǒng)………………143.3.1獨(dú)立式鍵盤按鍵的識(shí)別……………………143.3.2鍵盤的編碼…………………143.3.3貨物選擇系統(tǒng)的程序流程圖………………143.4出貨系統(tǒng)……………………243.4.1出貨功能的描敘…………243.4.2出貨程序流程圖…………243.5找錢系統(tǒng)……………………253.5.1找錢系統(tǒng)的描述……………253.5.2程序流程圖…………………25四、設(shè)計(jì)仿真……………………264.1Proteus簡(jiǎn)介…………………264.2仿真電路……………………26附錄………………33參考文獻(xiàn)…………………………48致謝………………49摘要本文詳細(xì)介紹了自動(dòng)售貨機(jī)系統(tǒng)的方案設(shè)計(jì)、硬件選擇、軟件規(guī)劃和編寫,并重點(diǎn)描述了自動(dòng)售貨機(jī)系統(tǒng)的工作原理、系統(tǒng)設(shè)計(jì)、軟件編程的原則和技巧。該系統(tǒng)以單片機(jī)AT89C51芯片為核心,采用集中控制方式實(shí)現(xiàn)了對(duì)自動(dòng)售貨機(jī)全過(guò)程的自動(dòng)控制。本系統(tǒng)選擇獨(dú)立式鍵盤按鍵作為貨物選擇端,實(shí)現(xiàn)了投幣總數(shù)的顯示功能。此外,系統(tǒng)程序采用keil軟件進(jìn)行程序的編寫和編譯,該軟件具有編程簡(jiǎn)單、查錯(cuò)方便、閱讀容易等特點(diǎn)。匯編語(yǔ)言是程序的基本語(yǔ)言,具有容易理解,便于記憶和使用等特點(diǎn)。關(guān)鍵詞:自動(dòng)售貨機(jī),AT89C51,LCD顯示TheVendingMachineDesignBasedOnMCUAbstrctThispaperdescribesavendingmachinesystemdesign,hardwareselection,softwareplanningandpreparation,anddescribesthefocusoftheworkvendingmachinesystemtheory,systemdesign,softwareprogrammingprinciplesandtechniques.AT89C51inthesystemasthecorechip,therealizationofacentralizedcontrolofthevendingmachine'sautomaticcontroltheentireprocess.Choiceofthesystemasastand-alonekeyboardkeystochoosethegoodsside,therealizationofthecoinshowsthetotalnumberoffeatures.Inaddition,thesystemprogramusingkeilsoftwaretoprepareandcompileprocedures,thesoftwareprogrammingissimple,convenienterrorchecking,easytoreadandsoon.Assemblylanguageisthebasiclanguageprogramwitheasytounderstand,easytorememberanduseandsoon.Keywords:VendingMachines,AT89C51,LCDDisplay

一、自動(dòng)售貨機(jī)的系統(tǒng)結(jié)構(gòu)1.1自動(dòng)售貨機(jī)的總體系統(tǒng)結(jié)構(gòu)自動(dòng)售貨機(jī)是集光、機(jī)、電一體化的獨(dú)立機(jī)構(gòu),它只需要顧客投幣和按購(gòu)物鍵選擇即可自動(dòng)售貨及退找零錢,其工作程序如下圖1.1售貨機(jī)的工作原理是:從投幣口送入貨幣,然后通過(guò)傳感器采集數(shù)據(jù)、識(shí)別器判斷貨幣的真?zhèn)尾⑴袆e面值。(2)識(shí)別器把信息數(shù)據(jù)傳給通信模塊。(3)通信模塊與售貨機(jī)的主控系統(tǒng)通信,主控系統(tǒng)顯示面值,啟動(dòng)售貨機(jī)的面板鍵,顯示出哪個(gè)貨道有貨,哪個(gè)貨道已經(jīng)售完,并等待顧客按鍵選擇商品。(4)顧客選擇商品后,售貨機(jī)自動(dòng)把商品送出,等待顧客取走。(5)顯示余額,如果金額足夠多,顧客可以選擇找?guī)呕蛘呃^續(xù)買商品;如果款額不夠,售貨機(jī)經(jīng)過(guò)延時(shí)予以退幣。退幣分為兩種情況:一種是由貨幣識(shí)別器完成退紙幣,另一種是由硬幣的通信模塊完成退硬幣。(6)系統(tǒng)復(fù)零,完成售貨。自動(dòng)售貨機(jī)的硬件原理構(gòu)成如下圖2.2所示綜合所述,售貨機(jī)系統(tǒng)可以分為三部分組成,即自動(dòng)售貨機(jī)的控制子系統(tǒng)、通訊子系統(tǒng)、硬幣器子系統(tǒng)以及紙幣器子系統(tǒng)。其中控制子系統(tǒng)是本設(shè)計(jì)研究重點(diǎn)。1.2自動(dòng)售貨過(guò)程的控制子系統(tǒng)簡(jiǎn)述控制子系統(tǒng)由以下四個(gè)部分組成,分別是預(yù)設(shè)自動(dòng)售貨機(jī)系統(tǒng)、金額累計(jì)、可售指示和退幣系統(tǒng)、售完檢測(cè)系統(tǒng)、售出累計(jì)及自測(cè)功能系統(tǒng)。1、預(yù)設(shè)自動(dòng)售貨機(jī)系統(tǒng)。自動(dòng)售貨機(jī)售出的同類商品可分為若干品種,其售前設(shè)定價(jià)格須預(yù)先寄存在控制系統(tǒng)內(nèi)。售貨機(jī)的價(jià)格設(shè)置由按鍵和存儲(chǔ)器組成。通過(guò)按鍵選擇被設(shè)價(jià)商品的種類及價(jià)格,并將價(jià)格寫入存儲(chǔ)器中,該存儲(chǔ)器本身具有掉電保護(hù)功能,屬于軟件設(shè)置方式。此外,在簡(jiǎn)易售貨機(jī)中,由于出售商品的種類少,價(jià)格變化下,使用幣種單一,也可以用硬件設(shè)置價(jià)格,才用撥碼開(kāi)關(guān)對(duì)應(yīng)方式,結(jié)構(gòu)簡(jiǎn)單,操作方便。2、金額累計(jì)、可售指示和退幣系統(tǒng)??刂葡到y(tǒng)的核心CPU對(duì)識(shí)幣、退幣、無(wú)貨檢驗(yàn)及購(gòu)貨信號(hào)進(jìn)行循環(huán)檢查,當(dāng)有識(shí)幣信號(hào)后,將金額數(shù)值送入金額累計(jì)存儲(chǔ)器中進(jìn)行累計(jì),并通過(guò)串行接口使可售指示燈亮,提示購(gòu)貨。此時(shí)可以按下購(gòu)貨按鈕,由于 CPU檢測(cè)到有購(gòu)貨信號(hào)后,如金額累計(jì)器中的數(shù)值與預(yù)設(shè)價(jià)格相等,則通過(guò)并行擴(kuò)展接口驅(qū)動(dòng)電磁閥或者微電機(jī)驅(qū)動(dòng)出商品,并將金額累計(jì)存儲(chǔ)器清零,完成一次售貨過(guò)程,如累計(jì)金額大于預(yù)設(shè)價(jià)格時(shí),驅(qū)動(dòng)商品后,相減差額由信號(hào)驅(qū)動(dòng)退幣,實(shí)現(xiàn)退幣和找錢功能。3、售完檢測(cè)系統(tǒng)。在自動(dòng)售貨機(jī)商品存儲(chǔ)存道下方按照有接觸行程開(kāi)關(guān),當(dāng)存儲(chǔ)存道有商品時(shí),壓下行程開(kāi)關(guān),自動(dòng)售貨機(jī)正常工作;當(dāng)商品出售完畢時(shí),行程開(kāi)關(guān)被釋放,向CPU發(fā)出無(wú)貨信號(hào),經(jīng)過(guò)檢測(cè)通過(guò)串行擴(kuò)展接口向相應(yīng)的售完指示燈發(fā)出信號(hào),使機(jī)身“售完”指示燈亮,此種商品自動(dòng)停售,即使投幣金額達(dá)到該道商品預(yù)設(shè)價(jià)格數(shù)值,可售按鈕仍然無(wú)法啟動(dòng)信號(hào),金額累計(jì)存儲(chǔ)器也不清零。4、自動(dòng)售貨機(jī)售出累計(jì)及自測(cè)功能系統(tǒng)。該機(jī)CPU在每次售出商品后,向售出累計(jì)存儲(chǔ)器中累計(jì)售出數(shù)據(jù),通過(guò)自動(dòng)售貨機(jī)內(nèi)部的按鍵可在金額顯示窗口中讀到累計(jì)結(jié)果。此外,在按下自測(cè)功能鍵后,出現(xiàn)自測(cè)功能信號(hào),由外部按鍵操作,可檢測(cè)各商品存儲(chǔ)道的驅(qū)動(dòng)商品功能。二、自動(dòng)售貨機(jī)的功能介紹2.1此次設(shè)計(jì)的自動(dòng)售貨機(jī)的功能簡(jiǎn)介基本原理:貨幣識(shí)別器對(duì)所投貨幣進(jìn)行識(shí)別,根據(jù)金額將商品選擇權(quán)提供用戶,用戶選擇后,控制芯片發(fā)出指令將所選擇商品從儲(chǔ)備料道中送達(dá)取物口。其功能描述:貨物種類一共設(shè)有3種,這3種物品分別對(duì)應(yīng)著3個(gè)不同的按鍵選擇,其中2元,3元,4元價(jià)格不等的物品各1種;自動(dòng)售貨機(jī)能夠投幣總數(shù)LCD顯示功能。如果累計(jì)投入的貨幣數(shù)目超過(guò)物品的預(yù)設(shè)價(jià)格,機(jī)器能夠?qū)崿F(xiàn)找錢功能;如果投入的貨幣沒(méi)有達(dá)到所選擇物品的預(yù)設(shè)價(jià)格時(shí),投入的錢將全部退還;在投入一次累加貨幣后選擇物品,如果投入的累加貨幣數(shù)目大大超過(guò)所選擇物品的預(yù)設(shè)單個(gè)價(jià)格時(shí),那么能夠?qū)崿F(xiàn)選擇同一個(gè)物品購(gòu)買多個(gè),在本設(shè)計(jì)中設(shè)為可以同時(shí)購(gòu)買2個(gè)或3個(gè)物品。本設(shè)計(jì)中有一共有7個(gè)按鍵選擇,其中3個(gè)是貨物選擇鍵,有2個(gè)是多選鍵(一次購(gòu)買2個(gè)或3個(gè)貨物),還有1個(gè)確定鍵和1個(gè)取消鍵。如果沒(méi)有按照預(yù)先設(shè)計(jì)的流程順序進(jìn)行按鍵選擇,自動(dòng)售貨機(jī)將會(huì)自動(dòng)返回操作前的狀態(tài),等待再次正確的按鍵選擇。自動(dòng)售貨機(jī)的原理框圖如圖1.2所示2.2實(shí)現(xiàn)自動(dòng)售貨機(jī)的功能的設(shè)計(jì)思路采用單片機(jī)89C51作為中央控制元件;用P3.4(XO)口作為識(shí)別貨幣輸入端;P1口作為貨物選擇選擇端(采用獨(dú)立式鍵盤做為選擇貨物端);采用P0口實(shí)現(xiàn)掉出貨物功能、找零功能;三、硬件接口電路圖3.0硬件接口電路如圖3.0所示,本次設(shè)計(jì)的自動(dòng)售貨機(jī)系統(tǒng)包括以下幾個(gè)部分:中央控制元件89C51、投幣及投幣總數(shù)LCD顯示系統(tǒng)、貨物選擇系統(tǒng)、出貨系統(tǒng)、找錢系統(tǒng)。3.1中央控制元件簡(jiǎn)介在本次設(shè)計(jì)中,中央控制元件采用MCS-51系列單片機(jī)中的89C51。如圖3.1所示.圖3.189C51引腳圖1.主要特性:與MCS-51兼容;4K字節(jié)可編程閃爍存儲(chǔ)器;壽命:1000寫/擦循環(huán);數(shù)據(jù)保留時(shí)間:10年;全靜態(tài)工作:0Hz-24Hz;三級(jí)程序存儲(chǔ)器鎖定;128*8位內(nèi)部RAM;32可編程I/O線;兩個(gè)16位定時(shí)器/計(jì)數(shù)器;5個(gè)中斷源;可編程串行通道;低功耗的閑置和掉電模式片內(nèi)振蕩器和時(shí)鐘電路2.管腳說(shuō)明:VCC:供電電壓。GND:接地。P0口:P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下表所示:口管腳備選功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4T0(記時(shí)器0外部輸入)P3.5T1(記時(shí)器1外部輸入)P3.6/WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7/RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。/PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。/EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。XTAL2:來(lái)自反向振蕩器的輸出。3.2投幣及投幣總數(shù)LCD顯示系統(tǒng)3.2.1投幣系統(tǒng)投幣系統(tǒng)是自動(dòng)售貨設(shè)計(jì)當(dāng)中比較重要的一塊,涉及到貨幣識(shí)別系統(tǒng),對(duì)于識(shí)別貨幣器是如何設(shè)計(jì)、如何工作的,在這里將不做進(jìn)一步的研究。本課題設(shè)計(jì)主要是要實(shí)現(xiàn)自動(dòng)售貨機(jī)的投幣總數(shù)顯示、貨物選擇、出貨以及找零功能。在本次設(shè)計(jì)中用P3.4上的一個(gè)按鍵來(lái)代替投幣系統(tǒng)的電平輸出。在投幣系統(tǒng)中可以通過(guò)89C51內(nèi)部的定時(shí)器來(lái)控制投幣時(shí)間,在規(guī)定的時(shí)間范圍內(nèi)完成投幣動(dòng)作,否則投入的貨幣全部退出。由于本次設(shè)計(jì)主要是要體現(xiàn)從投幣到操作最后到出貨的過(guò)程,在設(shè)計(jì)中沒(méi)有用到定時(shí)設(shè)置。3.2.2貨幣累加的實(shí)現(xiàn)本次設(shè)計(jì)的貨幣累加是對(duì)判斷P3.4上的按鍵上所按下的次數(shù)進(jìn)行累加來(lái)實(shí)現(xiàn)的,并將累加的次數(shù)送到寄存器B,然后系統(tǒng)根據(jù)投幣的總數(shù)和相應(yīng)的操作來(lái)實(shí)現(xiàn)輸出。3.2.3LCD顯示本次設(shè)計(jì)選用TC1602液晶顯示屏,可以直接跟51系列單片接口相連。液晶模塊TC1602采用標(biāo)準(zhǔn)的16腳接口,其引腳功能如下第1腳:VSS為電源地,接GND。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度。第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第5腳:RW為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和RW共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。

第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:BLA背光電源正極(+5V)輸入引腳。第16腳:BLK背光電源負(fù)極,接GND。TC1602液晶模塊內(nèi)帶標(biāo)準(zhǔn)字庫(kù),內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了192個(gè)5×7點(diǎn)陣字符,32個(gè)5×10點(diǎn)陣字符。另外還有字符生成RAM(CGRAM)512字節(jié),供用戶自定義字符。如表1所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”。1602液晶模塊內(nèi)部的控制器共有11條控制指令指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H指令3:光標(biāo)和顯示模式設(shè)置I/D:光標(biāo)移動(dòng)方向,高電平右移,低電平左移S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無(wú)效指令4:顯示開(kāi)關(guān)控制。D:控制整體顯示的開(kāi)與關(guān),高電平表示開(kāi)顯示,低電平表示關(guān)顯示C:控制光標(biāo)的開(kāi)與關(guān),高電平表示有光標(biāo),低電平表示無(wú)光標(biāo)B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍指令5:光標(biāo)或顯示移位S/C:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo)指令6:功能設(shè)置命令DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示F:低電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符指令7:字符發(fā)生器RAM地址設(shè)置

指令8:DDRAM地址設(shè)置

指令9:讀忙信號(hào)和光標(biāo)地址BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)

指令11:讀數(shù)據(jù)1602液晶的讀寫時(shí)序如圖所示:讀操作時(shí)序:寫操作時(shí)序:投幣總數(shù)LCD顯示相關(guān)程序程序如下:MONEYEQU0040H;定義投幣顯示存儲(chǔ)單元 RSEQUP3.0RWEQUP3.1EEQUP3.2MAIN:MOVMONEY,#01H;賦予MONEY單元初值為1START:ACALLDELAY;調(diào)用延時(shí)程序MOVP2,#01H;寫指令01H,清屏LCALLENABLEMOVP2,#38H;寫指令38H,設(shè)定LCD為16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口 LCALLENABLEMOVP2,#0FH;寫指令0FH,顯示ON,光標(biāo)ON,閃爍ONLCALLENABLEMOVP2,#06H;寫指令06H,光標(biāo)輸入方式增量移位LCALLENABLEMOVP2,#80H;第一行起始字符地址LCALLENABLEMOVDPTR,#TABLE;顯示字符表頭地址LCALLDISP;顯示第一行數(shù)據(jù)RET;返回ENABLE:CLRRS;寫指令子程序CLRRWCLRELCALLDELAYSETBERETDISP:MOVR4,#6;準(zhǔn)備顯示一行6個(gè)字符LOOP1:MOVA,00H;投幣數(shù)送AMOVR1,MONEYL1:ADDA,#06H;設(shè)置偏移量為6DJNZR1,L1MOVCA,@A+DPTR;查表取得要顯示的數(shù)據(jù)LCALLDISPF;寫入一個(gè)數(shù)據(jù)INCDPTR;數(shù)據(jù)表指針加1,準(zhǔn)備取下一個(gè)數(shù)據(jù)DJNZR4,LOOP1;一行沒(méi)有顯示完就繼續(xù)JMPINSERTDISPF:MOVP2,A;寫1字節(jié)數(shù)據(jù)到顯示端口SETBRS;寫數(shù)據(jù)時(shí)序(請(qǐng)參照1602LCD使用說(shuō)明書)CLRRWCLRELCALLDELAYSETBERETTABLE:DB"0YUAN"DB"0YUAN"DB"1YUAN"DB"2YUAN"DB"3YUAN"DB"4YUAN"DB"5YUAN"DB"6YUAN"DB"7YUAN"DB"8YUAN"DB"9YUAN"DB"10YUAN"DB"11YUAN"DB"12YUAN"DB"13YUAN"DB"14YUAN"DB"15YUAN"3.3貨物選擇系統(tǒng)按鍵按照接口原理可分為編碼鍵盤與非編碼鍵盤兩類,這兩類鍵盤的主要區(qū)別是識(shí)別鍵符及給出相應(yīng)鍵碼的方法。編碼鍵盤主要是用硬件來(lái)實(shí)現(xiàn)對(duì)鍵的識(shí)別,非編碼鍵盤主要是由軟件來(lái)實(shí)現(xiàn)鍵盤的定義與識(shí)別。由于本次設(shè)計(jì)只需要七個(gè)按鍵即可滿足設(shè)計(jì)要求,所以采用獨(dú)立式鍵盤,這樣對(duì)鍵盤識(shí)別的編程也比較簡(jiǎn)單。3.3.1獨(dú)立式鍵盤按鍵的識(shí)別獨(dú)立式按鍵的識(shí)別很簡(jiǎn)單,如圖3.0所示,當(dāng)某個(gè)鍵按下時(shí),相應(yīng)的接口會(huì)出現(xiàn)低電平,無(wú)鍵按下時(shí)則為高電平,由此就可以判斷出哪個(gè)鍵有按下。3.3.2鍵盤的編碼將P1.0~P1.6上的按鍵編碼為00H、01H、02H、03H、04H、05H、06H,按鍵所對(duì)應(yīng)的功能見(jiàn)表3.1表3.1按鍵功能表按鍵號(hào)對(duì)應(yīng)的功能00H選擇2元錢貨物A01H選擇3元錢貨物B02H選擇4元錢貨物C03H對(duì)選擇的貨物買2個(gè)04H對(duì)選擇的貨物買3個(gè)05H對(duì)選擇的貨物再次確定06H對(duì)選擇的貨物取消3.3.3貨物選擇系統(tǒng)的程序流程圖:3.4出貨系統(tǒng)3.4.1出貨功能的描敘本設(shè)計(jì)中,設(shè)置了價(jià)格分別為2元、3元、4元不等的貨物,一共3種。在通過(guò)按鍵選擇物品后,將會(huì)把產(chǎn)生的信號(hào)輸入給89C51的P1的引腳上,89C51接收信號(hào)后,經(jīng)過(guò)處理后,將會(huì)在貨物輸出端產(chǎn)生與其相對(duì)應(yīng)的信號(hào)輸出,控制所選貨物的掉出。本次設(shè)計(jì)用P1.0~P1.2作為貨物的輸出端,在貨物的輸出端采用光電隔離技術(shù),對(duì)于光電隔離技術(shù)這里不做介紹,在這里用一個(gè)LED指示燈代替貨物的掉出情況,若有貨物掉出則對(duì)應(yīng)輸出口為高電平,則指示燈亮,反之指示燈不亮。由于這里P0口作通用的I/O口輸出,所以必須接上拉電阻,如圖3.0所示。3.4.2出貨程序流程圖圖3.5出貨程序流程3.5找錢系統(tǒng)3.5.1找錢系統(tǒng)的描述本次設(shè)計(jì)中采用P1.3~P1.6口作為找零輸出口,P1.3~P1.6分別對(duì)應(yīng)1元找零口、2元找零口、2元找零口、5元找零口。這樣設(shè)計(jì)的目的是方便實(shí)現(xiàn)不同數(shù)額的找零輸出。同出貨系統(tǒng)一樣,找錢系統(tǒng)也用LED指示燈來(lái)表示找零,對(duì)應(yīng)的端口上若指示燈亮則表示有零錢掉出。3.5.2程序流程圖圖3.6找錢程序流程圖四、設(shè)計(jì)仿真4.1Proteus簡(jiǎn)介Proteus嵌入式系統(tǒng)仿真與開(kāi)發(fā)平臺(tái)是英國(guó)Labcenter公司開(kāi)發(fā)的,是目前世界上最先進(jìn)、最完整的嵌入式系統(tǒng)設(shè)計(jì)與仿真平臺(tái)。它是一種可視化的支持多種型號(hào)單片機(jī)(如51、PIC、AVR、Motorolahcll等),并且支持與當(dāng)前流行的單片機(jī)開(kāi)發(fā)環(huán)境(Keil、MPLAB、IAR)連接調(diào)試的軟硬件仿真系統(tǒng)。Proteus除了具有和其他EDA工具一樣的原理圖、PCB自動(dòng)或人工布線及電路仿真功能外,針對(duì)微控制系統(tǒng)與外設(shè)的混合電路的電路仿真、軟件仿真、系統(tǒng)協(xié)同仿真也做到了一體化和互動(dòng)效果,是目前電子設(shè)計(jì)愛(ài)好者廣泛使用的電子線路設(shè)計(jì)與仿真軟件Proteus和Multisim功能的聯(lián)合和進(jìn)一步發(fā)展。Proteus軟件已有近20年的歷史,在全球擁有龐大的企業(yè)用戶群,是目前唯一能夠?qū)Ω鞣N處理器進(jìn)行實(shí)時(shí)仿真、調(diào)試與測(cè)試的EDA工具,真正實(shí)現(xiàn)了在沒(méi)有目標(biāo)原型時(shí)就可對(duì)系統(tǒng)進(jìn)行設(shè)計(jì)、測(cè)試與驗(yàn)證。由于Proteus軟件包括逼真的協(xié)同仿真功能,得到了包括劍橋大學(xué)在內(nèi)的眾多大學(xué)用戶作為電子學(xué)或嵌入式系統(tǒng)的課程教學(xué)、實(shí)驗(yàn)和水平考試平臺(tái)。目前,Proteus在國(guó)內(nèi)單片機(jī)開(kāi)發(fā)者及單片機(jī)愛(ài)好者之中已開(kāi)始普及,有很多開(kāi)發(fā)者已經(jīng)開(kāi)始用此開(kāi)發(fā)環(huán)境進(jìn)行仿真。4.2仿真電路用Keil軟件仿真的結(jié)果如圖所示:圖5.2.0Keil仿真假如投入5元錢貨幣,操作依次為按2元貨物選擇鍵、確定鍵,則在proteus里的仿真結(jié)果如下圖所示:附錄本次設(shè)計(jì)的完整程序MONEYEQU0040H;定義投幣顯示存儲(chǔ)單元 RSEQUP3.0RWEQUP3.1EEQUP3.2**************投幣總數(shù)LCD顯示程序*************MAIN:MOVMONEY,#01H;賦予MONEY單元初值為1START:ACALLDELAY;調(diào)用延時(shí)程序MOVP2,#01H;寫指令01H,清屏LCALLENABLEMOVP2,#38H;寫指令38H,設(shè)定LCD為16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口 LCALLENABLEMOVP2,#0FH;寫指令0FH,顯示ON,光標(biāo)ON,閃爍ONLCALLENABLEMOVP2,#06H;寫指令06H,光標(biāo)輸入方式增量移位LCALLENABLEMOVP2,#80H;第一行起始字符地址LCALLENABLEMOVDPTR,#TABLE;顯示字符表頭地址LCALLDISP;顯示第一行數(shù)據(jù)RET;返回ENABLE:CLRRS;寫指令子程序CLRRWCLRELCALLDELAYSETBERETDISP:MOVR4,#6;準(zhǔn)備顯示一行6個(gè)字符LOOP1:MOVA,00H;投幣數(shù)送AMOVR1,MONEYL1:ADDA,#06H;設(shè)置偏移量為6DJNZR1,L1MOVCA,@A+DPTR;查表取得要顯示的數(shù)據(jù)LCALLDISPF;寫入一個(gè)數(shù)據(jù)INCDPTR;數(shù)據(jù)表指針加1,準(zhǔn)備取下一個(gè)數(shù)據(jù)DJNZR4,LOOP1;一行沒(méi)有顯示完就繼續(xù)JMPINSERTDISPF:MOVP2,A;寫1字節(jié)數(shù)據(jù)到顯示端口SETBRS;寫數(shù)據(jù)時(shí)序(請(qǐng)參照1602LCD使用說(shuō)明書)CLRRWCLRELCALLDELAYSETBERETTABLE:DB"0YUAN"DB"0YUAN"DB"1YUAN"DB"2YUAN"DB"3YUAN"DB"4YUAN"DB"5YUAN"DB"6YUAN"DB"7YUAN"DB"8YUAN"DB"9YUAN"DB"10YUAN"DB"11YUAN"DB"12YUAN"DB"13YUAN"DB"14YUAN"DB"15YUAN"****************投幣口程序***************INSERT:MOVA,P3;投幣口檢測(cè)CPLAJBCACC.4,S1;P3口有鍵按下轉(zhuǎn)S1LCALLKEYMOVA,R5CJNEA,#0FFH,CHECK;貨物選擇鍵盤有鍵按下轉(zhuǎn)CHECK程序AJMPINSERTS1:LCALLD10MS;延時(shí)消抖MOVA,P3CPLAJBCACC.4,S2S2:MOVR1,MONEYINCR1MOVMONEY,R1WAIT1:MOVA,P3CPLAJBCACC.4,WAIT1投幣開(kāi)關(guān)未松開(kāi)繼續(xù)等待,否則返回STARTAJMPSTART;返回****************鍵盤程序*****************KEY:MOVA,P1;讀P1口CPLAJNZKEY2;A不等零說(shuō)明有鍵按下轉(zhuǎn)KEY2MOVR5,#0FFHRETKEY2:LCALLD10MS;延時(shí)消抖MOVA,P1CPLAJNZKEY3MOVR5,#0FFHRETKEY3:JNBACC.0,K1MOVR5,#00HLCALLWAITRETK1:JNBACC.1,K2MOVR5,#01HLCALLWAITRETK2:JNBACC.2,K3MOVR5,#02HLCALLWAITRETK3:JNBACC.3,K4MOVR5,#03HLCALLWAITRETK4:JNBACC.4,K5MOVR5,#04HLCALLWAITRETK5:JNBACC.5,K6MOVR5,#05HLCALLWAITRETK6:MOVR5,#06HLCALLWAITRETWAIT:MOVA,P1CPLAJNZWAITRET***************貨物選擇程序****************CHECK:MOVA,R5MOVR6,AMOVA,MONEYDECA;因?yàn)橹敖oMONEY的初值是1,所以計(jì)算投幣總數(shù)時(shí)應(yīng)該減去1MOVB,A;將投幣總數(shù)送入BMOVA,R6CJNE A,#00H,NEXTB ;判斷是否按下鍵'0'LJMP TWOYUANNEXTB: CJNE A,#01H,NEXTC ;判斷是否按下鍵'1'LJMP THREEYUANNEXTC:CJNE A,#02H,NEXTD1 ;判斷是否按下鍵'2'LJMP FOURYUANNEXTD1:MOVA,B;按其他鍵時(shí)退幣LCALLOUTMONEY JMPMAINTWOYUAN:MOV A,B ;將投入的貨幣累加數(shù)存入寄存器BCJNE A,#02H,NEXTE1 ;判斷投入的貨幣數(shù)是否為2元錢MOV R0,#01H ;選擇的貨物數(shù)為1個(gè)LOOPE1:LCALL KEY ;等待是否有鍵按下MOV A,R5CJNEA,#0FFH,PRESS2SJMPLOOPE1PRESS2:CJNE A,#05H,NEXTE2 ;按下確定鍵,所選貨物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投幣NEXTE2:CJNE A,#06H,BACKE1 ;按下取消鍵MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKE1:JMPLOOPE1 ;選擇其他鍵時(shí)返回,等到有鍵按下NEXTE1:JNC NEXTE3 ;投入的貨幣數(shù)小于所選擇商品的預(yù)設(shè)價(jià)格LCALL OUTMONEY ;錢全部退還 JMPMAIN;返回,等待下一次投幣NEXTE3:LCALL KEY ;等待是否有鍵按下MOV A,R5CJNEA,#0FFH,PRESS3SJMPNEXTE3PRESS3:CJNE A,#03H,NEXTE4 ;選擇一次性購(gòu)買2個(gè)貨物MOV A,BCJNE A,#04H,NEXTE5 ;判斷投入的貨幣數(shù)是否為4元MOV R0,#02H ;將選擇的貨物數(shù)量值存入R0LOOPE2:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESS4 SJMPLOOPE2PRESS4:CJNE A,#05H,NEXTE6 ;按下確定鍵,所選貨物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投幣NEXTE6:CJNE A,#06H,BACKE2MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKE2:JMP LOOPE2 ;選擇其他鍵時(shí)返回,等到有鍵按下NEXTE5:JNC NEXTE7 ;投入的貨幣數(shù)小于所選貨物的預(yù)設(shè)價(jià)格LCALL OUTMONEY ;錢全部退還 JMPMAIN;返回,等待下一次投幣NEXTE7:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESS5 SJMPNEXTE7PRESS5:CJNE A,#05H,NEXTE8 ;按下確定鍵,所選貨物掉出MOV A,BSUBB A,#04HMOV R0,#02H ;將選擇的貨物數(shù)量值存入R0LCALL OUTMONEY ;找錢LCALL OUTGOODS ;所選貨物掉出 JMPMAIN;返回,等待下一次投幣NEXTE8:CJNE A,#06H,BACKE3MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKE3:JMP NEXTE7 ;選擇其他鍵時(shí)返回,等到有鍵按NEXTE4:CJNE A,#04H,NEXTE9 ;選擇一次性購(gòu)買3個(gè)貨物MOV A,BCJNE A,#06H,NEXTE10 ;判斷投入的貨幣數(shù)是否為6元MOV R0,#03H ;將選擇的貨物數(shù)量值存入R0LOOPE3:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESS6 SJMPLOOPE3PRESS6:CJNE A,#05H,NEXTE11 ;按下確定鍵,所選貨物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投幣NEXTE11:CJNE A,#06H,BACKE4MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKE4:JMP LOOPE3 ;選擇按下其他鍵返回,等到有鍵按下NEXTE10:JNC NEXTE12 ;投入的貨幣數(shù)小于所選貨物的預(yù)設(shè)價(jià)格LCALL OUTMONEY ;錢全部退還 JMPMAIN;返回,等待下一次投幣NEXTE12:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESS7 SJMPNEXTE12PRESS7:CJNE A,#05H,NEXTE13 ;按下確定鍵,所選貨物掉出MOV A,BSUBB A,#06HMOV R0,#03H ;將選擇的貨物數(shù)量值存入R0LCALL OUTMONEY ;找錢LCALL OUTGOODS ;所選貨物掉出 JMPMAIN;返回,等待下一次投幣NEXTE13:CJNE A,#06H,BACKE5;按下取消鍵MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKE5:JMP NEXTE12 ;選擇按其他鍵時(shí)返回,等到有鍵按NEXTE9:CJNE A,#05H,NEXTE14 ;按下確定鍵,所選貨物掉出MOV A,BSUBB A,#02HMOV R0,#01H ;將選擇的貨物數(shù)量值存入R0MOV R1,A ;將找錢數(shù)存入R1LCALL OUTMONEY ;找錢LCALL OUTGOODS ;所選貨物掉出 JMPMAIN;返回,等待下一次投幣NEXTE14:CJNE A,#06H,BACKE6 MOV A,B ;退還全部的錢LCALLOUTMONEY JMPMAIN;返回,等待下一次投幣BACKE6:JMP NEXTE9 THREEYUAN:MOV A,B ;將投入的貨幣累加數(shù)存入寄存器BCJNE A,#03H,NEXTF1 ;判斷投入的貨幣數(shù)是否為3元錢MOV R0,#01H ;選擇的貨物數(shù)為1個(gè)LOOPF1:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSB1 SJMPLOOPF1PRESSB1:CJNE A,#05H,NEXTF2 ;按下確定鍵,所選貨物掉出LCALLOUTGOODS JMPMAIN;返回,等待下一次投幣NEXTF2:CJNE A,#06H,BACKF1 ;按下取消鍵MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKF1:JMP LOOPF1 ;選擇按下其他鍵返回,等到有鍵按下NEXTF1:JNC NEXTF3 ;投入的貨幣數(shù)小于所選擇商品的預(yù)設(shè)價(jià)格LCALL OUTMONEY ;錢全部退還 JMPMAIN;返回,等待下一次投幣NEXTF3:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSB2 SJMPNEXTF3PRESSB2:CJNE A,#03H,NEXTF4 ;選擇一次性購(gòu)買2個(gè)貨物MOV A,BCJNE A,#06H,NEXTF5 ;判斷投入的貨幣數(shù)是否為6元MOV R0,#02H ;將選擇的貨物數(shù)量值存入R0LOOPF2:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSB3SJMPLOOPF2PRESSB3:CJNE A,#05H,NEXTF6 ;按下確定鍵,所選貨物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投幣NEXTF6:CJNE A,#06H,BACKF2;按下取消鍵MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKF2:JMP LOOPF2 ;選擇按下其他鍵返回,等到有鍵按下NEXTF5:JNC NEXTF7 ;投入的貨幣數(shù)小于所選貨物的預(yù)設(shè)價(jià)格LCALL OUTMONEY ;錢全部退還 JMPMAIN;返回,等待下一次投幣NEXTF7:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSB4 SJMPNEXTF7PRESSB4:CJNE A,#05H,NEXTF8 ;按下確定鍵,所選貨物掉出MOV A,BSUBB A,#06HMOV R0,#02H ;將選擇的貨物數(shù)量值存入R0LCALL OUTMONEY ;找錢LCALL OUTGOODS ;所選貨物掉出 JMPMAIN;返回,等待下一次投幣NEXTF8:CJNE A,#06H,VOICEF3MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣VOICEF3:JMP NEXTF7 ;選擇按下其他鍵返回,等到有鍵按NEXTF4:CJNE A,#04H,NEXTF9 ;選擇一次性購(gòu)買3個(gè)貨物MOV A,BCJNE A,#09H,NEXTF10 ;判斷投入的貨幣數(shù)是否為9元MOV R0,#03H ;將選擇的貨物數(shù)量值存入R0LOOPF3:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSB5 SJMPLOOPF3PRESSB5:CJNE A,#05H,NEXTF11 ;按下確定鍵,所選貨物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投幣NEXTF11:CJNE A,#06H,BACKF4MOV A,B LCALL OUTMONEY;退還全部的錢 JMPMAIN;返回,等待下一次投幣BACKF4:JMP LOOPF3 ;選擇按下其他鍵返回,等到有鍵按下NEXTF10:JNC NEXTF12 ;投入的貨幣數(shù)小于所選貨物的預(yù)設(shè)價(jià)格LCALL OUTMONEY ;錢全部退還 JMPMAIN;返回,等待下一次投幣NEXTF12:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSB6 SJMPNEXTF12PRESSB6:CJNE A,#05H,NEXTF13 ;按下確定鍵,所選貨物掉出MOV A,BSUBB A,#09HMOV R0,#03H ;將選擇的貨物數(shù)量值存入R0LCALL OUTMONEY ;找錢LCALL OUTGOODS ;所選貨物掉出 JMPMAIN;返回,等待下一次投幣NEXTF13:CJNE A,#06H,BACKF5MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKF5:JMP NEXTF12 ;選擇按下其他鍵返回,等到有鍵按NEXTF9:CJNE A,#05H,NEXTF14 ;按下確定鍵,所選貨物掉出MOV A,BSUBB A,#03HMOV R0,#01H ;將選擇的貨物數(shù)量值存入R0MOV R1,A ;將找錢數(shù)存入R1LCALL OUTMONEY ;找錢LCALL OUTGOODS ;所選貨物掉出 JMPMAIN;返回,等待下一次投幣NEXTF14:CJNE A,#06H,BACKF6 MOV A,B LCALL OUTMONEY;退還全部的錢 JMPMAIN;返回,等待下一次投幣BACKF6:JMP NEXTF9 ;選擇按下其他鍵返回,等到有鍵按下FOURYUAN:MOV A,B ;將投入的貨幣累加數(shù)存入寄存器BCJNE A,#04H,NEXTG1 ;判斷投入的貨幣數(shù)是否為4元錢MOV R0,#01H ;選擇的貨物數(shù)為1個(gè)LOOPG1:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSC1 SJMPLOOPG1PRESSC1:CJNE A,#05H,NEXTG2 ;按下確定鍵,所選貨物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投幣NEXTG2:CJNE A,#06H,BACKG1 ;按下取消鍵MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKG1:JMP LOOPG1 ;選擇按下其他鍵返回,等到有鍵按下NEXTG1:JNC NEXTG3 ;投入的貨幣數(shù)小于所選擇商品的預(yù)設(shè)價(jià)格LCALL OUTMONEY ;錢全部退還 JMPMAIN;返回,等待下一次投幣NEXTG3:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSC2 SJMPNEXTG3PRESSC2:CJNE A,#03H,NEXTG4 ;選擇一次性購(gòu)買2個(gè)貨物MOV A,BCJNE A,#08H,NEXTG5 ;判斷投入的貨幣數(shù)是否為8元MOV R0,#02H ;將選擇的貨物數(shù)量值存入R0LOOPG2:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSC3 SJMPLOOPG2PRESSC3:CJNE A,#05H,NEXTG6 ;按下確定鍵,所選貨物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投幣NEXTG6:CJNE A,#06H,BACKG2;按下取消鍵MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKG2:JMP LOOPG2 ;選擇按下其他鍵返回,等到有鍵按下NEXTG5:JNC NEXTG7 ;投入的貨幣數(shù)小于所選貨物的預(yù)設(shè)價(jià)格LCALL OUTMONEY ;錢全部退還 JMPMAIN;返回,等待下一次投幣NEXTG7:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSC4 SJMPNEXTG7PRESSC4:CJNE A,#05H,NEXTG8 ;按下確定鍵,所選貨物掉出MOV A,BSUBB A,#08HMOV R0,#02H ;將選擇的貨物數(shù)量值存入R0LCALL OUTMONEY ;找錢LCALL OUTGOODS ;所選貨物掉出 JMPMAIN;返回,等待下一次投幣NEXTG8:CJNE A,#06H,BACKG3MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKG3:JMP NEXTG7 ;選擇按下其他鍵返回,等到有鍵按NEXTG4:CJNE A,#04H,NEXTG9 ;選擇一次性購(gòu)買3個(gè)貨物MOV A,BCJNE A,#0CH,NEXTG10 ;判斷投入的貨幣數(shù)是否為12元MOV R0,#03H ;將選擇的貨物數(shù)量值存入R0LOOPG3:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSC5 SJMPLOOPG3PRESSC5:CJNE A,#05H,NEXTG11 ;按下確定鍵,所選貨物掉出LCALL OUTGOODS JMPMAIN;返回,等待下一次投幣NEXTG11:CJNE A,#06H,BACKG4MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKG4:JMP LOOPG3 ;選擇按下其他鍵返回,等到有鍵按下NEXTG10:JNC NEXTG12 ;投入的貨幣數(shù)小于所選貨物的預(yù)設(shè)價(jià)格LCALL OUTMONEY ;錢全部退還JMPMAIN;返回,等待下一次投幣NEXTG12:LCALL KEY ;等待是否有鍵按下MOV A,R5 CJNEA,#0FFH,PRESSC6 SJMPNEXTG12PRESSC6:CJNE A,#05H,NEXTG13 ;按下確定鍵,所選貨物掉出MOV A,BSUBB A,#0CHMOV R0,#03H ;將選擇的貨物數(shù)量值存入R0LCALL OUTMONEY ;找錢LCALL OUTGOODS ;所選貨物掉出 JMPMAIN;返回,等待下一次投幣NEXTG13:CJNE A,#06H,BACKG5MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKG5:JMP NEXTG12 ;選擇按下其他鍵返回,等到有鍵按NEXTG9:CJNE A,#05H,NEXTG14 ;按下確定鍵,所選貨物掉出MOV A,BSUBB A,#04HMOV R0,#01H ;將選擇的貨物數(shù)量值存入R0LCALL OUTMONEY ;找錢LCALL OUTGOODS ;所選貨物掉出 JMPMAIN;返回,等待下一次投幣NEXTG14:CJNE A,#06H,BACKG6 MOV A,B ;退還全部的錢LCALL OUTMONEY JMPMAIN;返回,等待下一次投幣BACKG6:JMP NEXTG9 ;選擇按下其他鍵返回,等到有鍵按下****************出貨程序*****************OUTGOODS:MOVA,R6MOVDPTR,#GOODSTAB MOVCA,@A+DPTR MOVP0,A;掉出貨物 LCALLDELAY1;調(diào)用延時(shí)程序 MOVA,#0FFH MOVP0,A;將控制掉出貨物開(kāi)關(guān)關(guān)閉 LCALLDELAY1 DJNZR0,OUTGOODS;判斷是否還將繼續(xù)掉出貨物 LCALLDELAY1 RETGOODSTAB:DB0FEH;出2元貨物DB0FDH;出3元貨物 DB0FBH;出4元貨物****************找零程序****************OUTMONEY:MOVDPTR,#MONEYTAB;查表MOVCA,@A+DPTR MOVP0,A;找出零錢LCALLDELAY1;調(diào)用延時(shí)程序 MOVA,#0FFH;將控制掉出零錢開(kāi)關(guān)關(guān)閉MOVP0,ARETMONEYTAB:DB0FFH;找回0元DB0F7H;找回1元 DB0EFH;找回2元 DB0E7H;找回3元 DB0CFH;找回4元DB0BFH;找回5元 DB0B7H;找回6元 DB0AFH;找回7元 DB0A7H;找回8元 DB08FH;找回9元DB07H;找回10元DELAY:MOVR2,#50;延時(shí)子程序D1:MOVR3,#50D2:DJNZR3,D2DJNZR2,D1RETD10MS:MOVR2,#64H;10毫秒延時(shí)程序DL2:MOVR3,#18HDL1:NOPNOPDJNZR3,DL1DJNZR2,DL2RETDELAY1:MOVR7,#10;延時(shí)子程序1DELAY2:MOVR2,#250D3:MOVR3,#200D4:DJNZR3,D4DJNZR2,D3DJNZR7,DELAY2RETEND參考文獻(xiàn)[1]朱軍王海東.自動(dòng)售貨機(jī)中的紙鈔及硬幣識(shí)別原理.傳感器世界[J],1996年2期,37-39[2]葉銀蘭.自動(dòng)售貨機(jī)的設(shè)計(jì)與實(shí)現(xiàn).微計(jì)算機(jī)信息[J],2008年23期,53-55[3]張毅剛彭喜源譚曉昀.MCS-51單片機(jī)應(yīng)用設(shè)計(jì)[M].哈爾濱工業(yè)大學(xué)出版社,1997年12月[4]笨笨.TC1602液晶模塊與單片接口字符實(shí)驗(yàn).,2009年3月25日[5]朱清慧張鳳蕊翟天嵩.Proteus教程[M].清華大學(xué)出版社,2008年9月致謝本次設(shè)計(jì)是在蔣躍文老師的悉心指導(dǎo)下完成的,通過(guò)這次畢業(yè)設(shè)計(jì)我得到了一次用專業(yè)知識(shí)、專業(yè)技能分析和解決問(wèn)題全面系統(tǒng)的鍛煉,同時(shí)在設(shè)計(jì)過(guò)程當(dāng)中我加強(qiáng)了對(duì)單片機(jī)的基本原理、單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)過(guò)程的了解,以及加強(qiáng)了對(duì)Keil軟件和Proteus軟件的應(yīng)用能力,為今后的學(xué)習(xí)和研究打下了基礎(chǔ)。同時(shí),我也要感謝其他同學(xué)的幫助,從他們身上我學(xué)到了很多理論知識(shí),自己的實(shí)踐能力也得到了很大的提高。在未來(lái)的學(xué)習(xí)和工作中,我會(huì)繼續(xù)努力,不斷地實(shí)現(xiàn)自己的人生價(jià)值,以更好的成績(jī)來(lái)回報(bào)母校,回報(bào)社會(huì)。aganemploymenttribunalclaiEmloymenttribunalssortoutdisagreementsbetweenemployersandemployees.Youmayneedtomakeaclaimtoanemploymenttribunalif:youdon'tagreewiththedisciplinaryactionyouremployerhastakenagainstyouyouremployerdismissesyouandyouthinkthatyouhavebeendismissedunfairly.Formoreinformu,takeadvicefromoneoftheorganisationslistedunder

Furtherhelp.Employmenttribunalsarelessformalthansomeothercourts,butitisstillalegalprocessandyouwillneedtogiveevidenceunderanoathoraffirmation.Mostpeoplefindmakingaclaimtoanemploymenttribunalchallenging.Ifyouarethinkingaboutmakingaclaimtoanemploymenttribunal,youshouldgethelpstraightawayfromoneoftheorganisationslistedunder

Furtherhelp.ationaboutdismissalandunfairdismissal,see

Dismissal.Youcanmakeaclaimtoanemploymenttribunal,evenifyouhaven't

appealed

aga

溫馨提示

  • 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論