基于單片機(jī)的公交車智能投幣機(jī)設(shè)計(jì)0_第1頁
基于單片機(jī)的公交車智能投幣機(jī)設(shè)計(jì)0_第2頁
基于單片機(jī)的公交車智能投幣機(jī)設(shè)計(jì)0_第3頁
基于單片機(jī)的公交車智能投幣機(jī)設(shè)計(jì)0_第4頁
基于單片機(jī)的公交車智能投幣機(jī)設(shè)計(jì)0_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于單片機(jī)的公交車智能投幣機(jī)設(shè)計(jì)摘要針對當(dāng)前公交車投幣系統(tǒng)存在的假幣難以區(qū)分、幣值難以累計(jì)等問題,本文研究設(shè)計(jì)了一種基于單片機(jī)控制的公交車投幣檢測系統(tǒng)。本設(shè)計(jì)通過硬幣接收器對硬幣真?zhèn)芜M(jìn)行快速無損鑒別,并介紹了相關(guān)電路設(shè)計(jì)原理。設(shè)計(jì)采用了AT89C51單片機(jī),通過硬幣接收器對硬幣真假進(jìn)行識別,從而輸出識別信號給單片機(jī),觸發(fā)相關(guān)接口,實(shí)現(xiàn)語音報(bào)警、紙幣電動機(jī)、LCD顯示器和金額累計(jì)功能;根據(jù)所需功能設(shè)計(jì)出相應(yīng)的軟件系統(tǒng)。使得系統(tǒng)能對硬幣進(jìn)行非接觸無損檢測,實(shí)時剔除假幣。使得此系統(tǒng)可廣泛應(yīng)用于公交等投幣場合,解決了假幣帶來的一系列問題。關(guān)鍵詞:單片機(jī);LCD;投幣檢測目錄TOC\o"1-3"\h\u2298摘要 129963關(guān)鍵詞:單片機(jī);LCD;投幣檢測 117913第一章緒論 397301.1公交車投幣檢測系統(tǒng)的研究意義 358511.2國內(nèi)外開展概況與開展趨勢 3136011.2.1機(jī)械式投幣器 480641.2.2智能式投幣器 499111.2.3開展趨勢 5281061.3本設(shè)計(jì)研制的目標(biāo) 625181第二章系統(tǒng)總體設(shè)計(jì)方案與硬件介紹 7182932.1系統(tǒng)的總體方案設(shè)計(jì)介紹 7120722.2系統(tǒng)的硬件設(shè)計(jì) 8217042.2.1單片機(jī)控制模塊設(shè)計(jì) 8104122.2.2鍵盤模塊設(shè)計(jì) 1235612.2.3LCD顯示模塊設(shè)計(jì) 14281312.2.4報(bào)警模塊設(shè)計(jì) 1518319第三章系統(tǒng)軟件設(shè)計(jì) 1650423.1主程序 1646153.2LCD顯示程序 19256593.3報(bào)警程序 22260363.4卷紙電動機(jī)啟動程序 2366553.5軟件KeiluVision2編寫程序 24123323.5.1編寫程序 25319753.5.2創(chuàng)立HEX文件 26121943.5.3字模提取 2614498第四章總結(jié)與展望 2813886參考文獻(xiàn) 2916132致謝 30第一章緒論1.1公交車投幣檢測系統(tǒng)的研究意義隨著社會的進(jìn)步和開展,硬幣流通自動化已是時代所趨。硬幣鑒別裝置[1]的出現(xiàn)無疑是符合社會需要的,能給消費(fèi)者帶來了極大的方便。如方便快捷的地鐵站投幣自動售檢票設(shè)施、提供冷熱飲和食品的自動售貨機(jī)、報(bào)刊自動售出機(jī)、簡捷方便的投幣機(jī)等,即便走在街頭,隨時可投幣購置需要的飲料和食品,而不需步入商店,為人們節(jié)省珍貴的時間,又給社會增添了一些現(xiàn)代化的氣氛。目前國內(nèi)在投幣應(yīng)用的行業(yè)中,硬幣鑒別裝置的應(yīng)用并不令人滿意。除了在管理上存在缺乏外,在技術(shù)實(shí)現(xiàn)上也有相當(dāng)難度,其核心問題是能否實(shí)時并且準(zhǔn)確地實(shí)現(xiàn)自動檢測辨識真假硬幣。這個問題也同樣存在于自動售貨機(jī)、投幣式[2]、無人售票公交車中。在近幾年的新聞中,頻頻報(bào)道無人售票公交車遭受假幣困擾,在公交車上裝上硬幣鑒別裝置已經(jīng)是形勢所趨。隨著第五版人民幣的發(fā)行,輔幣硬幣化已經(jīng)成為一種趨勢,硬幣的投放量還將大幅度增加。硬幣流通自動化成為迫切的社會需求,市場需要一種成熟可靠的硬幣鑒別裝置。目前市面上使用的硬幣鑒別裝置主要是國外一些大公司的產(chǎn)品,價(jià)格十分昂貴,而國產(chǎn)的硬幣鑒別裝置鑒別假幣的功能相比照擬薄弱。一種能夠?qū)τ矌胚M(jìn)行快速準(zhǔn)確的鑒偽,操作簡便的硬幣鑒別裝置,有著廣闊的應(yīng)用前景。社會經(jīng)濟(jì)的快速開展及城市交通的不斷改善,無人售票公交車得到了廣泛的普及。但現(xiàn)行的無人投幣系統(tǒng)存在著難以區(qū)分真假幣,難以對投入的尺寸大小相近的幣值自動進(jìn)行識別和累計(jì)等功能,因此導(dǎo)致了一些不文明現(xiàn)象的發(fā)生,從而給公交公司造成了巨額經(jīng)濟(jì)損失。針對該問題,本設(shè)計(jì)研制了基于單片機(jī)的公交車智能投幣監(jiān)測系統(tǒng)。1.2國內(nèi)外開展概況與開展趨勢隨著社會的開展,無人售票的公交車成為了主流,因而各種類型的公交車投幣檢測系統(tǒng)也應(yīng)運(yùn)而生。就其現(xiàn)狀來說,并不令人滿意。除了管理上的缺乏外,在技術(shù)上實(shí)現(xiàn)也有相當(dāng)?shù)睦щy,其中關(guān)鍵環(huán)節(jié)就是如何進(jìn)行票費(fèi)自動收取,如何檢測區(qū)分真假硬幣是核心問題。1.2.1機(jī)械式投幣器在我國,目前市場上使用的硬幣投幣器大多數(shù)是機(jī)械式的,這種投幣器存在很多缺陷,需要通過駕駛員的目測來觀察投幣情況,使得造成了公交車出現(xiàn)了大量收到假幣,造成了嚴(yán)重的經(jīng)濟(jì)損失。機(jī)械式投幣器如圖1.1所示。圖1.1機(jī)械式投幣器上圖機(jī)械式投幣器型號為:RD-101;該投幣器適合各國硬幣〔1-8枚〕,適應(yīng)各種面值,機(jī)械式設(shè)計(jì),使用方便,鞏固耐用。1.2.2智能式投幣器隨著社會的需要,我國近幾年也開發(fā)了具有學(xué)習(xí)功能的微電腦識別器,可以完全取代市場上的機(jī)械式投幣器。智能投幣檢測裝備[3]的出現(xiàn),具有通用性,開放性。而且種類繁多,功能也越來越完善,要將電路板安裝于各個場合即能實(shí)現(xiàn)不同的需要。目前大局部都是基于單片機(jī)的智能投幣檢測系統(tǒng),也有基于信息紐扣的公交車智能投幣系統(tǒng),都能夠?qū)τ矌诺恼婕龠M(jìn)行檢測,金額顯示和報(bào)警。圖1.2所示一種智能式投幣器。但是目前市場上應(yīng)用于公交車的投幣檢測系統(tǒng)主要是國外一些大公司的產(chǎn)品,價(jià)格十分昂貴,而國產(chǎn)的硬幣鑒別裝置鑒別假幣的功能相比照擬薄弱。圖1.2智能式投幣器圖1.2所示智能式投幣器有如下特點(diǎn):1、根據(jù)硬幣的材質(zhì)、直徑來識別真假幣,準(zhǔn)確度高;2、學(xué)習(xí)型;3、最多可設(shè)定3種不同規(guī)格的硬幣〔即可同時識別3種不同的硬幣〕??稍O(shè)定一個硬幣輸出1-99個脈沖信號,或幾個〔1-9個〕硬幣輸出一個脈沖信號;4、三段脈沖速度信號輸出,NO與NC.輸出開關(guān)調(diào)整,適用范圍廣??筛鶕?jù)需要修改信號輸出方式:脈沖(或BYTE值)或RS232信號輸出;5、可增加累計(jì)信號輸出及時間控制功能;可增加禁止收受硬幣功能;6、防釣魚效果好。7、適用于各種自助販賣機(jī)、游戲機(jī)、卡拉OK電唱機(jī)、投幣、網(wǎng)吧管理等一切無人接收硬幣系統(tǒng);8、信號輸出方式:脈沖、BYTE值、RS232電腦串口協(xié)議、USB接口。1.2.3開展趨勢由于國內(nèi)公交車智能投幣器[4]生產(chǎn)技術(shù)提高和功能的不斷完善,公交車自動投幣檢測系統(tǒng)正在我國各城市普及。智能投幣器的應(yīng)用,大幅度的減少假硬幣投入的發(fā)生;當(dāng)然,完全杜絕假硬幣還有一定的困難;對紙幣進(jìn)行有效的檢測也有很大的困難,這將是一個深入研究的切入點(diǎn)。但隨著技術(shù)的提高,硬幣真假的識別率也將會有更多的提高,紙幣檢測也將會被廣泛應(yīng)用,系統(tǒng)操作也會更方便,功能更加的完善。1.3本設(shè)計(jì)研制的目標(biāo)本課題主要對公交車投幣檢測系統(tǒng)的軟件進(jìn)行設(shè)計(jì),通過對軟件模塊的設(shè)計(jì)和編程,使得公交車投幣檢測系統(tǒng)具有以下功能:對硬幣的真假信號進(jìn)行檢測,并對假幣進(jìn)行報(bào)警可接收紙幣并自動卷入投入硬幣幣值自動累計(jì)并顯示可通過LCD顯示投幣總額可對金額清零由檢測、辨識的結(jié)果輸出相應(yīng)信號,控制外設(shè)進(jìn)行動作第二章系統(tǒng)總體設(shè)計(jì)方案與硬件介紹2.1系統(tǒng)的總體方案設(shè)計(jì)介紹本系統(tǒng)設(shè)計(jì)的目的是應(yīng)用單片機(jī)實(shí)現(xiàn)硬幣的真?zhèn)巫R別,從而進(jìn)行總幣值的累加、顯示和報(bào)警等操作。根據(jù)硬幣接收器及相應(yīng)的測量電路進(jìn)行識別,識別信號觸發(fā)單片機(jī)的相關(guān)接口,執(zhí)行相應(yīng)的功能。硬幣接收器鍵盤液晶顯示卷紙電動機(jī)蜂鳴器單片機(jī)硬幣接收器鍵盤液晶顯示卷紙電動機(jī)蜂鳴器單片機(jī)假硬幣信號紙幣投入信號圖2.1系統(tǒng)原理圖單片機(jī)控制模塊〔核心模塊〕由AT89C51單片機(jī)[7]和它的外圍芯片組成,用于接收紙幣和硬幣檢測模塊送來的電脈沖,對脈沖進(jìn)行計(jì)數(shù);對假幣信號進(jìn)行報(bào)警;根據(jù)鍵盤的輸入信號,對計(jì)算值進(jìn)行控制;接受故障信號報(bào)警;控制LCD顯示模塊,將CPU內(nèi)部的數(shù)據(jù)送到LCD上顯示,并顯示必要的提示信息;控制電機(jī)控制模塊。紙幣和硬幣檢測模塊通過硬幣接收器,對一元硬幣的真假進(jìn)行檢測,輸出識別信號給單片機(jī);當(dāng)紙幣進(jìn)行檢測并輸出給單片機(jī)。鍵盤控制模塊根據(jù)鍵盤輸入的控制信號,對計(jì)數(shù)進(jìn)行清零、復(fù)位、和總金額的觀察;液晶顯示模塊顯示接收硬幣和紙幣的幣值,假幣報(bào)警顯示,金額累計(jì)進(jìn)行顯示,日總金額收入觀察顯示。電機(jī)控制模塊有紙幣信號輸入,卷紙電動機(jī)啟動。報(bào)警模塊檢測到假幣信號和計(jì)數(shù)超出設(shè)置范圍時蜂鳴器報(bào)警。2.2系統(tǒng)的硬件設(shè)計(jì)2.2.1單片機(jī)控制模塊設(shè)計(jì)1.AT89C51功能特性概述AT89C51[8]具有以下標(biāo)準(zhǔn)功能:4K字節(jié)的Flash閃速存儲器,256字節(jié)內(nèi)部RAM,32位I/O口線,兩個數(shù)據(jù)指針,兩個16位定時/計(jì)算器,一個5向量兩級中斷結(jié)構(gòu),一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路。同時,AT89C51可降至0Hz靜態(tài)邏輯操作,支持兩種可選的節(jié)電工作模式。空閑模式下,CPU停止工作,允許RAM、定時器/計(jì)算器、串口及中斷系統(tǒng)繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振動器被停止工作,單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。主要性能參數(shù)與MCS-51單片機(jī)產(chǎn)品兼容4K字節(jié)可編程閃速存儲器壽命:1000寫/擦循環(huán)4.0-4.5v的工作電壓范圍全靜態(tài)工作:0Hz-24MHz三級程序存儲器鎖定128×8位內(nèi)部RAM32個可編程I/O口線兩個16位定時器/計(jì)數(shù)器5個中斷源全雙工UART通道低功耗空閑和掉電模式中斷可從空閑模式喚醒系統(tǒng)雙數(shù)據(jù)指針片內(nèi)振蕩器和時鐘電路圖2.2AT89C51的管腳圖圖2.2AT89C51的管腳圖AT89C51引腳功能說明P0:P0口(P0.0~P0.7)是一個8位漏極開路雙向輸入輸出端口,當(dāng)訪問外部數(shù)據(jù)時,它是地址總線〔低8位〕和數(shù)據(jù)總線復(fù)用。外部不擴(kuò)展而單片應(yīng)用時,那么作一般雙向I/O口用。P0口每一個引腳可以推動8個LSTTL負(fù)載。P1:P1口(P1.0~P1.7)口是具有內(nèi)部提升電路的雙向I/O端口(準(zhǔn)雙向并行I/O口),其輸出可以推動4個LSTTL負(fù)載。僅供用戶作為輸入輸出用的端口。P2:P2口(P2.0~P2.7)口是具有內(nèi)部提升電路的雙向I/O端口(準(zhǔn)雙向并行I/O口),當(dāng)訪問外部程序存儲器時,它是高8位地址。外部不擴(kuò)展而單片應(yīng)用時,那么作一般雙向I/O口用。每一個引腳可以推動4個LSTL負(fù)載。P3:P3口(P3.0~P3.7)口是具有內(nèi)部提升電路的雙向I/O端口(準(zhǔn)雙向并行I/O口),它還提供特殊功能,包括串行通信、外部中斷控制、計(jì)時計(jì)數(shù)控制及外部隨機(jī)存儲器內(nèi)容的讀取或?qū)懭肟刂频裙δ?。其特殊功能引腳分配如表2-1:表2-1特殊功能引腳對照表引腳號特殊功能P3.0RXD串行通信輸入P3.1TXD串行通信輸出P3.2INT0外部中斷0輸入,低電平有效P3.3INT1外部中斷1輸入,低電平有效P3.4T0計(jì)數(shù)器0外部事件計(jì)數(shù)輸入端P3.5T1計(jì)數(shù)器1外部事件計(jì)數(shù)輸入端P3.6WR外部隨機(jī)存儲器的寫選通,低電平有效P3.7RD外部隨機(jī)存儲器的讀選通,低電平有效VCC:AT89C51電源正極輸入,接+5V電壓。GND:電源接地端。ALE/PROG:ALE是英文“ADDRESSLATCHENABLE〞的縮寫,表示允許地址鎖存允許信號。當(dāng)訪問外部存儲器時,ALE信號負(fù)跳變來觸發(fā)外部的8位鎖存器(如74LS373),將端口P0的地址總線(A0-A7)鎖存進(jìn)入鎖存器中。在非訪問外部存儲器期間,ALE引腳的輸出頻率是系統(tǒng)工作頻率的1/16,因此可以用來驅(qū)動其他外圍芯片的時鐘輸入。當(dāng)問外部存儲器期間,將以1/12振蕩頻率輸出。EA/VPP:該引腳為低電平時,那么讀取外部的程序代碼(存于外部EPROM中)來執(zhí)行程序。因此在8031中,EA引腳必須接低電位,因?yàn)槠鋬?nèi)部無程序存儲器空間。如果是使用AT89C51或其它內(nèi)部有程序空間的單片機(jī)時,此引腳接成高電平使程序運(yùn)行時訪問內(nèi)部程序存儲器,當(dāng)程序指針PC值超過片內(nèi)程序存儲器地址(如8051/8751/89C51的PC超過0FFFH)時,將自動轉(zhuǎn)向外部程序存儲器繼續(xù)運(yùn)行。此外,在將程序代碼燒錄至8751內(nèi)部EPROM、89C51內(nèi)部FALSH時,可以利用此引腳來輸入提供編程電壓〔8751為2lV、AT89C51為12V、8051是由生產(chǎn)廠方一次性加工好)。PSEN:此為“ProgramStoreEnable〞的縮寫。訪問外部程序存儲器選通信號,低電平有效。在訪問外部程序存儲器讀取指令碼時,每個機(jī)器周期產(chǎn)生二次PSEN信號。在執(zhí)行片內(nèi)程序存儲器指令時,不產(chǎn)生PSEN信號,在訪問外部數(shù)據(jù)時,亦不產(chǎn)生PSEN信號。XTAL1:接外部晶振的一個引腳。在單片機(jī)內(nèi)部,它是一反相放大器輸入端,這個放大器構(gòu)成了片內(nèi)振蕩器。它采用外部振蕩器時,些引腳應(yīng)接地。XTAL2:接外部晶振的一個引腳。在片內(nèi)接至振蕩器的反相放大器輸出端和內(nèi)部時鐘發(fā)生器輸入端。當(dāng)采用外部振蕩器時,那么此引腳接外部振蕩信號的輸入,晶振電路如圖2.3所示。圖2.3晶振電路RST:AT89C51的復(fù)位信號輸入引腳,高電位工作,當(dāng)要對芯片復(fù)位時,只要將此引腳電位提升到高電位,并持續(xù)兩個機(jī)器周期以上的時間,AT89C51便能完成系統(tǒng)復(fù)位的各項(xiàng)工作,使得內(nèi)部特殊功能存放器的內(nèi)容均被設(shè)成狀態(tài),復(fù)位電路如圖2.4。圖2.3晶振電路圖2.4復(fù)位電路程序狀態(tài)字PSW:程序狀態(tài)字是一個8位存放器,它包含程序狀態(tài)信息。此存放器各位的含義參見表2-2,其中的PSW.1是保存位,未用。其它各位說明如下:圖2.4復(fù)位電路表2-2程序狀態(tài)字位地址D7D6D5D4D3D2D1D0符號CYACF0RS1RS0OV-PCY〔PSW.7〕:高位進(jìn)位標(biāo)志位。常用“C〞表示。AC〔PSW.6〕:輔助進(jìn)位木標(biāo)志。F0〔PSW.5〕:用戶標(biāo)志位。RS1〔PSW.4〕:存放器組選擇位1。RS0〔PSW.3〕:存放器組選擇位0。OV〔PSW.2〕:溢出標(biāo)志位。-〔PSW.1〕:保存位,無定義。P〔PSW.0〕:奇偶校驗(yàn)位,在每一個指令周期中,假設(shè)累加器〔A〕中的“1〞的位個數(shù)是奇數(shù)個那么P=1,偶數(shù)個那么P=0。單片機(jī)控制電路系統(tǒng)的硬件設(shè)計(jì)原理圖如圖2.1所示。主控制芯片為AT89C51,該芯片具有4K閃存,5個中斷源,2個16位定時/計(jì)數(shù)器。晶振采用12MHz,其機(jī)器周期僅為1微秒,滿足檢測時間的精度要求。P1.2-P14分別為鍵盤控制按鍵,P1.0控制報(bào)警模塊,P1.5控制電機(jī)模塊,P0和控制顯示模塊。具體連接方法見圖2.5所示。2.2.2鍵盤模塊設(shè)計(jì)根據(jù)所需功能,鍵盤使用了6個鍵以實(shí)現(xiàn)不同的控制功能,鍵盤面板如圖2.6所示,各鍵的鍵號以及具體功能見表2-3所示。由于本系統(tǒng)所用的鍵盤數(shù)不多,所以就將鍵盤直接于單片機(jī)引腳相連。表2-3按鍵功能表鍵號功能說明鍵0啟動啟動單片機(jī),讓其處于工作狀態(tài)鍵1暫停讓單片機(jī)暫停工作,不執(zhí)行各種功能鍵2顯示復(fù)位顯示模塊復(fù)位鍵3系統(tǒng)復(fù)位單片機(jī)復(fù)位鍵4金額清零將顯示的金額數(shù)清零鍵5日總金額顯示投入的所有金額累計(jì)啟動暫停顯示復(fù)位系統(tǒng)復(fù)位金額清零日總金額啟動暫停顯示復(fù)位系統(tǒng)復(fù)位金額清零日總金額圖2.6鍵盤面板2.2.3LCD顯示模塊設(shè)計(jì)AMPIRELCD128*64是一種圖形點(diǎn)陣液晶顯示器。它主要采用動態(tài)驅(qū)動原理由行驅(qū)動器和列驅(qū)動器兩局部組成了128(列)×64(行)的全點(diǎn)陣液晶示,內(nèi)部有顯示數(shù)據(jù)鎖存器。與CPU接口采用5條位控制總線和8位并行數(shù)據(jù)總線輸入輸出,適配M6800系列時序可顯示8(行)×4(行)個(16×16點(diǎn)陣)漢字,也可完成圖形,字符的顯示。此顯示器采用了COB的軟封裝方式,工作電壓為+5V±10%,可自帶驅(qū)動LCD所需的負(fù)電壓。通過導(dǎo)電橡膠和壓框連接LCD,使其壽命長,連接可靠。引腳特性AMPIRELCD液晶顯示器有20個引腳,表2-4介紹各引腳功能:表2-4LCD引腳功能引腳號引腳名稱級別引腳功能描述1GND0V電源地2VCC+5V電源電壓3V00~-10VLCD驅(qū)動負(fù)電壓,要求VCC-V0=13V4RSH/L存放器選擇信號5R/WH/L讀/寫操作選擇信號6EH/L使能信號7DB0H/L八位三態(tài)并行數(shù)據(jù)總線8DB19DB210DB311DB412DB513DB614DB715CS1H/L16CS2H/L17/RESH/L復(fù)位信號,低電平有效18Vout-10V輸出-10V的負(fù)電壓(單電源供電)指令介紹AMPIRELCD液晶顯示器擁有一些操作指令,如顯示開關(guān)設(shè)置,顯示起始行設(shè)置,頁面地址設(shè)置,列地址設(shè)置,讀取狀態(tài)字和數(shù)據(jù)讀/寫等指令。表2-5將對這些指令功能進(jìn)行簡單的介紹。表2-5指令表指令名稱控制信號控制代碼RSR/W顯示開關(guān)設(shè)置00顯示起始行設(shè)置00頁面地址設(shè)置00列地址設(shè)置00讀取狀態(tài)字01寫顯示數(shù)據(jù)10數(shù)據(jù)讀顯示數(shù)據(jù)11數(shù)據(jù)2.2.4報(bào)警模塊設(shè)計(jì)聲音是空氣的振蕩,不同的振蕩頻率我們就可以聽到不同聲調(diào)的聲音。音的頻譜范圍約在幾十到幾千赫茲。圖2.7蜂鳴器電路蜂鳴器有很多種類,但大致分為兩類:有源式〔直流電就發(fā)聲,但頻率單一〕;無源式〔根據(jù)輸入方波頻率而發(fā)出不同的聲音〕。本設(shè)計(jì)選用的是無源式蜂鳴器,如圖2.7所示,可根據(jù)需要發(fā)出各種音調(diào)的聲音。圖2.7蜂鳴器電路單片機(jī)輸出方波的方法是控制口線“高〞、“低〞電平的持續(xù)時間,通過編制某一口線輸出方波頻率,通過軟件延時或者定時器延時的方式以不同頻率改變口線的上下電平狀態(tài)來實(shí)現(xiàn)變頻發(fā)聲。發(fā)出1000Hz的音調(diào),其周期為1/1000秒,即1微秒。這樣,當(dāng)P2.7的高電平或低電平的持續(xù)時間為0.5微秒時,就能發(fā)出1000Hz的音調(diào)。第三章系統(tǒng)軟件設(shè)計(jì)本系統(tǒng)應(yīng)用軟件功能實(shí)現(xiàn)功能如下:實(shí)現(xiàn)對于投幣總額的累加計(jì)算通過鍵盤控制系統(tǒng)的工作狀態(tài)當(dāng)硬幣接收器判定為真幣時,液晶顯示一元,并在顯示金額上加一當(dāng)硬幣接收器判定為假幣時,液晶顯示假幣,并蜂鳴器報(bào)警當(dāng)有紙幣信號時,卷紙電動機(jī)啟動,液晶顯示一元,顯示金額上加一當(dāng)按下“清零〞按鈕時,金額清零當(dāng)金額大于999時,自動清零并報(bào)警當(dāng)按下“日總金額時〞,可觀察日累計(jì)總金額,當(dāng)日總金額大于99999時,自動清零并報(bào)警按鍵“顯示復(fù)位〞,LCD顯示內(nèi)容復(fù)位根據(jù)系統(tǒng)設(shè)計(jì)要求,結(jié)合上述硬件設(shè)計(jì),軟件設(shè)計(jì)可以分為以下幾個局部:主程序,LCD顯示程序,報(bào)警程序,卷紙電動機(jī)啟動程序等幾個局部。本設(shè)計(jì)使用軟件KeiluVision2編寫程序,下面的程序設(shè)計(jì)均以軟件KeiluVision2所需方式為準(zhǔn)。3.1主程序主程序是一個死循環(huán)包括各鍵盤和現(xiàn)實(shí)功能。首先開始運(yùn)行的時候首先進(jìn)行程序的初始化,初始化的主要任務(wù)是完成下面程序所需的各種變量的定義和對鍵盤功能的定義。初始化完成后,程序檢測是否有硬幣或紙幣投入,有的話確定是紙幣還是硬幣,如果是硬幣那么檢測其是否是真幣,是真幣那么對金額進(jìn)行累加并調(diào)用顯示程序顯示出金額和幣值,如果是假幣那么調(diào)用報(bào)警程序,使報(bào)警模塊工作,并調(diào)用顯示程序在顯示器上顯示內(nèi)容;如果是紙幣,那么調(diào)用啟動卷紙電動機(jī)啟動程序并調(diào)用顯示程序。且在主程序中檢測按鍵信號,當(dāng)有按鍵信號時,那么執(zhí)行相應(yīng)按鍵的功能;在金額累加時,當(dāng)金額超過顯示范圍時,金額將會自動清零并調(diào)用報(bào)警和顯示程序。根據(jù)主程序所需實(shí)現(xiàn)的功能,繪制出程序流程圖,如圖3.1,然后編寫程序。是是否有否是是否是否無圖3.1工作程序流程圖金額c>999orn>99999??執(zhí)行按鍵程序讀入按鍵?金額清零并報(bào)警顯示器顯示1元;金額加1顯示器顯示假幣;并報(bào)警顯示器顯示1元;金額加1;紙幣電動機(jī)啟動是真幣?是硬幣?有硬幣、紙幣投入?初始化開始主程序的編寫步驟:定義頭文件,如#include<at89x51.H>;對單片機(jī)引腳進(jìn)行定義,定義方式如:sbitP16=P1^6;對程序所用變量進(jìn)行定義,如unsignedinti;可賦值;當(dāng)單片機(jī)接收到真幣信號時,根據(jù)所需功能程序設(shè)計(jì)如下:while〔1〕{if(P15==0)//真幣信號{xianshi2();調(diào)用顯示程序if(j==0){c++; n++;if(c>999)//當(dāng)c>999時,報(bào)警并清零{baojing();c=0;} if(n>99999)//當(dāng)n>99999時,報(bào)警并清零 { baojing(); n=0; }xianshi5(c);j=1;}}if(P15==1){xianshi3();j=0;}if(P16==0||P17==0||P12==0||P13==0||P14==0||P10==0||P11==0)break;}P15判斷是否有真幣信號,P15==0時有真幣信號,P15==1時無真幣信號;xianshi2(),xianshi3(),xianshi5(c),baojing()為調(diào)用子函數(shù),在下面將會表達(dá);變量c,n分別對金額累加計(jì)數(shù)和日總金額累加計(jì)數(shù);當(dāng)c>999時,金額將超出顯示范圍,那么調(diào)用報(bào)警程序baojing(),并將金額清零c=0;當(dāng)c>99999時,日總金額將超出顯示范圍,那么調(diào)用報(bào)警程序baojing(),并將金額清零n=0;if(P16==0||P17==0||P12==0||P13==0||P14==0||P10==0||P11==0)break;判斷程序是否跳出此循環(huán)。當(dāng)單片機(jī)接收到紙幣信號時,根據(jù)所需功能設(shè)計(jì)的程序與接收真幣信號程序相似,在這不再贅述。下面單片機(jī)接收到假硬幣信號時所運(yùn)行的程序:while(1)//假幣信號,報(bào)警{if(P16==0){xianshi4();if(k==0){baojing();k=1;}}if(P16==1){xianshi3();k=0;}if(P17==0||P11==0||P12==0||P13==0||P14==0||P10==0||P15==0)break;}當(dāng)有假硬幣信號時,P16==0,那么調(diào)用顯示程序xianshi4();報(bào)警程序baojing();其設(shè)計(jì)方式與上面相似。當(dāng)按下“金額清零〞時,執(zhí)行清零程序使得c=0,在主程序里調(diào)用金額顯示子程序xianshi5(c)。當(dāng)按下“日總金額〞時,在主程序里調(diào)用日總金額顯示子程序xianshi8(n)。當(dāng)按鍵“顯示復(fù)位〞給有信號時,那么使金額和日總金額都清零,即c=0,n=0。至此主程序編寫完成,可在軟件KeiluVision2中編寫出,然后進(jìn)行編譯和調(diào)試。3.2LCD顯示程序LCD顯示程序,首先要根據(jù)其指令設(shè)置其驅(qū)動程序,根據(jù)設(shè)計(jì)的需要對顯示器的開關(guān),顯示的起始行,頁面地址,列地址進(jìn)行,讀取狀態(tài)字和數(shù)據(jù)讀/寫等指令進(jìn)行設(shè)置。AT89C51單片機(jī)的P2.2和P2.3分別與R/W和RS相連,通過控制其上下電平來控制顯示器內(nèi)部的各種指令;P2.1與使能端E相連,E信號下降沿鎖存DB7-DB0,E為高電平時DDRAM數(shù)據(jù)讀到DB7-DB0;P2.5和P2.5分別控制顯示器的左右半屏幕的開啟;P0口與LCD液晶顯示器的八根數(shù)據(jù)總線DB0-DB7相連,對要顯示的內(nèi)容的數(shù)據(jù)進(jìn)行讀寫,從而顯示出所需的內(nèi)容。顯開始LCD初始化開左半屏清屏開右半屏開始LCD初始化開左半屏清屏開右半屏顯示右半屏內(nèi)容顯示左半屏內(nèi)容圖3.2顯示程序流程圖LCD顯示程序的編寫步驟:對頭文件,引腳和所需變量的定義與主程序類似;清屏程序lcd_clear(),LCD液晶顯示器由128*64點(diǎn)組成,根據(jù)LCD顯示驅(qū)動程序,將數(shù)據(jù)0x00寫入到LCD中即可完成清屏,程序如下:voidlcd_clear(void) //清屏{ unsignedcharct1,ct2; CS2=0; //選擇左半屏 while(lcd_busy()); for(ct1=0;ct1<8;ct1++) { lcd_wcode(0xb8+ct1); //writepageaddress lcd_wcode(0x40); //writelineaddress for(ct2=0;ct2<64;ct2++) lcd_wdate(0x00); //write0x00toLCD } CS1=0; //選擇右半屏 for(ct1=0;ct1<8;ct1++) { lcd_wcode(0xb8+ct1); //writepageaddress lcd_wcode(0x40); //writelineaddress for(ct2=0;ct2<64;ct2++) lcd_wdate(0x00); //write0x00toLCD }}LCD顯示漢字和數(shù)字顯示漢字或字符,首先要通過字模獲得所需漢字的顯示代碼,如“公〞字的漢字代碼:unsignedcharcodeuca_GONG[]={0x00,0x00,0x80,0x40,0x30,0x0E,0x84,0x00,0x00,0x0E,0x10,0x60,0xC0,0x80,0x80,0x00,0x00,0x01,0x20,0x70,0x28,0x24,0x23,0x31,0x10,0x10,0x14,0x78,0x30,0x01,0x00,0x00};通過LCD顯示驅(qū)動程序調(diào)用漢字代碼將漢字顯示在屏幕的一個位置上;數(shù)字的顯示方式類似。日總金額顯示程序由前面介紹可知,通過變量n來記錄日總金額數(shù),如總金額數(shù)的顯示程序如下:voidxianshi8(unsignedlongn)//顯示日總金額{unsignedintwan;unsignedintqian;unsignedintbai;unsignedintshi;unsignedintge;unsignedintt;dis_hz(6,0,uca_RI);dis_hz(6,16,uca_ZONG);dis_hz(6,32,uca_JIN);dis_hz(6,48,uca_E);dis_sz(6,64,uca_MAOHAO);dis_hz(6,112,uca_YUAN);wan=n/10000;t=n%10000;qian=t/1000;t=t%1000;bai=t/100;t=t%100;shi=t/10;ge=t%10;switch(wan){case0:dis_sz(6,72,uca_0);break;case1:dis_sz(6,72,uca_1);break;case2:dis_sz(6,72,uca_2);break;case3:dis_sz(6,72,uca_3);break;case4:dis_sz(6,72,uca_4);break;case5:dis_sz(6,72,uca_5);break;case6:dis_sz(6,72,uca_6);break;case7:dis_sz(6,72,uca_7);break;case8:dis_sz(6,72,uca_8);break;case9:dis_sz(6,72,uca_9);break;}日總金額最大能顯示99999,共5位數(shù),變量n記錄金額的多少,令n=12345來說明,要將其每一位的數(shù)值取出,方法是將n/10000可得到萬位數(shù)1,n%10000可得到其余數(shù)t=2345,再次將t/1000可得到千位數(shù)2,以此方法可得到百位,十位,個位數(shù);然后根據(jù)各位的數(shù)位通過switch()函數(shù)調(diào)用相應(yīng)的數(shù)字代碼在屏幕上顯示。金額顯示函數(shù)voidxianshi5(unsignedintc)的顯示程序與此類似。其余的顯示函數(shù)都較為簡單,直接取漢字代碼顯示。3.3報(bào)警程序當(dāng)有假幣或者計(jì)數(shù)超出范圍時,會啟動報(bào)警程序;AT89C51單片機(jī)P2.7引腳與報(bào)警模塊相連,蜂鳴器選用的是無源式蜂鳴器,可根據(jù)需要發(fā)出各種音調(diào)的聲音;因此當(dāng)P2.7輸出方波信號使得蜂鳴器發(fā)出報(bào)警聲音。通過軟件延時讓蜂鳴器發(fā)出不同音調(diào)的聲音,本設(shè)計(jì)單片機(jī)的時鐘頻率采用12MHz,所以一個機(jī)器周期為1微秒,編寫一個延時程序dely500()讓其能延時0.5微秒,所以當(dāng)P2.7的高電平或低電平的持續(xù)時間為0.5微秒時,就能發(fā)出1000Hz的音調(diào);當(dāng)P2.7的高電平或低電平的持續(xù)時間為1微秒時,就能發(fā)出500Hz的音調(diào).報(bào)警程序如下:#include<at89x51.H>sbitP27=P2^7;voiddely500(void)//延時{unsignedchari;for(i=500;i>0;i--){;}}voidbaojing(void)//報(bào)警程序{unsignedcharcount;for(count=200;count>0;count--){P27=~P27;dely500();}for(count=200;count>0;count--){P27=~P27;dely500();dely500();}}3.4卷紙電動機(jī)啟動程序當(dāng)有紙幣進(jìn)入時,卷紙電動機(jī)啟動程序?qū)?zhí)行操作。紙幣檢測傳感器將發(fā)出信號給AT89C51單片機(jī)引腳P1.7,經(jīng)過處理后,根據(jù)程序引腳P2.6將輸出信號,啟動卷紙電動機(jī)模塊。當(dāng)信號消失時,卷紙電動機(jī)停止動作。其工作流程圖如圖3.3所示。有無有無開始判斷是否有紙幣信號?卷紙電動機(jī)啟動結(jié)束圖3.3卷紙電動機(jī)啟動程序#include<at89x51.H>sbitP26=P2^6;sbitP17=P1^7;voidjidianqi(void)//紙幣電動機(jī)運(yùn)行程序{if(P17==0)P26=0;if(P17==1)P26=1;}3.5軟件KeiluVision2編寫程序本設(shè)計(jì)采用軟件KeiluVision2編寫程序,該軟件是一個集成開發(fā)環(huán)境,它把工程管理,源代碼編輯程序,調(diào)試等集成到一個功能強(qiáng)大的環(huán)境中??梢杂盟鼈儊砭幾gC源碼,匯編你的匯編源程序,連接和重定位你的目標(biāo)文件和庫文件,創(chuàng)立HEX文件,調(diào)試你的目標(biāo)程序,并能夠通過創(chuàng)立的HEX文件用于仿真,因此該軟件很適合用于本設(shè)計(jì)。3.5.1編寫程序根據(jù)各個程序模塊,編寫所需的程序,下面介紹一下用軟件KeiluVision2編寫過程。圖3.4工程創(chuàng)立運(yùn)行軟件KeiluVision2,進(jìn)入操作界面,新建工程,單擊“Project〞出現(xiàn)下拉菜單,單擊“NewProject〞彈出創(chuàng)立工程窗口,輸入新建工程名稱,然后保存,彈出窗口圖3.4,選擇CPU的類型為AT89C51,該工程建立成功。圖3.4工程創(chuàng)立圖3.5編寫主程序在新的工程里,單擊,出現(xiàn)文本“Text1〞,在文本中編寫主程序如圖3.5,編寫完成后,單擊保存,在文件名中輸入“main.c〞,保存該程序。圖3.5編寫主程序?qū)⒈4娴某绦蛱砑拥浇M文件中,在files中右擊“SourceGroup1〞,選擇“AddFilestoGroup’SourceGroup1’〞,在添加組文件的對話框中選擇“main.c〞文件,單擊“Add〞添加,然后關(guān)閉對話框。同樣的方法編寫報(bào)警程序,LCD顯示程序和卷紙電動機(jī)啟動程序并添加到組文件中。完成所有程序后,將對其編譯和連接,查看有沒有錯誤存在。單擊,對所有的程序進(jìn)行編譯和連接,結(jié)果在“Build〞里。3.5.2創(chuàng)立HEX文件當(dāng)編譯和連接,檢查沒有錯誤后,創(chuàng)立HEX文件,在“Project〞的下拉菜單中選擇“OptionsforTarget’Target1’〞,彈出窗口圖3.8,在“Output〞選項(xiàng)卡中進(jìn)行設(shè)置。在復(fù)選框中選中“CreateHEXFi〞,沒有錯誤的情況下,單擊后就可創(chuàng)立出HEX文件,可在“Build〞里查看到結(jié)果,如圖3.9;單擊可以改變HEX的創(chuàng)立路徑,在“NameofExecutable〞可圖3.8HEX文件設(shè)置以改變HEX的文件名。圖3.8HEX文件設(shè)置3.5.3字模提取在編程過程中

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論