版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 本科畢業(yè)論文(設(shè)計)</p><p> 基于單片機的自動售貨機的系統(tǒng)設(shè)計</p><p> 姓 名: </p><p> 學(xué) 號: </p><p> 專 業(yè): </p><p&g
2、t; 院 系: </p><p> 指導(dǎo)老師: </p><p> 職稱學(xué)歷: </p><p> 完成時間: </p><p><b> 教務(wù)處制</b></p>
3、<p> 基于單片機的自動售貨機的系統(tǒng)設(shè)計</p><p><b> 摘 要</b></p><p> 本文設(shè)計了一種以STC89C52單片機為核心,采用集中控制方式實現(xiàn)了對自動售貨機全過程的自動控制。本系統(tǒng)選擇3×3矩陣式鍵盤作為控制按鍵,實現(xiàn)貨物的掉出、退幣以及貨幣數(shù)的LCD顯示等功能。</p><p> 關(guān)
4、鍵詞: STC89C52,自動售貨機,鍵盤控制,LCD顯示</p><p> Design of automatic system of vending machine based on Microcontroller</p><p><b> Abstract</b></p><p> This paper introduces a d
5、esign of STC89C52 microcontroller as the core, adopts the centralized control method to realize the automatic control of the whole process of automatic vending machine. In this system, 3 * 3 matrix keyboard as the contro
6、l button, realize the goods out of, the coin and currency number LCD display and other functions.</p><p> Keywords:STC89C52, vending machine, keyboard control, LCD display</p><p><b> 目
7、 錄</b></p><p><b> 1 緒 論1</b></p><p> 2 自動售貨機系統(tǒng)總體設(shè)計方案2</p><p> 2.1 工作原理2</p><p> 2.2 項目要求3</p><p> 2.2.1 硬件設(shè)計要求3</p>&l
8、t;p> 2.2.2 軟件設(shè)計要求4</p><p> 3 控制系統(tǒng)的硬件電路設(shè)計5</p><p> 3.1 硬件設(shè)計概述5</p><p> 3.2 微控制器5</p><p> 3.3 貨幣識別系統(tǒng)6</p><p> 3.3 LCD顯示系統(tǒng)模塊8</p><p&
9、gt; 3.4 提示程序模塊9</p><p> 4 控制系統(tǒng)的軟件設(shè)計10</p><p> 4.1軟件設(shè)計概述10</p><p> 4.2 主程序10</p><p> 4.3 鍵盤程序設(shè)計12</p><p> 4.4 字符型液晶顯示模塊程序設(shè)計13</p><p&g
10、t; 4.5 提示模塊程序設(shè)計16</p><p> 5 結(jié) 論18</p><p><b> 致 謝19</b></p><p><b> 參考文獻20</b></p><p> 附 錄1 主函數(shù)程序21</p><p> 附 錄2 T
11、C1602AL顯示程序24</p><p> 附 錄3 提示程序27</p><p> 附 錄4 總原理圖28</p><p><b> 1 緒 論</b></p><p> 自動售貨機是一種全新的商業(yè)零售形式,20世紀(jì)70年代自日本和歐美發(fā)展起來。它又被稱為24小時營業(yè)的微型超市。從自動售貨機
12、的發(fā)展趨勢來看,它的出現(xiàn)是由于勞動密集型的產(chǎn)業(yè)構(gòu)造向技術(shù)密集型社會轉(zhuǎn)變的產(chǎn)物。大量生產(chǎn)、大量消費以及消費模式和銷售環(huán)境的變化,要求出現(xiàn)新的流通渠道;而相對的超市、百貨購物中心等新的流通渠道的產(chǎn)生,人工費用也不斷上升;再加上場地的局限性以及購物的便利性等這些因素的制約,無人自動售貨機作為一種必須的機器便應(yīng)運而生了。</p><p> 從廣義來講投入硬幣、紙幣、信用卡等后便可以銷售商品的機械,從狹義來講就是自動銷售
13、商品的機械。從供給的條件看,自動售貨機可以充分補充人力資源的不足,適應(yīng)消費環(huán)境和消費模式的變化,24小時無人售貨的系統(tǒng)可以更省力,運營時需要的資本少、面積小,有吸引人們購買好奇心的自身性能,可以很好地解決人工費用上升的問題等各項優(yōu)點。 此次自動售貨機的設(shè)計是以單片機為核心的自動化控制裝置,它集按鍵選擇技術(shù)、單片機技術(shù)和顯示技術(shù)于一體。因此,在商業(yè)、生活中得到了廣泛的應(yīng)用。有些自動售貨機不僅能夠自動識別1元、5角硬幣,而且能夠自動識別20
14、元、10元、5元紙幣,還會自動找零,人機對話的應(yīng)用性提高使自動售貨機在國內(nèi)外大面積普及成為可能。</p><p> 隨著科技的發(fā)展及人們生活水平的提高,自動售貨機市場越來越呈現(xiàn)出多元化及個性化的需求。人們通過自動售貨機自助購物,這種簡單、快捷的方式正逐漸成為市民的一種新的消費時尚,并且滿足了人們在當(dāng)今科技高速發(fā)展的現(xiàn)代社會追求高品質(zhì)生活的需要。自動售貨機在城市商業(yè)區(qū)、寫字樓大廳、風(fēng)景區(qū)、車站、碼頭、繁華街道等公
15、共場所的布設(shè)能夠美化城市環(huán)境,方便群眾生活,它已經(jīng)成為城市各角落的一道亮麗風(fēng)景線。</p><p> 自動售貨機必將在國內(nèi)普及,并成為城市現(xiàn)代文明程度的一種象征性標(biāo)志。 本文詳細(xì)介紹了如何控制、要求進行自動售貨機系統(tǒng)的方案設(shè)計、硬件選擇、軟件規(guī)劃和編寫,并重點描述了自動售貨機系統(tǒng)的工作原理、系統(tǒng)設(shè)計、軟件編程的原則和技巧。</p><p> 2 自動售貨機系統(tǒng)總體設(shè)計方案</p&
16、gt;<p> 該章節(jié)對自動售貨機的控制系統(tǒng)進行完整的功能需求分析,并確定總體設(shè)計方案,這是完成系統(tǒng)設(shè)計的前提。這不僅有助于時間的合理計劃和安排,還可以避免因盲目進行設(shè)計而達不到要求的情況。</p><p><b> 2.1 工作原理</b></p><p> 自動售貨機是集機、電的獨立智能化售貨設(shè)備,只需顧客進行投幣、選貨、退幣等簡單的操作選擇,
17、就能夠方便快捷地購買到想要的商品。其工作程序如下圖2.1</p><p> 圖2.1 自動售貨機的工作時序圖</p><p> 自動售貨機的工作時序是:</p><p> 顧客從投幣口投入貨幣,然后通過貨幣識別器采集數(shù)據(jù)、識別判斷貨幣的真?zhèn)尾⑴袆e面值,并把信息數(shù)據(jù)傳給主控系統(tǒng)通信,啟動售貨機的貨物選擇鍵和退幣按鈕,并等待顧客按鍵選擇貨物。顧客選擇貨物后,自動售
18、貨機把貨物準(zhǔn)確送出領(lǐng)貨口,顧客再取走貨物。如果售貨機內(nèi)還有顧客未用完的貨幣,顧客可以選擇按下退幣按鈕進行取零或者繼續(xù)買商品;如果款額不夠但還有余額,顧客依然可以按下退幣按鈕取零;如果沒有余額,售貨機將自動調(diào)成售貨結(jié)束。最后系統(tǒng)復(fù)零,完成售貨。</p><p><b> 2.2 項目要求</b></p><p> 此次自動售貨機設(shè)計將滿足一下幾點要求:主控制系統(tǒng)對貨
19、幣識別器識別的金額進行記錄,根據(jù)金額數(shù)通過LCD顯示器跟蹤顯示,同時售貨機將貨物選擇權(quán)提供用戶,用戶選擇貨物后,單片機發(fā)出指令將所選商品從儲貨倉送到取物口。其功能描述:貨物種類一共設(shè)有8種,這8種物品分別對應(yīng)著8個不同的按鍵選擇,其中價格不等的物品各3種,1元的有3個可選按鍵,2元的有3個可選按鍵,3元的有2個可選按鍵;自動售貨機將顧客投的貨幣進行金額累加。投了幾次貨幣后,這樣機器就會把投入的貨幣總額數(shù)目大小輸入中央控制元器件,進行處理
20、。如果累計投入的貨幣數(shù)目多于物品的設(shè)定價格,機器能夠?qū)崿F(xiàn)找錢功能,或者顧客可以繼續(xù)選擇貨物;如果投入的貨幣沒有達到所選擇物品的預(yù)設(shè)價格時,投入的錢將全部退還。</p><p> 2.2.1 硬件設(shè)計要求</p><p> 控制系統(tǒng)要完成圖2-1中的各個環(huán)節(jié),應(yīng)具備中央處理模塊(微控制器),鍵盤輸入模塊,報警提示模塊,數(shù)額顯示模塊、貨幣識別模塊和電機驅(qū)動模塊等,電機驅(qū)動模塊是自動售貨設(shè)計
21、當(dāng)中比較重要的一塊,涉及到送出貨物的功能。對于驅(qū)動電機是如何設(shè)計、如何工作的,在這里將不做進一步的研究。本課題設(shè)計主要是要實現(xiàn)自動售貨機的投幣總數(shù)顯示、貨物選擇、出貨(用發(fā)光二極管替代)以及找零功能。在本次設(shè)計中用P2.0~P2.7作為送出貨物輸出接口,以發(fā)光二極管作為出貨狀態(tài)。這就需要控制系統(tǒng)提供如表2.1中所列的外設(shè)器件。</p><p> 表2.1 硬件電路接口列表</p><p>
22、; 這些外設(shè)元器件的總體原理框架如圖2.2所示</p><p> 圖2.2 硬件系統(tǒng)總體框架圖</p><p> 2.2.2 軟件設(shè)計要求</p><p> 控制系統(tǒng)的軟件應(yīng)包括主程序、啟動退幣系統(tǒng)程序、貨幣數(shù)額顯示程序以及提示程序四個部分。參照國內(nèi)外自動售貨機的系統(tǒng)設(shè)計實例,結(jié)合自身硬件特點,系統(tǒng)要編寫的程序需滿足以下特點和要求:1、友好的人機交互界面,簡
23、易的操作步驟和可靠的銷售流程;2、鍵盤模塊能夠激活自動售貨機的售貨系統(tǒng),同時完成對商品的選擇操作以及對貨幣識別器的退幣系統(tǒng)的啟動;3、語音提示模塊要實現(xiàn)選取貨物時金額不足的提示功能。本文第四章將重點講述軟件程序的設(shè)計。</p><p> 3 控制系統(tǒng)的硬件電路設(shè)計</p><p> 3.1 硬件設(shè)計概述</p><p> 硬件是控制系統(tǒng)的物理載體,硬件設(shè)計是整
24、個設(shè)計的基礎(chǔ)環(huán)節(jié)。根據(jù)對第2.2.1節(jié)的硬件設(shè)計要求可知,此次控制系統(tǒng)的構(gòu)成模塊應(yīng)包括:中央處理模塊(微控制器),鍵盤輸入模塊,語音提示模塊,LCD顯示模塊和MDB貨幣識別模塊。各元器件的選用質(zhì)量在此次設(shè)計中很重要,是否合理直接影響控制系統(tǒng)的設(shè)計質(zhì)量,要以經(jīng)濟適用、穩(wěn)定可靠為原則進行設(shè)計。</p><p><b> 3.2 微控制器</b></p><p> 微控
25、制器是將微型計算機的主要部分集成在一個芯片上的單芯片微型計算機。微控制器誕生于20世紀(jì)70年代中期,經(jīng)過30多年的發(fā)展,其成本越來越低,而性能越來越強大,這使其應(yīng)用已經(jīng)無處不在,遍及各個領(lǐng)域。例如電機控制、條碼閱讀器/掃描器、消費類電子、游戲設(shè)備、電話、HVAC、樓宇安全與門禁控制、工業(yè)控制與自動化和白色家電(洗衣機、微波爐)等。微控制器主要分為單片機、DSP、ARM等等,其中單片機體積小、使用靈活方便、價格便宜,主要應(yīng)用于工業(yè)控制和智
26、能儀表等領(lǐng)域;DSP芯片具高速運算能力,常用來處理大量數(shù)據(jù)或數(shù)字信號;ARM憑借低功耗、高性能的特點,廣泛應(yīng)用在移動通信和手持設(shè)備領(lǐng)域。 </p><p> 綜合考慮技術(shù)指標(biāo)、接口需求和經(jīng)濟性等因素,本設(shè)計采單片機STC89C52最合理。STC89C52是一種帶8K字節(jié)閃爍可編程可檫除只讀存儲器(FPEROM-Flash Programable and Erasable Read Only Memory )
27、的低電壓,高性能COMOS8的微處理器,該器件采用ATMEL搞密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。</p><p> 該單片機具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,3個16 位定時器/計數(shù)器,4個外部中斷,一個7向量4級中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級中斷結(jié)構(gòu)),
28、全雙工串行口。</p><p> 該單片機的引腳配置如圖3.1所示:</p><p> 圖3.1 STC89C52引腳配置圖</p><p> 3.3 貨幣識別系統(tǒng)</p><p> 貨幣識別分別有對硬幣和紙幣的識別,由此在下文中分別介紹說明:</p><p> 我國目前發(fā)行的1元、5角和1角硬幣的金屬原材
29、料是為造幣而專門使用的特殊合金,因此在它通過投幣入口進入由電感和電容組成的特定高頻振蕩線路所產(chǎn)生的磁場時,金屬材質(zhì)和體積的體積的差別對電感量的影響大小也出現(xiàn)微弱差異,電感量的變化將引起振蕩頻率的變化,與設(shè)定值進行比較,確定某種硬幣后,經(jīng)窄帶選頻電路將頻率信號變?yōu)殡妷盒盘栞敵觯瓿蓪饘儆矌诺淖R別。金屬硬幣識別器種類繁多,但存幣退幣機構(gòu)基本上分為兩類:一類是平面是存幣,電磁閥退幣;另一類是圓筒式存幣,步進機退幣。當(dāng)硬幣投入后經(jīng)過識別識別出
30、電信號后,偽幣和異物被排出真幣按面值由幾組分配電磁閥分配到不同存幣腔體內(nèi)備用。當(dāng)收到退幣找零電信號后,通過退幣電磁閥或者退幣電機拉桿,將存幣腔內(nèi)下部依電信號程序退出,完成自動售貨機的退幣找零功能。硬件數(shù)據(jù)采集設(shè)備的電源為發(fā)光二極光,所發(fā)出的光的波長峰值在紅外線波段,但不是單光譜,其中紅外光成分達到90%以上,因此,光源輻射光中起主要作用的實際上是紅外輻射。實驗中對各種紙幣的特征的識別也主要是根據(jù)紙幣的表面特征對紅外輻射的敏感。紅外輻射是
31、光輻射中的一種類型,它具有普通光輻射的共性。這主要是因為不同的紙幣表面特征不</p><p> 作為整個貨幣識別系統(tǒng)的核心部分,紙幣控制器必須由一顆功能相對較強的嵌入式微處理器以及一系列外圍器件構(gòu)成。</p><p> 89C52擁有4個I/O口即P0、P1、P2、P3,它有兩個可編程的定時器/計數(shù)器,分別稱為定時器/計數(shù)器0和定時器/計數(shù)器1。它們都是16位加法計數(shù)結(jié)構(gòu),分別由TH0
32、和TL0及TH1和TL1兩個8位計數(shù)器組成。</p><p> 其主要功能是:處理器通過控制發(fā)光二極管發(fā)光,當(dāng)紙幣進入時,入口處發(fā)光二極光投射過紙幣的光強變化,被相應(yīng)入口處的光電三極管接受到后轉(zhuǎn)換為電信號,傳給89C52處理器,經(jīng)過判斷,處理器直接控制;當(dāng)用戶按下退幣按鈕時,單片機將信號發(fā)送到MDB中,再施行退幣功能。其中注意的是,當(dāng)選取貨物后,貨幣器能監(jiān)測到金額的減少,在退幣系統(tǒng)啟動時退出相應(yīng)的金額。<
33、/p><p> MDB的通信接口是全雙工的主從式接口,使用標(biāo)準(zhǔn)的專用6針插頭連接,其中4號接口與P3.0相連,CPU接收到信號并記錄金額,5號接口與P3.1相連,CPU通過發(fā)送信號控制退幣系統(tǒng)的運行。由于貨幣識別器的核心內(nèi)容是保密的,可供參考的資料較少,因此本系統(tǒng)中的MDB的使用僅限1元的投幣、退幣方式,同時下一章的軟件設(shè)計中不做詳細(xì)的介紹。MDB接口電路設(shè)計如圖3.2所示。</p><p>
34、; 圖3.2 MDB接口電路圖</p><p> 3.3 LCD顯示系統(tǒng)模塊</p><p> 在用戶操作自動售貨機時,為了讓用戶(顧客或運營商)更加簡便、容易達成交易,本設(shè)計選用廣州捷勝吉電子科技公司的TC1602AL型液晶顯示模塊實現(xiàn)此功能。其規(guī)格參數(shù)如下:外形尺寸:80×36mm; 視域尺寸:64.5×13.8mm</p><p>
35、 點尺寸:寬×高=0.52×0.6mm </p><p> 本文設(shè)計的電路如圖3.3所示。</p><p> 圖3.3 液晶模塊電路圖</p><p> 表3.1 液晶顯示模塊接口說明</p><p> 目前,液晶顯示模塊在國內(nèi)已經(jīng)規(guī)范化。其引腳接口形式都是標(biāo)準(zhǔn)統(tǒng)一的,只要在指令設(shè)置上稍加改動,就可驅(qū)動各
36、規(guī)格的字符型液晶顯示模塊,因此使用起來非常方便。關(guān)于圖3.3中各引腳的功能如表3.1中所描述。</p><p> 3.4 提示程序模塊</p><p> 提示模塊電路圖,如圖3.4所示。</p><p> 圖3.4 提示模塊電路圖</p><p> 1.此次提示電路的功能是當(dāng)用戶投入金額不夠并且按下貨物選擇按鍵時,短暫發(fā)出提示音,會
37、給用戶提示作用。 2.參數(shù)計算:這是一個報警提示電路它由電阻、三極管、蜂鳴器組成,R4作為保護電阻它的阻值范圍:330~1K。</p><p> 4 控制系統(tǒng)的軟件設(shè)計</p><p><b> 4.1軟件設(shè)計概述</b></p><p> C語言是編譯型程序設(shè)計語言的一種,它兼顧了各種高級語言和匯編語言的特點。使用C語言進行程序設(shè)計已經(jīng)
38、成為單片機軟件開發(fā)的主流。其有以下優(yōu)點:</p><p> 1、 C語言具有語法簡潔的特點 2 、運算符豐富,奪得我有時后都分不清 3 、數(shù)據(jù)結(jié)構(gòu)類型豐富 4 、結(jié)構(gòu)化,就是想一小塊一小塊的程序,這樣寫起來容易 5 、語法要求不嚴(yán)格,這樣的話相對容易一些,但有時喉也不爽,有錯的時候不知道語言的語法錯了</p><p> 6 、功能強大,現(xiàn)在諸如nuix這
39、樣的操作系統(tǒng)就是用c 語言寫的</p><p> 本設(shè)計使用被廣泛應(yīng)用的Keil uVision2 C語言編譯器為開發(fā)環(huán)境,進行了單片機的C語言程序設(shè)計。</p><p> 綜合考慮自動售貨機的功能需求和硬件設(shè)計,軟件程序的編寫應(yīng)該包括以下幾個內(nèi)容:主程序;鍵盤模塊程序;液晶顯示模塊的程序;提示模塊程序。</p><p><b> 4.2 主程序&l
40、t;/b></p><p> 在程序?qū)哟谓Y(jié)構(gòu)方面,當(dāng)系統(tǒng)上電之后,應(yīng)先對其進行相關(guān)初始化(如對每種飲料價格的設(shè)定和商品原始庫存數(shù)量的設(shè)定等)。然后程序應(yīng)當(dāng)進入無限循環(huán),再根據(jù)相應(yīng)的觸發(fā)條件進入相應(yīng)的子程序,完成相應(yīng)的狀態(tài)下的工作。由于系統(tǒng)在多個狀態(tài)間跳轉(zhuǎn)切換,所以在程序編寫時比較適合應(yīng)用循環(huán)結(jié)構(gòu)實現(xiàn)。自動售貨機工作的整個流程圖如圖4.1所示。</p><p><b>
41、N </b></p><p><b> N</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N Y</b></p><p><b&g
42、t; Y</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p> 圖4.1自動售貨機的流程圖</p><p> 主程序?qū)⒄{(diào)用其他子程序以達到自動售
43、貨機的完整工作。例如,當(dāng)用戶按下按鍵并順利取得貨物時,主程序?qū)⒄{(diào)用TC1602AL顯示程序,以達到顯示余額的功能,再讓用戶選擇是否繼續(xù)交易。主程序詳見附錄。</p><p> 4.3 鍵盤程序設(shè)計</p><p> 主程序中將直接對鍵盤實施控制,當(dāng)用戶在與自動售貨機進行交易時,鍵盤則是重要的人機交互設(shè)備,對鍵盤的識別流程如圖4.2。</p><p> 圖4.2
44、 按鍵識別模塊原理圖</p><p> 此次的鍵盤設(shè)計是以3X3矩陣形式,其中前八個按鍵是貨物選擇鍵,第九個鍵盤是作為退幣系統(tǒng)啟動按鍵,當(dāng)用戶按下鍵盤,程序通過去抖動的方法來解除干擾,再以行掃描的方式來確定所按鍵盤,并確定鍵值,最后再等待顧客釋放。</p><p> 4.4 字符型液晶顯示模塊程序設(shè)計</p><p> TC1602AL液晶模塊的功能相對簡單,
45、而控制器的設(shè)置也不多,下面就介紹常用的控制驅(qū)動特性。</p><p> TC1602AL的基本操作分為以下4種,如表3-1所示。</p><p> 表3-1 TC1602AL的基本操作</p><p> TC1602AL指令的描述(其中:L=0,H=1,X=0/1)</p><p> 1、清顯示 CODE:</p>&
46、lt;p> 功能:送20H“空代碼”到所有的DDRAM中,清楚所有的顯示數(shù)據(jù),并將DDRAM地址計算器(AC)清零,光標(biāo)返回到原始狀態(tài),設(shè)置I/D=H,AC為自動加一的輸入方式。</p><p> 2、返回 CODE:</p><p> 功能:設(shè)DDRAM地址為零,顯示回原位,DDRAM內(nèi)容不變。</p><p> 3、輸入方式設(shè)置 CODE:&l
47、t;/p><p> 功能:設(shè)置光標(biāo)移動方向并指定整體顯示是否移動。</p><p> I/D表示地址的修改方式,也是光標(biāo)的移動方式:</p><p> I/D=1:光標(biāo)由左向右移動且AC自動加一;</p><p> I/D=0:光標(biāo)由右向左移動且AC自動減一。</p><p> SH表示是否允許顯示畫面的滾動方式
48、:</p><p> SH=0::禁止?jié)L動;SH=1:允許滾動。</p><p> SH=1且I/D=0:顯示畫面向右移動一個字符。</p><p> SH=1且I/D=1:顯示畫面向左移動一個字符。</p><p> 4、顯示開關(guān)控制 CODE:</p><p> 功能:控制整體顯示開關(guān)(D),光標(biāo)開關(guān)(
49、C)及閃爍開關(guān)(B)的開關(guān)。 </p><p> D=1:整體顯示開;D=0:整體顯示關(guān)。</p><p> C=1:光標(biāo)顯示開;C=0:光標(biāo)顯示關(guān)。</p><p> B=1:光標(biāo)閃爍;B=0:光標(biāo)不閃爍。</p><p> 5、光標(biāo)或整體顯示移位位置 CODE:</p><p> 功能:移動光標(biāo)或整體顯
50、示,同時不改變DDRAM內(nèi)容,S/C和R/L置位不同時對應(yīng)的操作:</p><p> 00:光標(biāo)左移;01:光標(biāo)右移。</p><p> 10:所有顯示左移:11:所有顯示右移。</p><p> 6、功能設(shè)置 CODE:</p><p> 功能:設(shè)置接口數(shù)據(jù)位數(shù)(DL)、顯示行數(shù)(N)以及字形(F)。</p><
51、;p> DL=1:8位數(shù)據(jù)接口模式,DL=0:4位數(shù)據(jù)接口模式(DB4-7有效,在這種模式下,傳送的方式為先高4位,后低4位)。</p><p> N=1:兩行顯示;N=0:單行顯示。</p><p> F=1:5×10點陣模式加光標(biāo);F=0:5×7點陣模式加光標(biāo)。</p><p> 7、設(shè)置CGRAM地址 CODE:</p
52、><p> 功能:將CGRAM地址送入AC中。設(shè)置后MCU對數(shù)據(jù)的操作是對DDRAM的讀/ 寫操作。</p><p> 8、設(shè)置DDRAM地址 CODE:</p><p> 功能:DDRAM地址送入AC中。</p><p> 當(dāng)N=0時,DDRAM地址范圍為:80H-FFH;</p><p> 當(dāng)N=1時:第一
53、行的DDRAM地址范圍為:80H-BFH;</p><p> 第二行的DDRAM地址范圍為:C0H-FFH。</p><p> 9、讀忙狀態(tài)位(BF)及地址 CODE:</p><p> 功能:讀最高位(BF)判斷內(nèi)部操作是否正在執(zhí)行,并讀低7位地址計數(shù)器的內(nèi)容。</p><p> 10、寫數(shù)據(jù) CODE:</p>
54、<p> 功能:寫數(shù)據(jù)到CGRAM或是DDRAM.。</p><p> 如果寫數(shù)據(jù)到CGRAM,要先執(zhí)行“設(shè)置CGRAM地址”命令;</p><p> 如果寫數(shù)據(jù)到DDRAM,則要先執(zhí)行“設(shè)置DDRAM地址”命令。</p><p> 11、讀數(shù)據(jù) CODE:</p><p> 功能:從CGRAM或是DDRAM讀出數(shù)據(jù)。&
55、lt;/p><p> 如果從CGRAM讀數(shù)據(jù),要先執(zhí)行 “設(shè)置CGRAM地址”命令;</p><p> 如果寫數(shù)據(jù)到DDRAM,則要先執(zhí)行“設(shè)置DDRAM地址”命令。執(zhí)行讀操作后,地址自動加/減1(根據(jù)輸入方式設(shè)置指令)。</p><p> TC1602AL顯示器在交易過程能起到金額顯示作用,對顯示器的識別流程如圖4.3。顯示模塊程序詳見附錄。</p>
56、<p> 圖4.3 LCD顯示原理圖</p><p> 4.5 提示模塊程序設(shè)計</p><p> 本系統(tǒng)的提示模塊將實現(xiàn)的功能是:當(dāng)客戶按下選貨按鍵后,如果金額足夠,蜂鳴器不工作;如果金額不足,蜂鳴器將工作兩秒,以提示余額不足,之后再停止工作。提示模塊程序原理如圖4.4。提示模塊程序詳見附錄。</p><p> 圖4.4 提示模塊原理圖<
57、;/p><p><b> 5 結(jié) 論</b></p><p> 本次的畢業(yè)設(shè)計是一次真正的理論與實際相結(jié)合,通過這次基于單片機的自動售貨機系統(tǒng)的設(shè)計,不僅更加深入的了解了單片機等方面的理論知識,而且通過實際的動手操作,也更加成功地將理論知識與實際設(shè)計相結(jié)合在一起,全方面地提升了所學(xué)專業(yè)基礎(chǔ)知識的理解和解決實際問題的能力,同時也提高我查閱文獻資料、設(shè)計規(guī)范以及電腦制
58、圖等其他專業(yè)能力水平,而且通過對整體的掌控,對局部的取舍,以及對細(xì)節(jié)的斟酌處理,都使我的能力得到了鍛煉,經(jīng)驗得到了豐富,雖然畢業(yè)設(shè)計內(nèi)容多,我的收獲卻更加豐富。通過幾個月的不斷努力,我擺脫了單純的理論知識學(xué)習(xí)狀態(tài),理論知識和實際設(shè)計的結(jié)合鍛煉了我的綜合運用所學(xué)專業(yè)基礎(chǔ)知識的能力,使我在單片機的基本原理、單片機應(yīng)用系統(tǒng)開發(fā)過程,以及在常用編程設(shè)計思路技巧(特別是C語言)的掌握方面都能向前邁了一大步,為日后成為合格的應(yīng)用型人才打下良好的基礎(chǔ)
59、。</p><p><b> 致 謝</b></p><p> 在畢業(yè)設(shè)計期間,每次的工作方案的確定、資料的收集還是論文的撰寫,我都打到了指導(dǎo)老師*老師的全力幫助和耐心指導(dǎo)。薛老師學(xué)識淵博、治學(xué)嚴(yán)謹(jǐn)而且還為人謙和、易于親近,是我們學(xué)習(xí)和生活的榜樣,在此我特向*老師表示最崇高的敬意和由衷的感謝。其次,我要感謝每個曾經(jīng)教導(dǎo)過我的所有老師們,他們廣博精湛的學(xué)識,嚴(yán)謹(jǐn)
60、的治學(xué)態(tài)度使我學(xué)到的不僅是知識,還有對知識孜孜不倦的追求精神及做人的品質(zhì)。同時,我也要感謝其他同學(xué)的幫助,從他們身上我學(xué)到了很多理論知識,自己的實踐能力也得到了很大的提高。</p><p> 在未來的學(xué)習(xí)和工作中,我會繼續(xù)努力,不斷地實現(xiàn)自己的人生價值,以更好的成績來回報母校,回報社會。</p><p><b> 參考文獻</b></p><p
61、> [1]張毅剛等.新編MCS-51單片機應(yīng)用設(shè)計.哈爾濱工業(yè)大學(xué)出版社,2008</p><p> [2]張志良.單片機原理與控制技術(shù).機械工業(yè)出版社,2011</p><p> [3]陳濤等.貨幣識別器的原理與設(shè)計.貴州大學(xué)電氣工程學(xué)院,2006年(第35卷)第6期</p><p> [4]王瓊.單片機原理及應(yīng)用.合肥工業(yè)大學(xué)出版社,2008<
62、;/p><p> [5]彭保基.Keil C51入門教程.西安交通大學(xué),2005</p><p> [6]朱清慧,王志奎等.Protues教程.清華大學(xué)出版社,2011</p><p> [7]陳慧.基于嵌入式單片機的智能自動售貨機控制系統(tǒng).華東交通大學(xué)學(xué)報,2008,第25卷第6期:78-82</p><p> [8]丁昊.自動售貨機控
63、制系統(tǒng)的設(shè)計與實現(xiàn).東南大學(xué)碩士學(xué)位論文,2008</p><p> [9]蔡美琴,張為民等.MCS-51系列單片機系統(tǒng)及其應(yīng)用.北京.高等教育出版社,2004:1-156,234-268</p><p> [10]張建龍.一種新型自動售貨機控制系統(tǒng)研發(fā).浙江工業(yè)大學(xué)碩士學(xué)位論文,2009</p><p> [11]宋瀟,李佩佩等.自動售貨機控制器設(shè)計.科技信
64、息,2009,第3期:119-120</p><p> [12]余世明,晁岳磊等.自動售貨機研究現(xiàn)狀及展望.中國工程科學(xué),2008,第10卷第7期:51-55</p><p> [13]侯連宏.自動售貨機主控系統(tǒng)的研制.東南大學(xué)碩士學(xué)位論文,2009</p><p> [14]李明.C語言程序設(shè)計教程.上海交通大學(xué),2008</p><p&
65、gt; [15]廣州捷勝吉電子科技.字符液晶模塊使用手冊.</p><p> [16]廣州致遠電子有限公司.ZY1730使用指南.</p><p> [17]洪強寧,齊國生等.基于MDB/ICP協(xié)議的自動售賣系統(tǒng)的主控實現(xiàn). 計算機應(yīng)用.2002,第9期:28-30</p><p> 附 錄1 主函數(shù)程序</p><p> #i
66、nclude <reg52.h></p><p> #include <intrins.h></p><p> # include <absacc.h></p><p> sbit IN0=P3^2;</p><p> #define uchar unsigned char //
67、宏定義</p><p> #define uint unsigned int</p><p> sbit TuiBi=P3^1; </p><p> uchar m=0;</p><p><b> uchar a;</b></p><p> /**************
68、******************按鍵拐角定義*********************************/ </p><p> sbit Row1=P1^0; </p><p> sbit Row2=P1^1; </p><p> sbit Row3=P1^2; </p><p> sbit Line1=P1^3; <
69、/p><p> sbit Line2=P1^4; </p><p> sbit Line3=P1^5; </p><p> uchar code chuhuo[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};</p><p> /******************************
70、**延時程序*************************************/ </p><p> void delay(uint count)</p><p><b> { </b></p><p><b> uint i ;</b></p><p> while (--cou
71、nt!=0)</p><p> for(i=0;i<125;i++);</p><p><b> }</b></p><p> /********************************主程序初始化*********************************/ </p><p> void m
72、ain( ) </p><p><b> { </b></p><p><b> LCD();</b></p><p><b> a=Data;</b></p><p> EA=1; EX0=1; IT0=1; //開中斷
73、</p><p><b> while(1)</b></p><p><b> { </b></p><p> Row1=0;Row2=0;Row3=0;</p><p> Line1=1;Line2=1;Line3=1;</p><p><b> T
74、uiBi=1;</b></p><p> P2=chuhuo[m]; </p><p> delay (500) ;</p><p><b> }</b></p><p><b> }</b></p><p> void into_ISR(void)
75、interrupt 0</p><p><b> {</b></p><p> if (IN0==0)</p><p><b> { </b></p><p> delay (10); //延時消抖</p><p> if (IN0==0)</p&g
76、t;<p><b> { </b></p><p> Row1=0;Row2=1;Row3=1; </p><p> if(Line1==0) //按鍵K1被按下</p><p><b> { </b></p><p><b> if (a&
77、gt;=1)</b></p><p><b> { </b></p><p> m=1; a=a-1; Data=a;</p><p><b> LCD();</b></p><p><b> }</b></p><p> els
78、e Tishi();</p><p><b> return;</b></p><p><b> }</b></p><p> else if (Line2==0) //按鍵K2被按下</p><p><b> {</b></p><
79、;p><b> If (a>=1)</b></p><p><b> {</b></p><p> m=2; a=a-1; Data=a;</p><p><b> LCD();</b></p><p><b> }</b><
80、/p><p> else Tishi();</p><p><b> return;</b></p><p><b> }</b></p><p> else if(Line3==0) //按鍵K3被按下</p><p><b> {<
81、/b></p><p><b> If (a>=1)</b></p><p><b> {</b></p><p> m=3; a=a-1; Data=a;</p><p><b> LCD();</b></p><p><b
82、> }</b></p><p> else Tishi();</p><p><b> return;</b></p><p><b> }</b></p><p> Row1=1;Row2=0;Row3=1; </p><p> i
83、f(Line1==0) //按鍵K4被按下</p><p><b> { </b></p><p><b> if (a>=2)</b></p><p><b> { </b></p><p> m=4; a=a-2; Data=a;</p&
84、gt;<p><b> LCD();</b></p><p><b> }</b></p><p> else Tishi();</p><p><b> return;</b></p><p><b> }</b></p
85、><p> else if (Line2==0) //按鍵K5被按下</p><p><b> {</b></p><p><b> If (a>=2)</b></p><p><b> {</b></p><p> m=5;
86、 a=a-2; Data=a;</p><p><b> LCD();</b></p><p><b> }</b></p><p> else Tishi();</p><p><b> return;</b></p><p><b&
87、gt; }</b></p><p> else if(Line3==0) //按鍵K6被按下</p><p><b> {</b></p><p><b> If (a>=2)</b></p><p><b> {</b></p&
88、gt;<p> m=6; a=a-2; Data=a;</p><p><b> LCD();</b></p><p><b> }</b></p><p> else Tishi();</p><p><b> return;</b></p
89、><p><b> }</b></p><p> Row1=1;Row2=1;Row3=0; </p><p> if(Line1==0) //按鍵K7被按下</p><p><b> { </b></p><p><b> if (a&
90、gt;=3)</b></p><p><b> { </b></p><p> m=7; a=a-3; Data=a;</p><p><b> LCD();</b></p><p><b> }</b></p><p> els
91、e Tishi();</p><p><b> return;</b></p><p><b> }</b></p><p> else if (Line2==0) //按鍵K8被按下</p><p><b> {</b></p><
92、;p><b> If (a>=3)</b></p><p><b> {</b></p><p> m=8; a=a-3; Data=a;</p><p><b> LCD( );</b></p><p><b> }</b><
93、;/p><p> else Tishi( );</p><p><b> return;</b></p><p><b> }</b></p><p> else if(Line3==0) //按鍵TuiBi被按下</p><p><b>
94、{ </b></p><p> TuiBi=0; // 啟動退幣系統(tǒng)</p><p> String_s1="We appreciate your";</p><p> String_s2= "business,bye!";</p><p><b> LCD();<
95、;/b></p><p><b> return; </b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }&
96、lt;/b></p><p> 附 錄2 TC1602AL顯示程序</p><p> #include <reg52.h></p><p> # include <absacc.h></p><p> #include <intrins.h> </p><p>
97、 sbit LCD_EP=P3^6;</p><p> sbit LCD_RW=P3^5;</p><p> sbit LCD_RS=P3^4;</p><p> #define uchar unsigned char ; // 宏定義</p><p> #define uint unsigned int </p>
98、;<p> #define LCD_Out P0</p><p> #define LCD_In P0</p><p> code uchar LCD_addr[18]={ //共18行顯示的首地址</p><p> 0x85,0xc5,0x86,0xc1,</p><p> 0x82,0xc3,0x83,0xc
99、3,</p><p> 0x83,0xc0,0x81,0xc0,</p><p> 0x82,0xc6,0x84,0xc6, 0x81,0xc3};</p><p> code uchar LCD_InitialCode[]={0x30,0x30,0x30,0x38,0x01,0x06,0x0c}; //初始化代碼</p><p>
100、 uchar *string_s1,*string_s2;</p><p> uchar i,j;</p><p> /******************************************************************************</p><p> 函數(shù): void LCD_DataWrite(unsigned c
101、har Data)</p><p> 描述: 寫一個字節(jié)的顯示數(shù)據(jù)至LCD中的顯示緩沖RAM當(dāng)中</p><p> 參數(shù): Data 寫入的數(shù)據(jù)</p><p> ******************************************************************************/</p><p>
102、; void LCD_DataWrite(unsigned char Data)</p><p> { unsigned int Read_Dat=0;</p><p> LCD_EP = 0; //EP、RS端口為低,RW為高</p><p> LCD_RS = 0;</p><p> LCD_RW = 1;&
103、lt;/p><p> do{ //RS=0,RW=1時,在E高電平作用下,BF輸出到總線DB7上</p><p> LCD_In = 0xff; </p><p> LCD_EP = 1; </p><p> Read_Dat = LCD_In&0x80;</p>
104、<p> LCD_EP = 0;</p><p> }while(Read_Dat!=0); //讀狀態(tài)字(BF位)并判斷是否可進行讀寫操作</p><p> LCD_RW = 0; </p><p> LCD_RS = 1; </p><p> LCD_
105、Out = Data;</p><p> LCD_EP = 1; </p><p> LCD_EP = 0; </p><p><b> }</b></p><p> /********************************************
106、**********************************</p><p> 函數(shù): void LCD_RegWrite(uchar Command)</p><p> 描述: 寫一個字節(jié)的數(shù)據(jù)至LCD中的控制寄存器當(dāng)中</p><p> 參數(shù): Command 寫入的數(shù)據(jù)(byte)</p><p> **********
107、********************************************************************/</p><p> void LCD_RegWrite(uchar Command)</p><p> { uint Read_Dat=0;</p><p> LCD_EP = 0; //EP、RS置
108、低,RW置高,表為讀狀態(tài)字</p><p> LCD_RS = 0;</p><p> LCD_RW = 1;</p><p> do{ LCD_In = 0xff;</p><p> LCD_EP = 1;</p><p> Read_Dat = LCD_In&0x80;</p>&
109、lt;p> LCD_EP = 0;</p><p> }while(Read_Dat!=0); //讀狀態(tài)字并判斷是否可進行讀寫操作</p><p> LCD_RW = 0; //RW to Low,表為寫指令</p><p> LCD_Out = Command;</p><p> LCD_EP
110、= 1; //EP to Hight</p><p> LCD_EP = 0;</p><p><b> }</b></p><p> /******************************************************************************</p>&
111、lt;p> 函數(shù): unsigned char LCD_StatusRead(void)</p><p> 描述: 從LCD中的顯示緩沖RAM當(dāng)中讀一個字節(jié)的顯示數(shù)據(jù)</p><p> 返回: 讀出的數(shù)據(jù),低八位有效(byte)</p><p> *****************************************************
112、*************************/</p><p> unsigned char LCD_StatusRead(void)</p><p> { unsigned char Read_Dat=0;</p><p> LCD_EP = 0; //EP、RS置低,RW置高,表為讀狀態(tài)字</p><p> LCD_R
113、S = 0;</p><p> LCD_RW = 1;</p><p> LCD_In = 0xff;</p><p> LCD_EP = 1;</p><p> Read_Dat = LCD_In; //讀狀態(tài)字</p><p> LCD_EP = 0;</p><p> retu
114、rn Read_Dat;</p><p><b> }</b></p><p> /******************************************************************************</p><p> 函數(shù): void LCD_Init(void)</p><p
115、> 描述: LCD初始化程序,在里面會完成LCD初始所需要設(shè)置的許多寄存器</p><p> ******************************************************************************/</p><p> void LCD_Init(void)</p><p> { uchar
116、uiTemp=0,i;</p><p> uchar *Point;</p><p> Point = (uchar *)LCD_InitialCode; //獲取初始化序列數(shù)據(jù)的首地址</p><p> LCD_EP = 0;</p><p> LCD_RS = 0;</p><p> LCD_RW =
117、 0;</p><p> for(i=0;i<4;i++)</p><p> { uiTemp = *Point++;</p><p> LCD_Out = uiTemp;</p><p> LCD_EP = 1; //EP to Hight</p><p> LCD_EP = 0; //
118、EP to Hight</p><p> delay(5); //延時5ms,一般要求4.5ms以上就可以,沒有那么嚴(yán)格的了</p><p><b> }</b></p><p> LCD_RegWrite(*Point++);</p><p> LCD_RegWrite(*Point++);</p
119、><p> LCD_RegWrite(*Point++);</p><p><b> }</b></p><p> /******************************************************************************</p><p> 函數(shù): void LCD
120、()</p><p> 描述: LCD初始化程序,在里面會完成LCD初始所需要設(shè)置的許多寄存器</p><p><b> 參數(shù): 4個</b></p><p> ******************************************************************************/</p>
121、<p> void LCD()</p><p> { uchar uiTemp=0;</p><p> LCD_Init();</p><p> uiTemp = LCD_StatusRead(); //無意義,只是測試讀狀態(tài)字的子程序 </p><p> LCD_RegWrite(LCD_addr[i
122、]); //設(shè)置地址為第一行第一個字符的位置</p><p> while((*String_s1)!=0) //顯示字符串</p><p> { LCD_DataWrite(*String_s1);</p><p> String_s1++;</p><p><b> }</b></p
123、><p> LCD_RegWrite(LCD_addr[j]); </p><p> while((*String_s2)!=0) //顯示字符串</p><p> { LCD_DataWrite(*String_s2);</p><p> String_s2++;</p><p><b>
124、 } </b></p><p><b> }</b></p><p> 附 錄3 提示程序</p><p> #include <reg52.h></p><p> #define uchar unsigned char</p><p> #define
125、uint unsigned int</p><p> void Tishi( )</p><p> { sbit d=P3^3;</p><p> sbit c=P3^7; </p><p><b> sbit f;</b></p><p> void baojing( )</
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文-基于單片機的自動售貨機系統(tǒng)設(shè)計
- 畢業(yè)論文--基于單片機的自動售貨機的系統(tǒng)設(shè)計
- 基于單片機的自動售貨機畢業(yè)論文精品
- 畢業(yè)論文-基于單片機的自動售貨機系統(tǒng)設(shè)計.doc
- 原稿??!基于單片機的自動售貨機系統(tǒng)設(shè)計【任務(wù)書+畢業(yè)論文+單片機程序】
- 基于單片機的自動售貨機的系統(tǒng)設(shè)計
- 51單片機畢業(yè)論文---基于單片機的進制換算
- 單片機自動打鈴系統(tǒng)設(shè)計畢業(yè)論文
- 單片機畢業(yè)論文--基于單片機的led顯示屏設(shè)計
- 關(guān)于單片機的畢業(yè)論文--基于單片機的時間溫度顯示系統(tǒng)
- 基于單片機的畢業(yè)論文-- 基于51單片機的搶答器設(shè)計
- 基于單片機的畢業(yè)論文-- 基于51單片機的搶答器設(shè)計
- 基于單片機的門控系統(tǒng)設(shè)計畢業(yè)論文
- 基于單片機設(shè)計的畢業(yè)論文--基于單片機的的智能晾衣系統(tǒng)設(shè)計
- 畢業(yè)論文--基于單片機的打鈴系統(tǒng)
- 單片機畢業(yè)論文
- 單片機畢業(yè)論文
- 單片機畢業(yè)論文
- 單片機畢業(yè)論文
- 畢業(yè)論文--基于單片機的打鈴系統(tǒng)
評論
0/150
提交評論