在日常的生活和工作中,住宅安全,文件資料的保護(hù)都需要用鎖來保證。傳統(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語言編寫主控芯片的控制程序來實(shí)現(xiàn)具有多功能的電子密碼鎖。
一、緒論
1.1電子密碼鎖的背景
隨著社會(huì)不斷進(jìn)步,人民生活水平不斷提高,安全成為現(xiàn)代居民最關(guā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、鑰匙開門的煩惱。
電子密碼鎖是一種通過密碼輸入來控制電路或是芯片工作,從而控制機(jī)械開關(guān)的閉合,完成開鎖、閉鎖任務(wù)的電子產(chǎn)品。它的種類很多,有簡(jiǎn)易的電路產(chǎn)品,也有基于芯片的性價(jià)比較高的產(chǎn)品。現(xiàn)在應(yīng)用較廣的電子密碼鎖是以芯片為核心,通過編程來實(shí)現(xiàn)的。其性能和安全性已大大超過了機(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í)無需其他操作,只需一次的把手動(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ì)有美妙的音樂提示您及時(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ì),也就是說每個(gè)功能模塊都是獨(dú)立,端口之間都未連接,因此做實(shí)驗(yàn)時(shí)候需要學(xué)習(xí)者自己先進(jìn)行硬件電路的設(shè)計(jì)與連接來搭建。詳細(xì)見實(shí)驗(yàn)板原理圖和每個(gè)實(shí)驗(yàn)的內(nèi)容。下表為部分引腳和外圍IC的接口對(duì)照表:
外圍IC與單片機(jī)接口對(duì)照表 | |||||
74HC165 并入串出鎖存器 | CLOCK | P3.6 | 74HC595 串入并出鎖存器 | MISO | P3.4(有短路帽) |
INDAT | P1.7(有短路帽) | SCK | P3.6 | ||
SH/LD | P1.6 | RCK | P3.5 | ||
74HC138 138譯碼器 | A | P2.2 | DS1302 實(shí)時(shí)時(shí)鐘 | SCK | P3.6 |
B | P2.3 | I/O | P3.4(有短路帽) | ||
C | P2.4 | RST | P3.5 | ||
AT24C02 EEPROM | SCL | P2.1 | PCF8591 數(shù)模/模數(shù)轉(zhuǎn)換 | SCL | P2.1 |
SDA | P2.0 | SDA | P2.0 | ||
繼電器 |
| P1.4(有短路帽) | 蜂鳴器 |
| P1.5(有短路帽) |
紅外接收頭 |
| P3.2(有短路帽) | 溫度檢測(cè) |
| P3.7 |
步進(jìn)馬達(dá) |
| P1.0-P1.3 | 串口通信 |
| P3.0 P3.1 |
1602/12864/彩屏8位數(shù)據(jù)接口 |
| P0.0-P0.7 | NE555 555定時(shí)器 |
| P3.5(有短路帽) |
2.2單片機(jī)開發(fā)軟件簡(jiǎn)介
KeilC51軟件開發(fā)系統(tǒng)簡(jiǎn)介
單片機(jī)開發(fā)中除必要的硬件外,同樣離不開軟件,匯編語言源程序要變?yōu)镃PU可以執(zhí)行的機(jī)器碼有兩種方法,一種是手工匯編,另一種是機(jī)器匯編,目前已極少使用手工匯編的方法了。
單片機(jī)在發(fā)展了這么多年來,出現(xiàn)了各種各樣的編譯軟件,Keil C51是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),是目前開發(fā)51系列單片機(jī)的主流工具。與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會(huì)更加深刻。
C語言是一個(gè)通用的編程語言,它提供高效的代碼、結(jié)構(gòu)化的編程和豐富的操作符。C語言不是一種大語言,不是為任何特殊應(yīng)用領(lǐng)域而設(shè)計(jì),它一般來說限制較少,可以為各種軟件任務(wù)提供方便和有效的編程。許多應(yīng)用用C比其他語言編程更方便和有效。
優(yōu)化的Cx51的C編譯器完整的實(shí)現(xiàn)了ANSI的C語言標(biāo)準(zhǔn),對(duì)8051來說,Cx51不是一個(gè)通用的C編譯器,它首先的目標(biāo)是生成針對(duì)8051的最快和最緊湊的代碼。Cx51具有C編程的彈性和高效的代碼和匯編語言的速度。
C語言不能執(zhí)行的操作如輸入和輸出,需要操作系統(tǒng)的支持的一部分提供,因?yàn)檫@些函數(shù)和語言本身無關(guān),所以C特別適合對(duì)多平臺(tái)提供代碼。
8051系列是增長最快的微處理器構(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軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語言的優(yōu)勢(shì)。
2.3程序燒錄
程序燒錄有兩種方法:
三、系統(tǒng)總體方案設(shè)計(jì)
3.1電子密碼鎖功能簡(jiǎn)介
電子密碼鎖由機(jī)械模塊、集成線路、電子元件、運(yùn)行算法等多部分組成,其核心為芯片,通過程序算法下達(dá)各種指令,由其他部分配合完成密碼的設(shè)置、存貯、識(shí)別和顯示、驅(qū)動(dòng)電磁執(zhí)行器并檢測(cè)其驅(qū)動(dòng)電流值、接收傳感器送來的報(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ù),無法解密,指令代碼完全兼容傳統(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萬次/秒),內(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萬次以上
4.片內(nèi)大容量4096字節(jié)的SRAM,包括常規(guī)的256字節(jié)RAM <idata> 和內(nèi)部擴(kuò)展的3840字節(jié) XRAM <xdata>
5.大容量片內(nèi)EEPROM,擦寫次數(shù)10萬次以上 EEPROM,擦寫次數(shù)10萬次以上,擦寫次數(shù)10萬次以上
6.ISP/IAP,在系統(tǒng)可編程/在應(yīng)用可編程,無需編程器/仿真器
7.共8通道10位高速ADC,速度可達(dá)30萬次/秒,8路PWM還可當(dāng)8路D/A使用
8.6通道15位專門的高精度PWM(帶死區(qū)控制)+2通道CCP(利用它的高速脈沖輸出功能可實(shí)現(xiàn)11~16位PWM)----可用來再實(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ī)引腳說明
單片機(jī)的40個(gè)引腳大致可分為4類:電源、時(shí)鐘、控制和I/O引腳。
⒈ 電源:
⑴ VCC - 芯片電源,接+5V;
⑵ VSS - 接地端;
⒉ 時(shí)鐘:XTAL1、XTAL2 - 晶體振蕩電路反相輸入端和輸出端。
⒊ 控制線:控制線共有4根,
⑴ ALE/PROG:地址鎖存允許/片內(nèi)EPROM編程脈沖
① ALE功能:用來鎖存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字符型液晶,它是一種專門用來顯示字母、數(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ì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(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)陣字符圖形顯示出來,我們就能看到字母“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 的指令說明及時(shí)序
1602 液晶模塊內(nèi)部的控制器共有11條控制指令。
控制命令表
序號(hào) | 指令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
1 | 清顯示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | ||
2 | 光標(biāo)返回 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | * | ||
3 | 置輸入模式 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | ||
4 | 顯示開/關(guān)控制 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | ||
5 | 光標(biāo)或字符移位 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | * | * | ||
6 | 置功能 | 0 | 0 | 0 | 0 | 1 | DL | N | F | * | * | ||
7 | 置字符發(fā)生存貯器地址 | 0 | 0 | 0 | 1 | 字符發(fā)生存貯器地址 | |||||||
8 | 置數(shù)據(jù)存貯器地址 | 0 | 0 | 1 | 顯示數(shù)據(jù)存貯器地址 | ||||||||
9 | 讀忙標(biāo)志或地址 | 0 | 1 | BF | 計(jì)數(shù)器地址 | ||||||||
10 | 寫數(shù)到CGRAM或DDRAM) | 1 | 0 | 要寫的數(shù)據(jù)內(nèi)容 | |||||||||
11 | 從CGRAM或DDRAM讀數(shù) | 1 | 1 | 讀出的數(shù)據(jù)內(nèi)容 |
1602 液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的。(說明: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:屏幕上所有文字是否 左移或者右移。高電平表示有效,低電平則無效。
指令 4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控 制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(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)右移的,無需人工 干預(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)陣字符圖形顯示出來,我們就能看到字母“A”。
1602LCD 的一般初始化(復(fù)位)過程
延時(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ù)雜一些,列線通過電阻接正電源,并將行線所接的單片機(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口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時(shí),采用矩陣法來做鍵盤是合理的。
矩陣鍵盤不僅在連接上比單獨(dú)式按鍵復(fù)雜,它的按鍵識(shí)別方法也比單獨(dú)式按鍵復(fù)雜。在矩陣鍵盤的軟件接口程序中,常使用的按鍵識(shí)別方法有行掃描法和線反轉(zhuǎn)法。這兩種方法的基本思路是采用循環(huán)查循的方法,反復(fù)查詢按鍵的狀態(tài),因此會(huì)大量占用MCU的時(shí)間,所以較好的方式也是采用狀態(tài)機(jī)的方法來設(shè)計(jì),盡量減少鍵盤查詢過程對(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)無按鍵閉合時(shí),P3.0~P3.3與P3.4~P3.7之間開路。當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條I/O口線之間短路。判斷有無按鍵按下的方法是:第一步,置列線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è)按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。
判斷閉合鍵所在的位置: 在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測(cè)各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
線反轉(zhuǎn)法:
Step 1:將列線作為輸出線,行線作為輸入線。置輸出線全部為0,此時(shí)行線中呈低電平0的為按鍵所在行,如果全部都不是0,則沒有按鍵按下。
Step 2:將第一步反過來,即將行線作為輸出線,列線作為輸入線。置輸出線全部為0,此時(shí)列線呈低電平的為按鍵所在的列。這樣,就可以確定了按鍵的位置(X,Y)。
鍵盤掃描方法:
鍵盤掃描方法是:行線P10~P13為輸出線,列線P14~P17為輸入線。一開始單片機(jī)將行線(P10~P13)全部輸出低電平,此時(shí)讀入列線數(shù)據(jù),若列線全為高電平則沒有鍵按下,當(dāng)列線有出現(xiàn)低電平時(shí)調(diào)用延時(shí)程序以此來去除按鍵抖動(dòng)。延時(shí)完成后再判斷是否有低電平,如果此時(shí)讀入列線數(shù)據(jù)還是有低電平,則說明確實(shí)有鍵按下。最后一步確定鍵值。以第二行的S5鍵為例,若按下S5后該怎么得到這個(gè)鍵值呢?當(dāng)判斷確實(shí)有鍵按下之后,行線輪流輸出低電平,根據(jù)讀入列線的數(shù)據(jù)可以確定鍵值。首先,單片機(jī)將P10輸出為低電平,其它P11~P13輸出高電平,此時(shí)讀取列線的數(shù)據(jù)全為高電平,說明沒有在第一行有鍵按下;其次,單片機(jī)將P11輸出低電平,其它P10、P12、P13仍為高電平,此時(shí)再來讀取列線數(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)行顯示無錯(cuò)誤,經(jīng)過在老師面前進(jìn)行實(shí)物操作,顯示該電子密碼鎖確實(shí)具有輸入,顯示,驗(yàn)證,修改密碼,重置密碼等功能。
單片機(jī)源程序如下:
所有資料51hei提供下載:
電子密碼鎖.rar
(1.58 MB, 下載次數(shù): 364)
發(fā)表于 2018-12-20 00:33
樓主,能分享我一份嗎!
素箋 發(fā)表于 2020-12-8 10:38
void Pin_Mode(void)
{
P0M1 = 0x00; P0M0 = 0x00;
囖推薦 發(fā)表于 2025-6-4 10:22
2.C(296): error C202: 'Port': undefined identifier
2.C(298): error C202: 'EN': undefined identifier ...
歡迎光臨 (http://m.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |