《超市自動存儲柜系統(tǒng)設計(論文)10000字》_第1頁
《超市自動存儲柜系統(tǒng)設計(論文)10000字》_第2頁
《超市自動存儲柜系統(tǒng)設計(論文)10000字》_第3頁
《超市自動存儲柜系統(tǒng)設計(論文)10000字》_第4頁
《超市自動存儲柜系統(tǒng)設計(論文)10000字》_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

超市自動存儲柜的設計[摘要]本文介紹了超市自動存儲柜的自動存儲控制以及語音報警提示和數(shù)字顯示等功能。經(jīng)過本課題的研究,我們提供了一種超市自動存儲柜的方便實用的解決方案,具有保密性好、編碼量多、隨機打開儲物柜成功率幾乎為零。本文采用了一種ARM微控制器(LM3S811主控芯片)與12864LCD顯示模塊構成,通過串行方式連接的顯示系統(tǒng),利用C語言編程,通過軟件控制,具體分析了設計調試時的問題解決辦法,使得系統(tǒng)得以實現(xiàn)。對于外部按鍵電路得到的數(shù)據(jù),通過主控芯片進行讀取、處理、傳送,使得數(shù)據(jù)得以顯示。實驗表明,此設計的接口、結構等設計合理,功能基本可以實現(xiàn),本設計可供以后的鍵盤掃描類、顯示類、語言提示類等設計參考使用。[關鍵詞]LM3S811微處理器;TH12864液晶顯示;4*4鍵盤;儲物柜1引言1.1超市自動存儲柜電子系統(tǒng)的設計研究的背景及意義自動儲物柜在現(xiàn)實生活中應用廣泛,為超市,圖書館,展覽館,酒樓,車站,碼頭,以及娛樂場所提供短期寄存服務,也可以作為工廠、機關、醫(yī)院、及特種行業(yè)員工的更衣柜,這些足以證明儲物柜在現(xiàn)代社會中具有重大的工程意義。超市自動儲物柜作為儲物柜的其中一種,它克服了傳統(tǒng)的人工寄存所帶來的費人力[1],速度慢,易冒領,不安全等諸多弊端。因此為了能夠更好的實現(xiàn)超市自動存儲柜的各種功能,具有重要的研究價值。超市自動存儲柜的發(fā)展經(jīng)歷了以下幾個方面:起初的超市自動存儲柜都是鑰匙柜。鑰匙柜是將大量的鑰匙進行集中管理而設計的,取、還鑰匙必須通過管理人員的發(fā)放,從而查詢到取、還鑰匙的各種相關信息并詳細記錄儲物柜的使用情況,解決了因管理不當引發(fā)的各種問題和時間。隨著電子元件的進一步發(fā)展,在電子密碼鎖的基礎上也出現(xiàn)了很多種類的超市自動存儲柜,且功能日益強大,使用更加方便,安全保密性更強,由以前固定的單密碼輸入發(fā)展到隨機密碼的輸入再到現(xiàn)在的加感應元件密碼的掃描,從而實現(xiàn)了真真正正的電子加密。由于人們對保密性要求的提高,還有一些人針對傳統(tǒng)超市自動存儲柜不能滿足企業(yè)、商業(yè)秘密等嚴格保密的問題,提出了遠程管理自動儲物管理系統(tǒng)[2],利用數(shù)據(jù)庫技術將密碼、IC卡和生物識別系統(tǒng)(指紋識別、人臉識別、掌形識別、簽名識別、聲音識別等等)綜合應用到遠程儲物柜系統(tǒng)中,利用互聯(lián)網(wǎng)技術進行保護,即使在很遠距離也可以實現(xiàn)對超市自動存儲柜的監(jiān)控。作為未來識別技術中的潛力產品,生物識別技術可以說有著非常好的使用前景。那么,對于現(xiàn)在超市自動存儲柜設備的選擇,我們又該如何把握呢?然而,這三種方式都不太適合現(xiàn)代超市自動存儲柜的發(fā)展現(xiàn)狀。第一種超市自動存儲柜雖造價不高,也容易學習,但是使用起來極其不方便,很容易造成硬件資源以及人員的浪費;第二種在儲物柜存滿物品時,不會自動顯示不能存東西,使用極不方便,且安全性也大打折扣,管理人員并不知道設計的儲物柜占用多少資源也沒有對其進行可行性分析,總會遇到硬件資源消耗大,作品調劑時間長,無法方便地按自己的設計意圖反復修改自己作品的難題;第三種技術雖然克服了傳統(tǒng)自動儲物柜系統(tǒng)的許多缺陷,增強了儲物柜的安全性,但是這種技術要求過高,投資過大,且不易掌握,不便于技術的推廣。只能適用于保密要求高且供個人使用的箱、柜房間等。超市自動存儲柜是為了滿足公共場合大眾存儲物品而設計的。因此本文試圖設計一種既實惠又方便的超市自動存儲柜的電子系統(tǒng),給人們的生活帶來方便。1.2本文的研究內容本設計來源于對生活的觀察,自動儲物柜可以節(jié)省人力和營業(yè)面積,并方便了顧客。本文以TH12864液晶顯示作為顯示模塊,led模擬門驅動電路。基本功能如下:a.當沒有“存”鍵或是“取”鍵按下時,一直顯示歡迎界面。b.當按下“存”鍵時,門打開,并顯示隨機密碼。c.當按下“取”鍵時,顯示“請輸入密碼”,當用戶輸入密碼時判斷密碼是否正確。d.設計一個萬能密碼以防止用戶忘記密碼,門打不開的情況。為了使本設計研究更有價值,可有以下的擴展功能:e.當用戶按下“存”時,在30s內用戶如果沒有關儲物柜的門,會自動報警。f.當用戶輸入密碼3次不正確時,自動報警。2總體框圖超市自動存儲柜的控制系統(tǒng)由中央控制和門控制電路構成,中央控制由微機構成,門控制電路采用lm3s811單片機作為主控芯片,每個單片機可控制多個儲物柜。以及4*4鍵盤掃描用戶輸入的密碼。利用TH12864液晶顯示儲物柜當前的狀態(tài)。門控驅動電路顯示門的開關狀態(tài)。下圖1為本設計的總體框圖:主控芯片主控芯片Lm3s811LcdLcdTH12864門控驅動電路門控驅動電路 4*4鍵盤4*4鍵盤圖1總體框圖2.1主控芯片LM3S8112.1.1LM3S811芯片介紹8位的51單片機長期占據(jù)著微控制器(MCU)的主流市場,但隨著技術與需求的發(fā)展,32位微控制器應用增長率也在不斷攀升。目前,基于ARM內核的32位微處理器在市場上處于領導地位。ARM處理器不但便宜而且性能較傳統(tǒng)的51單片機高得多,集成度也大大提高,為單芯片解決方案提供了非常方便的平臺,在很多場合都可以用一個芯片就能包容所需的全部資源,同時ARM處理器具有功耗低、程序代碼少、自動化程度高、響應速度快、體積小、可根據(jù)需要靈活定制等特點,適合于要求實時和多任務處理的場合。因此本設計采用ARM處理器。本設計所用的ARM處理器LM3S811有48個引腳[3],其大部分引腳具有復用功能,如LM3S811的用作JTAG的五個管腳,同時也可以作為GPIO使用,這是LM3S811的一個缺點,但同時也是它的一個優(yōu)點,由于JTAG被用來下載(燒寫)程序使用,再用作GPIO可能會使得芯片鎖死,這是它的缺點;但同時,它有防鎖死的措施,如果使用者細心加上防鎖死程序,或者在不需要使用太多GPIO的情況下,可以盡量不用這五個管腳PB7和PC0~PC3,如果需要,那么在加上防鎖死程序后,就有五個GPIO管腳可以使用,這是它的一大優(yōu)點。在LM3S811中,有很多功能模塊:JTAG、UART(串口)、PWM(脈沖寬度調制)、Timer(定時器)、ADC(模數(shù)轉換)等,其中一些功能模塊,如串口,可以用在的調試過程中,模擬的虛擬串口,通過串口調試器的調試,在電腦上可以看到輸入輸出的結果,同時對照硬件的工作情況,可以更直觀的得到運行結果。Timer可以被配置成一個32位的定時器,也可以被分為兩個16位的定時/計數(shù)器。LM3S811芯片特點[4]:工作頻率:0~50MHz32可編程I/O口3個定時模塊,提供6個16位定時器具有8個中斷優(yōu)先級和26個中斷64k單周期flash,8K單周期訪問SRAM內置看門狗向量中斷控制器,可配置優(yōu)先級和向量地址低功耗設計:具備睡眠模式和深度睡眠模式3個PWM信號發(fā)生模塊,提供3個16位的計數(shù)器、6個比較器,3個PWM信號發(fā)生器、以及一個死區(qū)發(fā)生器支持4通道模數(shù)轉換器,500000次/秒的采樣率內置溫度傳感器內置模擬比較器2個異步收發(fā)器模塊支持FreescaleSPI、MICROWIRE、和德州儀器三中格式同步串行接口擁有3個PWM發(fā)生器模塊LM3S811的內部系統(tǒng)方框圖及其芯片管腳[5]圖如下圖2所示:圖2LM3S811的內部系統(tǒng)方框圖及其芯片管腳圖2.1.2硬件總體框圖圖3硬件總體框圖2.1.2.1JTAG防鎖死按鍵LM3S811最小系統(tǒng)板中用將復用管腳PB5作為JTAG_LOCK按鍵,低電平有效。其主要作用是解決調試過程中有可能偶爾出現(xiàn)芯片的JTAG接口連接失效的問題,即遇到用調試器再也無法連接的情況,下圖3防鎖死按鍵電路。

圖4JTAG_LOCK電路2.1.2.2仿真接口JTAG是一種國際標準測試協(xié)議(IEEE1149.1兼容),主要用于芯片內部測試。標準的JTAG接口是4根線:測試模式選擇TMS_SWDIO、測試時鐘TCK、測試數(shù)據(jù)輸出TDO、測試數(shù)據(jù)輸入TD和測試復位/RST構成了仿真連接口,通過仿真連接口和仿真器連接,實現(xiàn)電路的仿真。2.2TH12864芯片研究2.2.1顯示模塊選擇1602液晶顯示器采用5×7點陣,可以顯示2行,每行16個字。1602液晶模塊內部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。TH12864LCD顯示器(LCD)[7]具有功耗低、體積小、重量輕、超薄等,其它顯示器無法比擬的優(yōu)點,近年來被廣泛用于單片機控制和微控制器控制的智能儀器、儀表和低功耗電子產品中。LCD主要分為段位式LCD、字符式LCD和點陣式LCD三種,其中段位式LCD和字符式LCD只能用于字符和數(shù)字的簡單的顯示,而不能滿足圖形曲線和漢字顯示的要求,在很多方面有很大的弊端;而點陣式LCD不僅可以顯示字符、數(shù)字,還可以顯示各種圖形、曲線和漢字,像1602液晶顯示器采用5×7點陣,可以顯示2行,每行16個字。本文選用了12864(128×64)LCD顯示器,它是128(列)64(行)點陣的LCD顯示模塊。在該系統(tǒng)中,通過LM3S811微控制器輸入輸出接口,利用C語言編程控制輸入輸出端口的高低電平,根據(jù)時序,以實現(xiàn)對LCD的控制,使得所需顯示的數(shù)據(jù)以及功能得以在LCD顯示模塊上顯示。2.2.2TH12864介紹表112864引腳說明引腳名稱方向說明1VSS-GND(0V)2VDD-SupplyVoltageForLogic(+3.3V)3V0-SupplyVoltageForLCD4RS(CS)0H:DataL:InstructionCode5R//W(STD)0H:ReadL:Write6E(SCLK)0EnableSignal7-14DB0-DB70數(shù)據(jù)0-數(shù)據(jù)715PSB0H:ParallelModeL:SerialMode16NC-空腳17RST0Resetsignal低電平有效18NC-空腳19LEDA-背光電源正極(LED+3.3V)20LEDK-背光電源負極(LED-0V)本設計使用的是TH12864顯示模塊,TH12864液晶顯示模塊是128×64點陣的漢字圖形型液晶顯示模塊,可顯示中文漢字及字符,且內含圖形庫,可顯示自定義字符、漢字和圖像,內置國標GB2312碼簡體中文字庫(16×16點陣)、128個字符(8×16點陣)及64×256點陣顯示RAM(GDRAM)。與外部CPU接口采用并行或串行兩種控制方式。其中TH12864的供電電源有3.3V和5V的,在本設計中使用的是3.3V的電源。其引腳說明如表1所示:2.2.3TH12864工作原理在本系統(tǒng)的設計中共使用了6條12864管腳與LM3S811進行連接,其12864的引腳為1、2、4、5、6、15,其中1、2兩條分別是接地和電源(3.3V);4引腳在串行狀態(tài)下為12864的芯片選擇端,控制12864到底是使用還是禁止,高電平有效,并行狀態(tài)下為12864的數(shù)據(jù)、命令選擇端,高電平為數(shù)據(jù)端,低電平為命令端;5引腳在串行狀態(tài)下12864的數(shù)據(jù)傳送端,并行狀態(tài)下為讀寫控制端,高電平讀,低電平寫;6引腳串行狀態(tài)下為12864的同步時鐘引腳,并行狀態(tài)下為信號使能端;15引腳為設置12864為并行還是串行模式,高電平為并行,低電平為串行,在本設計中使用串行模式,低電平有效。2.2.4TH12864顯示在顯示系統(tǒng)中,我們通過主控芯片LM3S811對12864顯示模塊進行控制,通過12864顯示模塊對主控芯片的命令進行讀取,得到需要顯示的數(shù)據(jù)或者指令,對所需顯示的數(shù)據(jù)進行顯示。12864液晶顯示模塊的每一個字符分為三個字節(jié)進行傳送,其串行傳送過程如圖5所示:圖5TH12864串行連接時序圖串行數(shù)據(jù)傳送分三個字節(jié)完成:第一個字節(jié):串口控制—格式為11111ABCA為數(shù)據(jù)傳送方向控制:H表示數(shù)據(jù)從LCD到MCU,L表示數(shù)據(jù)從MCU到LCDB為數(shù)據(jù)類型選擇:H表示數(shù)據(jù)時顯示數(shù)據(jù),L表示數(shù)據(jù)是控制指令C固定為0第二個字節(jié):8位數(shù)據(jù)的低4位—格式為DDDD0000第三個字節(jié):8位數(shù)據(jù)的高4位—DDDD0000在本設計中使用了如上的串行傳送方式,每一個數(shù)據(jù)分三個字節(jié)進行傳送,其中第一個字節(jié)的前五位與最后一位為固定的1或0,第六位控制數(shù)據(jù)的傳送方向,第七位對傳送的數(shù)據(jù)類型進行選擇;第二個字節(jié)開始對具體數(shù)據(jù)進行傳送,首先傳送的是數(shù)據(jù)的高四位,經(jīng)過第二個字節(jié)的傳送,就完成了對數(shù)據(jù)的高四位的傳送,第三個字節(jié)就對數(shù)據(jù)的第四位進行了傳送,至此,一個完整的數(shù)據(jù)得以傳送成功。2.2.5TH12864應用實驗使用Disp_HZ函數(shù)對每行進行顯示,使用for(::)死循環(huán)促成每行的迭代顯示。如圖6所示:圖6TH12864應用實驗效果TH12864的基本顯示程序如下所示:constunsignedcharh0[]={"信息學院"};constunsignedcharh1[]={"電信09趙拓"};constunsignedcharh2[]={"1070209014015"};constunsignedcharh3[]={"超市自動存儲柜的設計"};voidmain(void){jtagWait();//防止JTAG失效,重要!clockInit();//時鐘初始化:晶振,6MHz//初始化指針數(shù)組ptr[0]=h0;ptr[1]=h1;ptr[2]=h2;ptr[3]=h3;Ini_Lcd();//初始化液晶unsignedchartmp;for(;;){tcnt++;if(tcnt==0x02){Disp_HZ(0x80,ptr[0],8);Disp_HZ(0x90,ptr[1],8);Disp_HZ(0x88,ptr[2],8);Disp_HZ(0x98,ptr[3],8);}SysCtlDelay(1000*(TheSysClock/3000));//延時約1000ms}}3系統(tǒng)軟件部分設計3.1IAR編譯環(huán)境介紹IAREmbeddedWorkbenchforARM(簡稱IAREWARM)是一個針對ARM處理器的集成開發(fā)環(huán)境。IAR包含項目管理器、編輯器、C/C++編譯器和ARM匯編器、連接器XLINK和支持RTOS的調試工具C-SPY,其C/C++交叉編譯器及調試器是今天世界上最完整的和最容易使用的專業(yè)嵌入式應用開發(fā)工具,在EWARM環(huán)境下可以使用C/C++和匯編語言方便地開發(fā)嵌入式應用程序,相比其他的ARM開發(fā)環(huán)境,IAREWARM入門更容易、使用更方便、其代碼也更緊湊、編譯效率更高、系統(tǒng)庫功能也更完善。IAR從代碼編輯、工程建立到C/C++編譯、連接和調試可以是一套完整的集成開發(fā),由于其和各種仿真器、調試器緊密結合,用戶在開發(fā)和調試時能僅僅使用一種開發(fā)環(huán)境就可以完成多種微控制器的研發(fā)。IAREWARM集成的編譯器的主要特征如下[4]:?高效的PROMable代碼,完全標準的C語言兼容;?內含對應芯片的程序速度和大小優(yōu)化器;?版本控制和擴展工具支持良好;?便捷的中斷處理和模擬特性;?工程中的相對路徑支持。介于IAR的上述特性以及C語言具有廣泛的庫程序支持,編譯執(zhí)行效率高,支持工具也比較多較成熟,其在嵌入式系統(tǒng)中有廣泛的運用,具有通用性強,較強可維護性,可移植性程度高,執(zhí)行效率高等優(yōu)點,本次設計決定采用C語言編程4*4鍵盤掃描模塊和TH12864顯示模塊。3.2IAR編譯環(huán)境的安裝由于IAREWARM的試用版有30天功能無限制版本、32K代碼限制版本,32K代碼限制版的優(yōu)點是在使用時間上無限制,而我的設計從開始到結束30天不夠,功能無限制版使用不便,我的程序32K內足夠了,所以我在IAR公司的官網(wǎng)注冊下載的就是32K代碼限制版,在IAR公司官網(wǎng)獲得了其序列碼和KEY后就可以安裝了。下載完成IAR安裝軟件EWARM-KS-CD-6307后,雙擊進入在安裝頁面中,點擊InstallIAREmbeddedworkbench開始安裝,接下來輸入剛才在IAR官網(wǎng)獲得的試用版序列號和密鑰KEY完成IAR安裝,接下來還得要安裝IAR的工程文件庫Stellarisware的軟件SW-LM3S-8555以完成編譯環(huán)境的安裝。IAR編譯環(huán)境安裝完成后還得要安裝M3-LINK的虛擬串口驅動程序,安裝虛擬串口驅動程序后電腦才能識別仿真器,以完成燒寫與仿真器相連接的EEPROM,方法為:首先將LM3S811最小系統(tǒng)板和仿真器連接,然后與電腦連接,之后電腦會出現(xiàn)新硬件安裝向導,選擇手動安裝以打開德州儀器光盤中的USB仿真器驅動,選擇并安裝。由于仿真器是雙虛擬串口,因此電腦還會提示安裝新硬件,重復以上步驟,直到不再提醒。IAR開發(fā)環(huán)境的安裝如下圖8所示:圖8IAR開發(fā)環(huán)境的安裝3.3IAR編譯環(huán)境下LM3S811最小系統(tǒng)版的程序調試3.3.1IAR工程文件的創(chuàng)建與設置IAR工程文件的創(chuàng)建:*創(chuàng)建一個工程文件目錄,用來存放工作區(qū)文件、工程文件及程序源文件;*啟動IAREWARM,點擊“project”,選擇“Creatnewproject”,選擇默認的ARM和Emptyproject,創(chuàng)建一個基于ARM的空項目,保存項目文件;*右擊項目名稱,點擊“add”,選擇“addgroup”,在彈出的addgroup對話框中輸入文件組的名稱lib、src、startup,用于存放不同類型的源文件;*右擊文件組名稱,點擊“add”,選擇“addfiles”,添加所需文件以及源程序的源文件,比如lib文件組中的driverlib.a,是任何一個項目中都必不可少的,另外在startup文件組下的startup_ewarm.c也是必不可少的;IAR項目屬性的設置:☆點擊GeneralOptions選項,在Target選項下,點擊Device,在右側選擇TexasInsrumentsLM3S811;☆點擊Preprocessor選項卡,添加Include文件目錄,在此我將StellarisWare文件夾下的全部子文件夾都包括了進來;☆在Output選項卡中,勾選Generaladditionaloutput,在outputformat里選擇binary,再勾選overridedefault,這樣在編譯時會自動生成工程二進制文件.bin,方便下載;☆在Linker選項卡中勾選overridedefault,再選擇添加文件LM3S811.icf。在List選項中選擇generatelinkermapfile,便于生成MAP文件;☆在Debugger選項卡中,在setup里的driver選項選擇LMFTDI;在download下勾選verifydownload和useflashload;☆在LMIFTDI選項卡中,在Interface下選擇JTAG,在JTAG里選擇100KHz。IAR項目屬性的設置如下圖9所示:圖9IAR項目屬性的設置3.3.2LM3S811最小系統(tǒng)版的程序調試我使用了LM3S811的GPIO口控制LED閃爍發(fā)光的簡單例程來測試系統(tǒng)版是否可用以及是否能正常下載燒寫程序,只要將LM3S811最小系統(tǒng)版的LED1燈處即JP1跳線連接到PE1,程序下載進去后,LED1燈能亮2秒熄1秒即可判定下載成功且開發(fā)板可用。PE1口控制LED1燈分三步走:1)調用函數(shù)SysCtlPeriEnable()使能LED所在的GPIO模塊;2)調用函數(shù)GPIOPinTypeOut()配置LED所在的GPIO管腳為推挽輸出;3)調用函數(shù)GPIOPinWrite()對LED所在的GPIO管腳寫0和寫1來控制LED的亮滅,并在中間插入函數(shù)SysCtlDelay()進行延時控制,以達到閃爍發(fā)光的效果。測試用程序清單——LED閃爍發(fā)光:#include"systemInit.h"http://定義LED的端口#defineLED_PERIPHSYSCTL_PERIPH_GPIOG#defineLED_PORTGPIO_PORTG_BASE#defineLED_PINGPIO_PIN_2intmain(void){jtagWait();//防止JTAG失效,重要!clockInit();//時鐘初始化:晶振,6MHzSysCtlPeriEnable(LED_PERIPH);//使能LED所在的GPIO端口GPIOPinTypeOut(LED_PORT,LED_PIN);//設置LED所在管腳為輸出for(;;){GPIOPinWrite(LED_PORT,LED_PIN,0x00);//熄滅LEDSysCtlDelay(1000*(TheSysClock/3000));//延時約1000msGPIOPinWrite(LED_PORT,LED_PIN,0xFF);//點亮LEDSysCtlDelay(2000*(TheSysClock/3000));//延時約2000ms}}超市自動存儲柜軟件設計具體如下:判斷是否有鍵按下,若沒有鍵按下,一直顯示歡迎界面,繼續(xù)判斷是否有鍵按下。若有鍵按下,若是存包鍵按下,則轉到步驟2,若是取包鍵按下,則轉到步驟3。判斷是否有空柜,若有,空柜打開,并顯示取包時的密碼。當按下取包鍵時,用戶需輸入密碼,如果密碼正確,門打開。如果密碼錯誤,用戶需重新輸入密碼。軟件部分設計的總體流程如圖7示:顯示歡迎詞顯示歡迎詞存鍵存鍵是否顯示“請輸入密碼”顯示“請輸入密碼”顯示密碼顯示密碼密碼按鍵檢測密碼按鍵檢測密碼比較密碼錯誤重新輸入密碼比較密碼錯誤重新輸入錯誤正確門打開門打開圖7系統(tǒng)軟件的總流程圖主要程序如下所示:intmain(void){while(1){ Display();Key_Event();if(key_Flag==1){key_Flag=0;if(key_val=='*'){Clear_Char();srand((int)time(0));for(i=0;i<3;i++){Pass[i]=rand()%10+0x30;}Store();}elseif(key_val=='#'){Clear_Char();Take();}}SysCtlDelay(800*(TheSysClock/3000));//延時約1000ms}}3.44*4鍵盤掃描的實現(xiàn)超市自動存儲柜在用戶取物品時,需要對用戶輸入的密碼進行掃描。這時需實現(xiàn)對鍵盤的掃描:鍵盤掃描電路中,掃描鍵盤時采用逐列掃描的方式[8],依次對PD0、PD1、PD2、PD3列按鍵循環(huán)掃描,掃描時先對單片機的端口賦0xff,同時對與要掃描那列按鍵相連的單片機端口賦低電平,再將單片機的端口的值與0xff相與使低四位有效,如果按鍵被按下則與被按下那個按鍵相連的單片機端口的電平將被拉到低電平,通過判斷單片機端口的值就可以判斷出是哪個鍵被按下。需要注意的是,在鍵盤掃描軟件設計中,一定要有按鍵消抖的功能[9],否則按鍵按下的響應會受到較大影響。鍵盤識別是通過比較鍵盤掃描時對不同按鍵賦不同的值來執(zhí)行相應的操作的。PD4PD5PD6PD7||||PD0||||PD1||||PD2||||PD3顯示“請輸入密碼”顯示“請輸入密碼”有鍵按下有鍵按下否延時是延時有鍵按下否有鍵按下延時延時是有鍵按下否有鍵按下是獲取鍵值獲取鍵值RETRET圖84*4鍵盤掃描結構圖4*4鍵盤的主要程序:unsignedcharkey_Pressed;//按鍵是否被按下:1--是,0--否unsignedcharkey_val;//存放鍵值unsignedcharkey_Flag;//按鍵是否已放開:1--是,0--否//定義LED管腳#defineLED_PERIPHSYSCTL_PERIPH_GPIOE#defineLED_PORTGPIO_PORTE_BASE#defineLED_PINGPIO_PIN_1intmain(void){chars[40];jtagWait();//防止JTAG失效,重要!clockInit();//時鐘初始化:晶振,6MHzInit_Keypad();SysCtlPeriEnable(LED_PERIPH);//使能LED所在的GPIO端口GPIOPinTypeOut(LED_PORT,LED_PIN);//設置LED所在管腳為輸出key_val=0;sprintf(s,"\r\nKeyValue:%d",key_val);uartPuts(s);for(;;){Key_Event();if(key_Flag==1){key_Flag=0;sprintf(s,"\r\nKeyValue:%c",key_val);uartPuts(s);GPIOPinWrite(LED_PORT,LED_PIN,0xFF);//熄滅LEDSysCtlDelay(100*(TheSysClock/3000));//延時約100msGPIOPinWrite(LED_PORT,LED_PIN,0x00);//點亮LEDSysCtlDelay(100*(TheSysClock/3000));//延時約100ms}}}4系統(tǒng)的調試與分析4.14*4鍵盤的掃描并在TH12864上顯示的調試在TH12864的顯示環(huán)節(jié)調試中,發(fā)現(xiàn)LCD的背光太亮了以至于顯示的字幕在顯示屏上無法顯示,當我接上一個10k的滑動變阻器之后,通過阻值的不斷變化,最終達到了圖6的效果。在4*4鍵盤的掃描電路中,當我將程序燒進m3單片機時,顯示沒有錯誤,但就是不能將按鍵的值在液晶屏上顯示出來。首先分析硬件,對4*4鍵盤用萬用表進行檢測,當有鍵按下時,可以在萬用表中顯示,說明4*4鍵盤沒有問題。當用萬用表檢測之后,原來是由于電壓過低,需接上拉電阻。圖10為接入上拉電阻之后4*4鍵盤的掃描并在TH12864上顯示的結果:圖104*4鍵盤的掃描并在TH12864上顯示的調試4.2用戶輸入的密碼與隨機密碼比較的調試在焊接電路完成后,當調用隨機函數(shù)產生隨機密碼時,無論輸入的密碼是否正確,總會顯示密碼是正確的,說明自己當時調用的比較函數(shù)沒有起作用,需重新調用比較函數(shù)。在進行單步調試之后,發(fā)現(xiàn)在執(zhí)行比較函數(shù)時,會跳出,需重新調用比較函數(shù)。圖11為重新調用比較函數(shù)之后用戶輸入的密碼與隨機密碼比較的實物圖:圖11用戶輸入密碼與隨機密碼比較的調試4.3用戶輸入萬能密碼與隨機密碼比較的調試本設計為防止用戶忘記密碼而不能開鎖,設置萬能密碼為“123”,無論隨機密碼是什么,只要輸入萬能密碼,即可開鎖。4.4程序調試的典型舉例由于起初對IAR的使用不夠熟悉,之前以為只要在main.c里面添加進了4*4鍵盤的頭文件就可以完成4*4鍵盤的掃描及顯示,后來才發(fā)現(xiàn)需要在里面設置自己要用的"cryfucns.h"函數(shù)頭文件才能調試通過,最終自己查看了周立功的《ARM嵌入式系統(tǒng)基礎教程》及相關例程,在main.c文件里面成功添加了"cryfucns.h"的函數(shù)頭文件,使得模塊程序得以通過。另外在最終程序調試的時候,出現(xiàn)單獨的子程序能調試通過,放到一起就不能調試通過,通過自己努力以及導師的指導,我發(fā)現(xiàn)其中一個問題是各子程序模塊添加成主程序時,缺少頭文件,還有會出現(xiàn)管腳定義重復現(xiàn)象,導致不能調試通過。另外一個問題是在編譯連接下載都成功后,總是得不到想要的結果。于是進行單步調試,在調試單步執(zhí)行程序發(fā)現(xiàn)執(zhí)行到比較函數(shù)時,會出現(xiàn)跳過比較函數(shù),自己嘗試過定義各種數(shù)據(jù)類型進行比較都不能解決問題,上網(wǎng)搜索才知道用stren()比較字符串的長度,調用strcpy()可以比較字符串大小,最終重新編寫了比較函數(shù)使得問題得以解決。5結束語本設計采用了LM3S811微處理器為主控芯片,利用TH12864作為顯示模塊,4*4的鍵盤用作按鍵,Led代替門控驅動電路,利用隨機函數(shù)產生一個3位的隨機密碼,當客戶密碼正確時門打開,當密碼錯誤時顯示重新輸入密碼。本次設計的原理圖繪制使用了Protel99SE,軟件的編譯與和下載使用了IAREWARM,對這些軟件加深了熟悉、理解與掌握。在設計制作過程中,我力求硬件布線規(guī)范焊接美觀,軟件編程靈活簡便、可移植。設計過程中遇到過很多困難,曾一度中斷,后經(jīng)與老師同學討論仔細分析解決了問題,通過這次設計我深刻體會到了實踐的重要性,提高了自己獨立分析問題、解決問題的能力,鍛煉了自己的實際動手能力。很遺憾,因為設計過程時間有限,本設計想采用兩個獨立的按鍵作為“存”“取”功能使用,由于嘗試多次都未成功,用4*4鍵盤的“*”代表“存”“#”代表“取”。因此該系統(tǒng)還有很多值得改進的地方,如:當儲物柜存儲滿時,會自動顯示儲物柜已經(jīng)存滿。當用戶密碼輸入錯誤3次時或者當用戶忘記關門時會自動報警。其改進方向是在電路中加入ISDl760語音芯片。通過ISD1760錄制語音信息,然后利用ISD1760的SSI模式接口和LM3S811同步串行端口連接通信,實現(xiàn)語音芯片按照主控芯片發(fā)送的信息組合語音片段,讓語音芯片一定邏輯播放語音提示信息。參考文獻:[1]張先震,黃山,李寧等.自動儲物柜控制系統(tǒng)設計[J].微計算機信息,2009,25(43)[2]王博,盛霖,萬禮超等.新型智能儲物柜[J].校園電子競賽園地,2009,2(44)[3]TIworkteam.StellarisLM3S811Microcontroller[R].LuminaryMicroCompany,2007-2010.[4]黃爭.德州儀器高性能單片機和模擬器件在高校中的應用和選型指南[R].上海:德州半導體技術(上海)有限公司大學計劃部,2010.[5]周立功等.ARM嵌入式系統(tǒng)基礎教程[M].北京:北京航空航天大學出版社,2005.[6]姚文祥等.ARMCortex-M3權威指南[M].北京:北京航空航天大學出版社,2009.[7]張棟,秦昌麗,謝大帝等.基于ARM單片機的小車顯示系統(tǒng)設計[J].現(xiàn)代電子技術,2011,34(22):65-67.[8]曹建林,孫捷,孫雪穎等.電子密碼鎖設計[J].成都信息工程學院學報,2010,4(25)[9]張志利,侯傳勛,蔡偉等.全功能硬件掃描鍵盤控制器IP核的實現(xiàn)[J].電子技術應用,2006,10(111)[10]馬忠梅,籍順心,張凱等.單片機的C語言應用程序設計[M].北京航空航天大學出版社,2006.[11]王道新,熊祖彪,陳競等.基于IAR集成開發(fā)平臺的ARM程序設計方法[J].電子設計應用,2005(10):102-104.

附錄1:元件清單器件名稱器件數(shù)目LM3S8111片TH128641片4*4鍵盤1片電阻10K4個LED3個10k的滑動變阻器1個導線若干附錄2:主程序#include"systemInit.h"#include"key44.h"#include"uartGetPut.h"#include<stdio.h>#include<string.h>#include"cryfucns.h"#include<stdlib.h>#include<time.h>typedefunsignedcharuchar;typedefunsignedintuint;//定義LED1、LED2#defineLED1_PERIPHSYSCTL_PERIPH_GPIOB#defineLED1_PORTGPIO_PORTB_BASE#defineLED1_PINGPIO_PIN_0#defineLED2_PERIPHSYSCTL_PERIPH_GPIOB#defineLED2_PORTGPIO_PORTB_BASE#defineLED2_PINGPIO_PIN_1externunsignedcharkey_Pressed;//按鍵是否被按下:1--是,0--否externunsignedcharkey_val;//存放鍵值externunsignedcharkey_Flag;//按鍵是否已放開:1--是,0--否constunsignedcharh0[]={"歡迎光臨****超市"};constunsignedcharh1[]={"祝您購物愉快"};constunsignedcharh2[]={"存or取"};constunsignedcharh3[]={""};constunsignedcharh4[]={"按任意鍵選擇退出"};constunsignedcharStrWord[4]="123";unsignedcharStrings[]={"請輸入您的密碼"};unsignedcharStrings1[]={"密碼錯誤"};unsignedcharStrings2[]={"密碼正確"};unsignedcharTemp[]={""};unsignedcharPass[]="";unsignedcharPassWord[3]="";inttcnt,temp,i;intcount=0;voidDisplay();voidClear_Char();voidStore();voidTake();intmain(void){SysCtlPeriEnable(LED1_PERIPH);//使能LED1所在的GPIO端口GPIOPinTypeOut(LED1_PORT,LED1_PIN);//設置LED1所在管腳為輸出SysCtlPeriEnable(LED2_PERIPH);//使能LED2所在的GPIO端口GPIOPinTypeOut(LED2_PORT,LED2_PIN);//設置LED2所在管腳為輸出jtagWait();//防止JTAG失效,重要!clockInit();//時鐘初始化:晶振,6MHzIni_Lcd();//初始化LCDInit_Keypad();//初始化鍵盤端口while(1){GPIOPinWrite(LED1_PORT,LED1_PIN,0x00);//熄滅LEDGPIOPinWrite(LED2_PORT,LED2_PIN,0x00);//熄滅LEDGPIOPinWrite(LED3_PORT,LED3_PIN,0x00);//熄滅LED Display();Key_Event();if(key_Flag==1){key_Flag=0;if(key_val=='*'){Clear_Char();srand((int)time(0));for(i=0;i<3;i++){Pass[i]=rand()%10+0x30;}Store();}elseif(key_val=='#'){Clear_Char();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論