這是我的單片機(jī)結(jié)課項(xiàng)目
原理比較簡(jiǎn)單,主要使用80C51單片機(jī),加一個(gè)lcd屏
A73F9CC5DD288029C2DDD1FCF9273001.jpg (235.86 KB, 下載次數(shù): 123)
下載附件
接線圖
2018-7-10 21:01 上傳
FF95D7CE175634DADBDEE3F3A92CFCD3.jpg (125.58 KB, 下載次數(shù): 134)
下載附件
按鍵
2018-7-10 21:01 上傳
信息與機(jī)電工程學(xué)院
《單片機(jī)原理及應(yīng)用》課程設(shè)計(jì)報(bào)告
課題名稱 基于51單片機(jī)的電子密碼鎖設(shè)計(jì)
專業(yè)班級(jí) 2016級(jí)電子信息工程國(guó)內(nèi)班
基于51單片機(jī)的電子密碼鎖設(shè)計(jì) 摘 要 在日常的生活和工作中,住宅安全,文件資料的保護(hù)都需要用鎖來(lái)保證。傳統(tǒng)往往使用機(jī)械式鑰匙開鎖,但鑰匙丟失會(huì)使鎖的安全性大打折扣。隨著科學(xué)技術(shù)的不斷發(fā)展,電子密碼鎖應(yīng)運(yùn)而生,而密碼鎖也具有安全性高、成本低、功耗低、易操作等優(yōu)點(diǎn)。 本設(shè)計(jì)是基于51單片機(jī),并結(jié)合液晶顯示LCD1602,以及矩陣鍵盤輸入、復(fù)位、電源等電路組合而成。系統(tǒng)能夠完成開鎖、修改密碼等基本功能。整個(gè)設(shè)計(jì)在Keil開發(fā)環(huán)境下,用C語(yǔ)言編寫主控芯片的控制程序來(lái)實(shí)現(xiàn)具有多功能的電子密碼鎖。
一、緒論 1.1電子密碼鎖的背景 隨著社會(huì)不斷進(jìn)步,人民生活水平不斷提高,安全成為現(xiàn)代居民最關(guān)心的問(wèn)題之一。從古至今,鎖一直就是保護(hù)人們財(cái)產(chǎn)的必不可少的工具。目前,我們最常用的鎖就是圓柱形銷栓的彈子鎖,其機(jī)構(gòu)簡(jiǎn)單,使用方便,價(jià)格便宜,但在使用中暴露了很多缺點(diǎn):1、容易被開啟;2、內(nèi)部機(jī)械結(jié)構(gòu)復(fù)雜、故障率高;3、換鎖麻煩;4、互開率高;5、易被破壞;6、帶鑰匙的煩惱;7、鑰匙開門的煩惱。 電子密碼鎖是一種通過(guò)密碼輸入來(lái)控制電路或是芯片工作,從而控制機(jī)械開關(guān)的閉合,完成開鎖、閉鎖任務(wù)的電子產(chǎn)品。它的種類很多,有簡(jiǎn)易的電路產(chǎn)品,也有基于芯片的性價(jià)比較高的產(chǎn)品,F(xiàn)在應(yīng)用較廣的電子密碼鎖是以芯片為核心,通過(guò)編程來(lái)實(shí)現(xiàn)的。其性能和安全性已大大超過(guò)了機(jī)械鎖。所以,研究電子密碼鎖,符合現(xiàn)在主流發(fā)展趨勢(shì),具有極大的研究意義和現(xiàn)實(shí)意義,也具有經(jīng)濟(jì)可行性。 1.2電子密碼鎖的特點(diǎn) 1.保密性好,編碼量多,遠(yuǎn)遠(yuǎn)大于彈子鎖。隨機(jī)開鎖成功率幾乎為零。 2.密碼可變。 用戶可以經(jīng)常更改密碼,防止密碼被盜,同時(shí)也可以避免因人員的更替而使鎖的密級(jí)下降。 3.誤碼輸入保護(hù)。當(dāng)輸入密碼多次錯(cuò)誤時(shí),報(bào)警系統(tǒng)自動(dòng)啟動(dòng)。 4. 電子密碼鎖操作簡(jiǎn)單易行,一學(xué)即會(huì)。 5.干擾碼功能。在輸入正確密碼前可輸入任意碼。 6.安保功能。如果連續(xù)輸錯(cuò)4次密碼將會(huì)自動(dòng)斷電3分鐘。 7.緊急開啟功能(Panic Open)。出門時(shí)無(wú)需其他操作,只需一次的把手動(dòng)作,可機(jī)械的開啟門,所以遇到火災(zāi)等應(yīng)急狀況下也迅速,安全的開啟門。 8.入侵感應(yīng)功能。在門上鎖的狀態(tài)下,有人破鎖而入時(shí),會(huì)發(fā)出強(qiáng)力的報(bào)警音。 9.火災(zāi)報(bào)警功能。在室內(nèi)如果溫度達(dá)到75°左右,將會(huì)發(fā)出強(qiáng)力的報(bào)警音,同時(shí)鎖會(huì)自動(dòng)開啟。 10.雙重鎖定功能。外部強(qiáng)制鎖定:在內(nèi)部不能開啟,適用于外出時(shí),防止有人入侵。內(nèi)部強(qiáng)制鎖定:在外部不能開啟,讓您在家時(shí)更安心、安全。 11.弱電提醒功能。弱電提醒當(dāng)電量不足時(shí),在啟動(dòng)開門時(shí),會(huì)有美妙的音樂(lè)提示您及時(shí)更換電池。 12.自動(dòng)上鎖功能。采用全自動(dòng)鎖芯,門關(guān)后6秒內(nèi)自動(dòng)上鎖,外出更加安全。 13.外部顯示功能。當(dāng)密碼輸入錯(cuò)誤,鎖舌沒正常鎖到位,室內(nèi)反鎖,弱電等情況下,外部都有提示功能。 1.3電子密碼鎖的設(shè)計(jì)意義 單片機(jī)是典型的嵌入式微控制器(Microcontroller Unit),由運(yùn)算器,控制器,存儲(chǔ)器,輸入輸出設(shè)備等構(gòu)成,相當(dāng)于一個(gè)微型的計(jì)算機(jī)。與應(yīng)用在個(gè)人電腦中的通用型微處理器相比,它更強(qiáng)調(diào)自供應(yīng)(不用外接硬件)和節(jié)約成本。它的最大優(yōu)點(diǎn)是體積小,可放在儀表內(nèi)部,但存儲(chǔ)量小,輸入輸出接口簡(jiǎn)單,功能較低。由于其發(fā)展非常迅速,舊的單片機(jī)的定義已不能滿足,所以在很多應(yīng)用場(chǎng)合被稱為范圍更廣的微控制器;從上世紀(jì)80年代,由當(dāng)時(shí)的4位、8位單片機(jī),已經(jīng)發(fā)展到現(xiàn)在的32位300M的高速單片機(jī)。 單片機(jī)相當(dāng)于一個(gè)微型的計(jì)算機(jī)(最小系統(tǒng)),和計(jì)算機(jī)相比,單片機(jī)缺少了外圍設(shè)備等。概括的講:一塊芯片就成了一臺(tái)計(jì)算機(jī)。它的體積小、質(zhì)量輕、價(jià)格便宜、為學(xué)習(xí)、應(yīng)用和開發(fā)提供了便利條件。同時(shí),學(xué)習(xí)使用單片機(jī)是了解計(jì)算機(jī)原理與結(jié)構(gòu)的最佳選擇。它最早是被用在工業(yè)控制領(lǐng)域。 在很多方面單片機(jī)比專用處理器更適合應(yīng)用于嵌入式系統(tǒng),因此它得到了廣泛的應(yīng)用。事實(shí)上單片機(jī)是世界上數(shù)量最多處理器,隨著單片機(jī)家族的發(fā)展壯大,單片機(jī)和專用處理器的發(fā)展便分道揚(yáng)鑣。
現(xiàn)代人類生活中所用的幾乎每件有電子器件的產(chǎn)品中都會(huì)集成有單片機(jī)。手機(jī)、電話、計(jì)算器、家用電器、電子玩具、掌上電腦以及鼠標(biāo)等電子產(chǎn)品中都含有單片機(jī)。 基于單片機(jī)的電子密碼鎖設(shè)計(jì),只需在單片機(jī)外圍接簡(jiǎn)單的接口電路,核心部分由人為寫入程序即可,這樣不僅易于操作,也可使產(chǎn)品成本大大降級(jí),且容易進(jìn)行升級(jí)改善。該種電子密碼鎖設(shè)計(jì)方法合理,簡(jiǎn)單易行,成本低,符合人們需求,具有一定的商業(yè)價(jià)值和市場(chǎng)推廣性。 二、實(shí)驗(yàn)原理 2.1單片機(jī)開發(fā)系統(tǒng)主要硬件簡(jiǎn)介 單片機(jī)開發(fā)系統(tǒng)的硬件采用的是普中科技的HC6800EM3單片機(jī)開發(fā)試驗(yàn)儀,它是具有“實(shí)驗(yàn)、編程、ISP下載線”多功能合一的新一代單片機(jī)開發(fā)系統(tǒng)。該51單片機(jī)學(xué)習(xí)實(shí)驗(yàn)板支持STC的增強(qiáng)型51單片機(jī)的實(shí)驗(yàn)、編程功能,同時(shí)也兼容AVR系列單片機(jī)的燒寫和實(shí)驗(yàn)。 2、實(shí)驗(yàn)板端口資源 整個(gè)板子采取功能模塊化設(shè)計(jì),也就是說(shuō)每個(gè)功能模塊都是獨(dú)立,端口之間都未連接,因此做實(shí)驗(yàn)時(shí)候需要學(xué)習(xí)者自己先進(jìn)行硬件電路的設(shè)計(jì)與連接來(lái)搭建。詳細(xì)見實(shí)驗(yàn)板原理圖和每個(gè)實(shí)驗(yàn)的內(nèi)容。下表為部分引腳和外圍IC的接口對(duì)照表: | | | | | | | | | | | | | | | | | | DS1302 實(shí)時(shí)時(shí)鐘 | | | | | | | | | | | | | | PCF8591 數(shù)模/模數(shù)轉(zhuǎn)換 | | | | | | | |
| | |
| | |
| | |
| | |
| | |
| | 1602/12864/彩屏8位數(shù)據(jù)接口 |
| | |
| |
2.2單片機(jī)開發(fā)軟件簡(jiǎn)介 KeilC51軟件開發(fā)系統(tǒng)簡(jiǎn)介 
單片機(jī)開發(fā)中除必要的硬件外,同樣離不開軟件,匯編語(yǔ)言源程序要變?yōu)镃PU可以執(zhí)行的機(jī)器碼有兩種方法,一種是手工匯編,另一種是機(jī)器匯編,目前已極少使用手工匯編的方法了。 單片機(jī)在發(fā)展了這么多年來(lái),出現(xiàn)了各種各樣的編譯軟件,Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開發(fā)系統(tǒng),是目前開發(fā)51系列單片機(jī)的主流工具。與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。用過(guò)匯編語(yǔ)言后再使用C來(lái)開發(fā),體會(huì)更加深刻。 C語(yǔ)言是一個(gè)通用的編程語(yǔ)言,它提供高效的代碼、結(jié)構(gòu)化的編程和豐富的操作符。C語(yǔ)言不是一種大語(yǔ)言,不是為任何特殊應(yīng)用領(lǐng)域而設(shè)計(jì),它一般來(lái)說(shuō)限制較少,可以為各種軟件任務(wù)提供方便和有效的編程。許多應(yīng)用用C比其他語(yǔ)言編程更方便和有效。 優(yōu)化的Cx51的C編譯器完整的實(shí)現(xiàn)了ANSI的C語(yǔ)言標(biāo)準(zhǔn),對(duì)8051來(lái)說(shuō),Cx51不是一個(gè)通用的C編譯器,它首先的目標(biāo)是生成針對(duì)8051的最快和最緊湊的代碼。Cx51具有C編程的彈性和高效的代碼和匯編語(yǔ)言的速度。 C語(yǔ)言不能執(zhí)行的操作如輸入和輸出,需要操作系統(tǒng)的支持的一部分提供,因?yàn)檫@些函數(shù)和語(yǔ)言本身無(wú)關(guān),所以C特別適合對(duì)多平臺(tái)提供代碼。 8051系列是增長(zhǎng)最快的微處理器構(gòu)架之一,從不同的芯片廠家提供了400多種新擴(kuò)展的8051芯片,如PHILIPS的8051MX有幾M字節(jié)的代碼和數(shù)據(jù)空間大的應(yīng)用中。為了支持這些不同的8051芯片,Keil提供了幾種開發(fā)工具輸出文件格式,OMF2允許支持最多16MB代碼和數(shù)據(jù)空間的PHILIPS 8051MX結(jié)構(gòu)。 Keil C51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。 2.3程序燒錄 程序燒錄有兩種方法: - 使用普中科技的程序下載軟件
。 - 使用STC官方軟件下載

三、系統(tǒng)總體方案設(shè)計(jì) 3.1電子密碼鎖功能簡(jiǎn)介 電子密碼鎖由機(jī)械模塊、集成線路、電子元件、運(yùn)行算法等多部分組成,其核心為芯片,通過(guò)程序算法下達(dá)各種指令,由其他部分配合完成密碼的設(shè)置、存貯、識(shí)別和顯示、驅(qū)動(dòng)電磁執(zhí)行器并檢測(cè)其驅(qū)動(dòng)電流值、接收傳感器送來(lái)的報(bào)警信號(hào)、發(fā)送數(shù)據(jù)等工作。 密碼鎖的核心原理也很容易讓人理解,單片機(jī)接收用戶輸入的指令(密碼),與存貯在EEPROM中的密碼進(jìn)行對(duì)比。若指令相同,則驅(qū)動(dòng)電機(jī)開鎖;若指令不同,則提示錯(cuò)誤和重新輸入密碼。同時(shí)芯片會(huì)記錄用戶操作的指令以及芯片做出的反應(yīng)狀態(tài),作為后續(xù)智能化分析單依據(jù)。 3.2 STC15W4K32S4系列單片機(jī)簡(jiǎn)介 STC15W4K32S4系列單片機(jī)是 單片機(jī)是STC生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),是寬電壓/高速/高可靠/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī),采用STC第九代加密技術(shù),無(wú)法解密,指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成高精度R/C時(shí)鐘(±0.3%),±1%溫飄(-40℃~+85℃),常溫下溫飄±0.6%(-20℃~+65℃),ISP編程時(shí)5MHz~30MHz寬范圍可設(shè)置,可徹底省掉外部昂貴的晶振和外部復(fù)位電路(內(nèi)部已集成高可靠復(fù)位電路,ISP編程時(shí)16級(jí)復(fù)位門檻電壓 可選)。8路10位PWM,8路高速10位A/D轉(zhuǎn)換(30萬(wàn)次/秒),內(nèi)置4K字節(jié)大容量SRAM,4組獨(dú)立 的高速異步串行通信端口(UART1/UART2/UART3/UART4),1組高速同步串行通信端口SPI, 針對(duì)多串行口通信/電機(jī)控制/強(qiáng)干擾場(chǎng)合。內(nèi)置比較器,功能更強(qiáng)大。 現(xiàn)STC15系列單片機(jī)采用STC-Y5超高速CPU內(nèi)核,在相同的時(shí)鐘頻率下,速度又比STC早期的1T系列單片機(jī)(如STC12系列/STC11系列/STC10系列)的速度快20%。 1.增強(qiáng)型 8051 CPU,1T,單時(shí)鐘/機(jī)器周期,速度比普通8051快8-12倍 2.工作電壓:2.5V - 5.5V 3.16K/32K/40K/48K/56K/58K/61K/63.5K字節(jié)片內(nèi)Flash程序存儲(chǔ)器,擦寫次數(shù)10萬(wàn)次以上 4.片內(nèi)大容量4096字節(jié)的SRAM,包括常規(guī)的256字節(jié)RAM <idata> 和內(nèi)部擴(kuò)展的3840字節(jié) XRAM <xdata> 5.大容量片內(nèi)EEPROM,擦寫次數(shù)10萬(wàn)次以上 EEPROM,擦寫次數(shù)10萬(wàn)次以上,擦寫次數(shù)10萬(wàn)次以上 6.ISP/IAP,在系統(tǒng)可編程/在應(yīng)用可編程,無(wú)需編程器/仿真器 7.共8通道10位高速ADC,速度可達(dá)30萬(wàn)次/秒,8路PWM還可當(dāng)8路D/A使用 8.6通道15位專門的高精度PWM(帶死區(qū)控制)+2通道CCP(利用它的高速脈沖輸出功能可實(shí)現(xiàn)11~16位PWM)----可用來(lái)再實(shí)現(xiàn)8路D/A或2個(gè)16位定時(shí)器,或2個(gè)外部中斷(支持上升沿/下降沿中斷)與STC15W4K32S4系列單片機(jī)的6路增強(qiáng)型PWM相關(guān)的端口.上電后默認(rèn)為高阻輸入,上電前用戶須在程序中將該些端口設(shè)置為其他模式(如準(zhǔn)雙向口或強(qiáng)推挽模式);注意該些端口進(jìn)入掉電模式時(shí)不能為高阻輸入,否則需外部加上拉電阻。
9.內(nèi)部高可靠復(fù)位,ISP編程時(shí)16級(jí)復(fù)位門檻電壓可選,可徹底省掉外部復(fù)位電路 10.工作頻率范圍: 5MHz~28MHz, 相當(dāng)于普通8051的60MHz~336MHz 11.內(nèi)部高精度R/C時(shí)鐘(+0.3%),+1%溫飄( 40°C~+85*C),常溫下溫飄+0.6%(-20*C~+65*C) 12.不需外部晶振和外部復(fù)位,還可對(duì)外輸出時(shí)鐘和低電平復(fù)位信號(hào) 13.四組完全獨(dú)立的高速異步串行通信端口,分時(shí)切換可當(dāng)9組串口使用:串口1(RxD/P3.0,TxD/P3.1)可以切換到(RxD_2/P3.6,TxD_2/P3.7),還可以切換到(RxD_3/P1.6,TxD_3/P1.7);串口2(RxD2/P1.0,TxD2/P1.1)可以切換到(RxD2_ 2/P4.6,TxD2_2/P4.7);串口3(RxD3/P0.0,TxD3/P0.1)可以切換到(RxD3_ 2/P5.0,TxD3_ 2/P5.1);串口4(RxD4/P0.2, TxD4/P0.3)可以切換到(RxD4_ 2/P5.2, TxD4_ _2/P5.3) 注意:建議用戶將串口1放在P3.6/P3.7或P1.6/ P1.7 (P3.0/P3.1作下載/仿真用);若用戶不想切換,堅(jiān)持使用P3.0/P3.1或作為串口1進(jìn)行通信,則務(wù)必在下載程序時(shí),在軟件上勾選“下次冷啟動(dòng)時(shí),P3.2/P3.3為0/0時(shí)才可以下載程序”。 14.一組高速同步串行通信端口SPI. 15.支持程序加密后傳輸,防攔截 16.支持RS485下載
17.低功耗設(shè)計(jì):低速模式,空閑模式,掉電模式/停機(jī)模式.
18.可將掉電模式/停機(jī)模式喚醒的定時(shí)器:有內(nèi)部低功耗掉電喚醒專用定時(shí)器。
19.共7個(gè)定時(shí)器,5個(gè)16位可重裝載定時(shí)器/計(jì)數(shù)器(TO/T1/T2/T3/T4,其中T0/T1兼容普通8051的定時(shí)器/計(jì)數(shù)器),并均可獨(dú)立實(shí)現(xiàn)對(duì)外可編程時(shí)鐘輸出(5通道),另外管腳SysClkO可將系統(tǒng)時(shí)鐘對(duì)外分頻輸出(+1或+2或+4或+16),2路CCP還可再實(shí)現(xiàn)2個(gè)定時(shí)器 20.定時(shí)器/計(jì)數(shù)器2,也可實(shí)現(xiàn)1個(gè)16位重裝載定時(shí)器/計(jì)數(shù)器,定時(shí)器/計(jì)數(shù)器2也可產(chǎn)生時(shí)鐘輸出T2CLKO 單片機(jī)引腳說(shuō)明 單片機(jī)的40個(gè)引腳大致可分為4類:電源、時(shí)鐘、控制和I/O引腳。
⒈ 電源:
⑴ VCC - 芯片電源,接+5V;
⑵ VSS - 接地端; ⒉ 時(shí)鐘:XTAL1、XTAL2 - 晶體振蕩電路反相輸入端和輸出端。 ⒊ 控制線:控制線共有4根,
⑴ ALE/PROG:地址鎖存允許/片內(nèi)EPROM編程脈沖
① ALE功能:用來(lái)鎖存P0口送出的低8位地址
② PROG功能:片內(nèi)有EPROM的芯片,在EPROM編程期間,此引腳輸入編程脈沖。
⑵ PSEN:外ROM讀選通信號(hào)。
⑶ RST/VPD:復(fù)位/備用電源。
① RST(Reset)功能:復(fù)位信號(hào)輸入端。
② VPD功能:在Vcc掉電情況下,接備用電源。
⑷ EA/Vpp:內(nèi)外ROM選擇/片內(nèi)EPROM編程電源。
① EA功能:內(nèi)外ROM選擇端。
② Vpp功能:片內(nèi)有EPROM的芯片,在EPROM編程期間,施加編程電源Vpp。 ⒋ I/O線
80C51共有4個(gè)8位并行I/O端口:P0、P1、P2、P3口,共32個(gè)引腳。P3口還具有第二功能,用于特殊信號(hào)輸入輸出和控制信號(hào)(屬控制總線)。 3.3LCD1602簡(jiǎn)介 工業(yè)字符型液晶,能夠同時(shí)顯示16x02即32個(gè)字符。(16列2行)
1602液晶也叫1602字符型液晶,它是一種專門用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形(用自定義CGRAM,顯示效果也不好)。
1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個(gè)字符液晶模塊(顯示字符和數(shù)字)。
市面上字符液晶大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。 1602LCD 主要技術(shù)參數(shù): 顯示容量:16×2 個(gè)字符 芯片工作電壓:4.5—5.5V 工作電流:2.0mA(5.0V) 模塊最佳工作電壓:5.0V 字符尺寸:2.95×4.35(W×H)mm 管腳功能: 1602采用標(biāo)準(zhǔn)的16腳接口,其中:
第1腳:VSS為電源地
第2腳:VCC接5V電源正極
第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。
第4腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。
第5腳:RW為讀寫信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。
第6腳:E(或EN)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。
第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。 特性 3.3V或5V工作電壓,對(duì)比度可調(diào)
內(nèi)含復(fù)位電路
提供各種控制命令,如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能
有80字節(jié)顯示數(shù)據(jù)存儲(chǔ)器DDRAM
內(nèi)建有192個(gè)5X7點(diǎn)陣的字型的字符發(fā)生器CGROM
8個(gè)可由用戶自定義的5X7的字符發(fā)生器CGRAM 特征應(yīng)用 微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧,常用在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中。 操作控制 注:關(guān)于E=H脈沖——開始時(shí)初始化E為0,然后置E為1。
字符集
1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”。
在單片機(jī)編程中還可以用字符型常量或變量賦值,如'A’。因?yàn)镃GROM儲(chǔ)存的字符代碼與我們PC中的字符代碼是基本一致的,因此我們?cè)谙駾DRAM寫C51字符代碼程序時(shí)甚至可以直接用P1=‘A’這樣的方法。PC在編譯時(shí)就把'A'先轉(zhuǎn)換為41H代碼了。
字符代碼0x00~0x0F為用戶自定義的字符圖形RAM(對(duì)于5X8點(diǎn)陣的字符,可以存放8組,5X10點(diǎn)陣的字符,存放4組),就是CGRAM了。
0x20~0x7F為標(biāo)準(zhǔn)的ASCII碼,0xA0~0xFF為日文字符和希臘文字符,其余字符碼(0x10~0x1F及0x80~0x9F)沒有定義。
以下是1602的16進(jìn)制ASCII碼表地址:讀的時(shí)候,先讀左邊那列,再讀上面那行,如:感嘆號(hào)!的ASCII為0x21,字母B的ASCII為0x42(前面加0x表示十六進(jìn)制)。 1602LCD 的指令說(shuō)明及時(shí)序 1602 液晶模塊內(nèi)部的控制器共有11條控制指令。 控制命令表 1602 液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過(guò)指令編程來(lái)實(shí)現(xiàn)的。(說(shuō)明:1 為高電平、0 為低電平) 指令 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:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控 制光標(biāo)的開與關(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ù)。 基本操作時(shí)序表 讀操作時(shí)序: 
寫操作時(shí)序: 
LCD1602的RAM地址映射 液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示 不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖 10-57 是 1602 的內(nèi)部顯示地址。 1602 的內(nèi)部顯示地址: 
例如第二行第一個(gè)字符的地址是 40H,那么是否直接寫入 40H 就可以將光標(biāo)定位在第二行第一個(gè)字符 的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位 D7 恒定為高電平 1 所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。 在對(duì)液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無(wú)需人工 干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。 1602 液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了 160 個(gè)不同的點(diǎn)陣字符圖形,如圖 10-58 所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有 一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是 01000001B(41H),顯示時(shí)模塊把地址 41H 中 的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”。 1602LCD 的一般初始化(復(fù)位)過(guò)程 延時(shí) 15mS 寫指令 38H(不檢測(cè)忙信號(hào)) 延時(shí) 5mS 寫指令 38H(不檢測(cè)忙信號(hào)) 延時(shí) 5mS 寫指令 38H(不檢測(cè)忙信號(hào)) 以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測(cè)忙信號(hào) 寫指令 38H:顯示模式設(shè)置 寫指令 08H:顯示關(guān)閉 寫指令 01H:顯示清屏 寫指令 06H:顯示光標(biāo)移動(dòng)設(shè)置 寫指令 0CH:顯示開及光標(biāo)設(shè)置 3.4矩陣鍵盤簡(jiǎn)介 矩陣鍵盤是單片機(jī)外部設(shè)備中所使用的排布類似于矩陣的鍵盤組。矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,列線通過(guò)電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。矩陣鍵盤的優(yōu)點(diǎn)是節(jié)約單片機(jī)IO口,例如普通鍵盤8個(gè)IO口只能用作8個(gè)按鍵,而矩陣鍵盤能作16個(gè)按鍵。 組成結(jié)構(gòu) 在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤是合理的。 矩陣鍵盤不僅在連接上比單獨(dú)式按鍵復(fù)雜,它的按鍵識(shí)別方法也比單獨(dú)式按鍵復(fù)雜。在矩陣鍵盤的軟件接口程序中,常使用的按鍵識(shí)別方法有行掃描法和線反轉(zhuǎn)法。這兩種方法的基本思路是采用循環(huán)查循的方法,反復(fù)查詢按鍵的狀態(tài),因此會(huì)大量占用MCU的時(shí)間,所以較好的方式也是采用狀態(tài)機(jī)的方法來(lái)設(shè)計(jì),盡量減少鍵盤查詢過(guò)程對(duì)MCU的占用時(shí)間。 單片機(jī)系統(tǒng)中,若使用按鍵較多時(shí)如電子密碼鎖、電話機(jī)鍵盤等一般都至少有12到16個(gè)按鍵,通常采用矩陣鍵盤。 矩陣鍵盤又稱行列鍵盤,它是用四條I/O線作為行線,四條I/O線作為列線組成的鍵盤。在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤上按鍵的個(gè)數(shù)就為4*4個(gè)。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O口的利用率。 矩陣鍵盤的工作原理 最常見的鍵盤布局如圖3所示。一般由16個(gè)按鍵組成,在單片機(jī)中正好可以用一個(gè)P口實(shí)現(xiàn)16個(gè)按鍵功能,這也是在單片機(jī)系統(tǒng)中最常用的形式,4*4矩陣鍵盤的內(nèi)部電路如圖。 矩陣鍵盤布局圖: 
矩陣鍵盤內(nèi)部布局圖: 
當(dāng)無(wú)按鍵閉合時(shí),P3.0~P3.3與P3.4~P3.7之間開路。當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條I/O口線之間短路。判斷有無(wú)按鍵按下的方法是:第一步,置列線P3.4~P3.7為輸入狀態(tài),從行線P3.0~P3.3輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電平,則該列線上有鍵閉合。第二步,行線輪流輸出低電平,從列線P3.4~P3.7讀入數(shù)據(jù),若有某一列為低電平,則對(duì)應(yīng)行線上有鍵按下。綜合一二兩步的結(jié)果,可確定按鍵編號(hào)。但是鍵閉合一次只能進(jìn)行一次鍵功能操作,因此須等到按鍵釋放后,再進(jìn)行鍵功能操作,否則按一次鍵,有可能會(huì)連續(xù)多次進(jìn)行同樣的鍵操作。 行掃描法:
以4*4矩陣按鍵為例,將全部行線置低電平,然后檢測(cè)列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有列線均為高電平,則鍵盤中無(wú)鍵按下。
判斷閉合鍵所在的位置: 在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過(guò)程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
線反轉(zhuǎn)法: Step 1:將列線作為輸出線,行線作為輸入線。置輸出線全部為0,此時(shí)行線中呈低電平0的為按鍵所在行,如果全部都不是0,則沒有按鍵按下。
Step 2:將第一步反過(guò)來(lái),即將行線作為輸出線,列線作為輸入線。置輸出線全部為0,此時(shí)列線呈低電平的為按鍵所在的列。這樣,就可以確定了按鍵的位置(X,Y)。 鍵盤掃描方法: 鍵盤掃描方法是:行線P10~P13為輸出線,列線P14~P17為輸入線。一開始單片機(jī)將行線(P10~P13)全部輸出低電平,此時(shí)讀入列線數(shù)據(jù),若列線全為高電平則沒有鍵按下,當(dāng)列線有出現(xiàn)低電平時(shí)調(diào)用延時(shí)程序以此來(lái)去除按鍵抖動(dòng)。延時(shí)完成后再判斷是否有低電平,如果此時(shí)讀入列線數(shù)據(jù)還是有低電平,則說(shuō)明確實(shí)有鍵按下。最后一步確定鍵值。以第二行的S5鍵為例,若按下S5后該怎么得到這個(gè)鍵值呢?當(dāng)判斷確實(shí)有鍵按下之后,行線輪流輸出低電平,根據(jù)讀入列線的數(shù)據(jù)可以確定鍵值。首先,單片機(jī)將P10輸出為低電平,其它P11~P13輸出高電平,此時(shí)讀取列線的數(shù)據(jù)全為高電平,說(shuō)明沒有在第一行有鍵按下;其次,單片機(jī)將P11輸出低電平,其它P10、P12、P13仍為高電平,此時(shí)再來(lái)讀取列線數(shù)據(jù),發(fā)現(xiàn)列線讀到的數(shù)據(jù)有低電平,數(shù)值為1011(0x0B),如果鍵盤布局已經(jīng)確定,那么0x0B就代表S5的值了。轉(zhuǎn)到S5鍵功能處理子程序就可以達(dá)到目的。 四、系統(tǒng)軟件設(shè)計(jì)方案 4.1軟件設(shè)計(jì)思路 將整個(gè)程序分為三個(gè)部分,一個(gè)是輸入部分,一個(gè)是顯示部分,最后是密碼驗(yàn)證和重置。 輸入部分由矩陣鍵盤完成,將矩陣鍵盤上的每一個(gè)鍵賦值,主要有數(shù)字鍵0-9,確認(rèn)鍵,更正鍵(重新輸入密碼),以及重置鍵(設(shè)置新的密碼)。 顯示部分:在矩陣鍵盤上輸入數(shù)字時(shí),將輸入的數(shù)字顯示在LCD液晶屏上,并且在輸入密碼、驗(yàn)證密碼后顯示密碼是否正確。 密碼驗(yàn)證和重置:在輸入密碼完成后,將輸入密碼和實(shí)際密碼比較。而在重置密碼時(shí),要先確認(rèn)輸入密碼是否正確。
五、系統(tǒng)調(diào)試 
編程運(yùn)行顯示無(wú)錯(cuò)誤,經(jīng)過(guò)在老師面前進(jìn)行實(shí)物操作,顯示該電子密碼鎖確實(shí)具有輸入,顯示,驗(yàn)證,修改密碼,重置密碼等功能。
單片機(jī)源程序如下: - <font color="rgb(0, 0, 0)">#include <STC15.h>
- #include "intrins.h"
- typedef unsigned char u8;
- typedef unsigned int u16;
- u8 code KeyCodeTable[]=
- {0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
- 0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
- sbit FMQ=P4^2;
- sbit RS = P2^6; //數(shù)據(jù)/命令選擇控制位
- sbit RW = P2^5; //讀/寫控制位
- sbit EN = P2^7; //使能控制位
- #define DataPort P0
- u8 Keys_Scan(void);
- void Delay_500us(void);
- void Delay_nms(u16 nms);
- void Beep(void);
- void Pin_Mode(void);
- void LCD_Initial(void);
- bit LCD_Check_Busy(void);
- void LCD_Write_Command(u8 command);
- void LCD_Write_Data(u8 Data);
- void LCD_Clear(void);
- void xianshi(void); //LCD顯示函數(shù)
- void xianshiyes(void); //輸入密碼正確的顯示函數(shù)
- void xianshiwrong(void); //輸入密碼錯(cuò)誤后的顯示函數(shù)
- void input(void); //輸入函數(shù)
- void CZMA(void); //重置密碼函數(shù)
- void yanzhen(void); //將輸入的密碼與正確密碼對(duì)比的驗(yàn)證函數(shù)
- void fuzhi1(void); //對(duì)LCD顯示函數(shù)中的數(shù)組賦值函數(shù)
- u8 RIGHT[]="pass";
- u8 WRONG[]="Password Error";
- u8 SHURU[]="aaaaaaaaaa";
- u8 SHUZU[]="aaaaaaaaaa";
- u8 MIMA[]="000aaaaaaa";
- u16 Yanzhenshu=0;
- void main(void)
- {
- Pin_Mode();
- LCD_Initial();
- LCD_Clear();
- while(1)
- { P1=0x0f;
-
- if((P1&0x0f)!=0x0f)
- { Delay_nms(15);
- if((P1&0x0f)!=0x0f)
- { LCD_Clear();
- fuzhi1(); //先對(duì)顯示的數(shù)組進(jìn)行賦值,以免出現(xiàn)顯示錯(cuò)誤
-
- input(); //輸入密碼
- if(Keys_Scan()==12)
- LCD_Clear();
- fuzhi1();
-
- input(); //若按下重置鍵,則重新輸入
- if(Keys_Scan()==13)
- { yanzhen(); //按下確認(rèn)鍵,對(duì)密碼進(jìn)行驗(yàn)證
- if(Yanzhenshu==0)
- {LCD_Clear();
- xianshiyes(); //密碼正確
- }
- else
- { LCD_Clear();
- fuzhi1();
- xianshiwrong(); //密碼錯(cuò)誤
- }
- }
- if(Keys_Scan()==15)
- {
- LCD_Clear();
- fuzhi1();
- yanzhen(); //按下重置密碼鍵之后,先確認(rèn)之前輸入的密碼是否正確
- if(Yanzhenshu==0)
- CZMA(); //正確則重置密碼
- else
- {LCD_Clear();
- xianshiwrong();
- }
- }
- P1=0xf0;
- while((P1&0xf0)!=0xf0)
- { P1=0xf0;
- Beep();
- }
- }
- }
- }
- }
- void fuzhi1(void)
- { u8 i=0;
- for(;i<10;i++)
- { SHUZU[i]='a';
- }
- }
- void yanzhen(void)
- { u8 i;
- Yanzhenshu=0;
- for(i=0;MIMA[i]!='a' && MIMA[i]!='\0';i++)
- { if(SHURU[i]!=MIMA[i] || SHURU[i+1]!=MIMA[i+1]) //驗(yàn)證密碼是否正確
- {Yanzhenshu=1;
- break;
- }
- }
- }
- void xianshiyes(void)
- { u8 m;
- u8 n=0;
- for (m=0x80;m<0x90;m++)
- {
- LCD_Write_Command(m);
- if(RIGHT[n]=='\0') break;
- LCD_Write_Data(RIGHT[n]);
- n++;
- }
- }
- void xianshiwrong(void)
- { u8 m;
- u8 n=0;
- for (m=0x80;m<0x90;m++)
- {
- LCD_Write_Command(m);
- if(WRONG[n]=='\0') break;
- LCD_Write_Data(WRONG[n]);
- n++;
- }
- }
- void xianshi(void)
- { u8 m;
- u8 n=0;
- for (m=0x80;m<0x90;m++)
- {
- LCD_Write_Command(m);
- if(SHUZU[n]=='a'|| SHUZU[n]=='\0') break;
- LCD_Write_Data(SHUZU[n]);
- n++;
- }
- }
- void CZMA(void)
- { u8 i,key;
- for(i=0;i<10;)
- { P1=0xf0;
- if((P1&0xf0)!=0xf0)
- { Delay_nms(15);
- if((P1&0xf0)!=0xf0 )
- { if(Keys_Scan()!=15)
- {
- if (Keys_Scan()==13) break; //再確認(rèn)要重置密碼后,把輸入的新密碼存入'SHUZU'數(shù)組中,若按下確認(rèn)鍵則跳出
- key=Keys_Scan();
- SHUZU[i]=key+'0';
- xianshi();
- i++;
- }
- P1=0xf0;
- while((P1&0xf0)!=0xf0)
- { P1=0xf0;
- Beep();
- }
- }
- }
-
- }
- for(i=0;i<9;i++)
- {MIMA[i]=SHUZU[i];//將密碼存入“MIMA”數(shù)組中
- }
- LCD_Clear();
- fuzhi1();
- }
- void input(void)
- {
- u8 i=0,key;
- for(;i<10;)
- { P1=0xf0;
- if((P1&0xf0)!=0xf0)
- { Delay_nms(15);
- if((P1&0xf0)!=0xf0)
- { if (Keys_Scan()>=10) break; //確認(rèn)有鍵按下后,如果按下的不是數(shù)字鍵0-9,則跳出循環(huán)
- key=Keys_Scan();
- SHURU[i]=key+'0'; //將輸入的數(shù)字轉(zhuǎn)化為字符變量存入‘SHURU’和‘SHUZU'兩個(gè)數(shù)組中
- SHUZU[i]=SHURU[i];
- SHURU[i+1]='a'; //對(duì)"SHURU"數(shù)組的下一位賦值為a,避免在驗(yàn)證密碼時(shí)出錯(cuò)
- xianshi(); //顯示函數(shù)
- i++;
-
- P1=0xf0;
- while((P1&0xf0)!=0xf0)
- { P1=0xf0;
- Beep();
- }
- }
- }
-
- }
-
- }
- void Delay_500us(void)
- {
- u16 t;
- for(t=0;t<540;t++);
- }
- void Delay_nms(u16 nms)
- {
- u16 i,t;
- for(i=0;i<nms;i++)
- {
- for(t=0;t<1080;t++);
- }
- }
- void Beep(void)
- {
- u8 i;
- for(i=0;i<10;i++)
- {
- Delay_500us();
- FMQ=~FMQ;
- }
- FMQ=1;
- }
- void Pin_Mode(void)
- {
- P0M1 = 0x00; P0M0 = 0x00;
- P2M1 = 0x00; P2M0 = 0x00;
- P1M1 = 0x00; P1M0 = 0x00;
- P4M1 = 0x00; P4M0 = 0x00;
- }
- u8 Keys_Scan(void)
- {
- u8 j,temp,i;
- u8 t=0xfe;
- P1=0xf0;
- if((P1&0xf0)!=0xf0)
- { Beep();
- for(i=0;i<4;i++)
- { P1=t;
- temp=P1;
- for(j=0;j<16;j++)
- { if(temp==KeyCodeTable[j]) return(j);
- }
- t=_crol_(t,1);
- }
-
- }
- return(16);
- }
- //當(dāng)有鍵按下時(shí),確認(rèn)所按下的鍵并賦值
- void LCD_Initial(void)
- {
- LCD_Write_Command(0x38); //顯示模式設(shè)置
- Delay_nms(5); //16*2,5*7點(diǎn)陣
- LCD_Write_Command(0x38); //8位數(shù)據(jù)接口
- Delay_nms(5);
- LCD_Write_Command(0x38);
- Delay_nms(5);
- LCD_Write_Command(0x38);
- LCD_Write_Command(0x08); //顯示關(guān)閉,見手冊(cè)4.1.2
- LCD_Write_Command(0x01); //顯示清屏
- LCD_Write_Command(0x06); //顯示光標(biāo)移動(dòng)設(shè)置
- Delay_nms(5);
- LCD_Write_Command(0x0C); //顯示開及光標(biāo)設(shè)置
- }
- bit LCD_Check_Busy(void)
- {
- DataPort = 0xFF; //將端口置為全高(輸入)
- RS = 0; //指令(狀態(tài))
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
- </font>
復(fù)制代碼
0.png (43.19 KB, 下載次數(shù): 142)
下載附件
2018-7-11 03:26 上傳
所有資料51hei提供下載:
電子密碼鎖.rar
(1.58 MB, 下載次數(shù): 364)
2018-7-10 21:02 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|