![基于C語言STC89C52單片機(jī)電子密碼鎖設(shè)計(jì)與仿真_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/4d3d8922-46fc-4e2c-ad45-970fe78a3070/4d3d8922-46fc-4e2c-ad45-970fe78a30701.gif)
![基于C語言STC89C52單片機(jī)電子密碼鎖設(shè)計(jì)與仿真_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/4d3d8922-46fc-4e2c-ad45-970fe78a3070/4d3d8922-46fc-4e2c-ad45-970fe78a30702.gif)
![基于C語言STC89C52單片機(jī)電子密碼鎖設(shè)計(jì)與仿真_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/4d3d8922-46fc-4e2c-ad45-970fe78a3070/4d3d8922-46fc-4e2c-ad45-970fe78a30703.gif)
![基于C語言STC89C52單片機(jī)電子密碼鎖設(shè)計(jì)與仿真_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/4d3d8922-46fc-4e2c-ad45-970fe78a3070/4d3d8922-46fc-4e2c-ad45-970fe78a30704.gif)
![基于C語言STC89C52單片機(jī)電子密碼鎖設(shè)計(jì)與仿真_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/2/4d3d8922-46fc-4e2c-ad45-970fe78a3070/4d3d8922-46fc-4e2c-ad45-970fe78a30705.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、屆 別 2010 學(xué) 號 200614060123畢業(yè)設(shè)計(jì)基于C語言STC89C52單片機(jī)電子密碼鎖設(shè)計(jì)與仿真 姓 名 系 別、 專 業(yè) 物電系 導(dǎo) 師 姓 名、職 稱 講師 完 成 時(shí) 間 2010-5-10 2目錄摘 要IABSTRACTII1 概述11.1電子密碼鎖的研究現(xiàn)狀及前景11.2電子密碼鎖的基本構(gòu)件及優(yōu)點(diǎn)12 系統(tǒng)硬件構(gòu)成22.1硬件電路主要芯片(MCS-52)22.2 1602液晶顯示43 功能分析63.1 中斷63.2鍵盤93.3C總線114 程序分析135 系統(tǒng)電路與Proteus仿真255.1Proteus簡介255.2仿真步驟255.3系統(tǒng)仿真電路(如下圖)255.4
2、 仿真結(jié)果266結(jié)論26參考文獻(xiàn)27致 謝27II摘 要密碼鎖是現(xiàn)代生活中經(jīng)常用到的工具之一,常用于各類保險(xiǎn)柜、房門、防盜門等。電子密碼鎖, 克服了傳統(tǒng)的機(jī)械式密碼鎖密碼量少、安全性能差的缺點(diǎn)。特別是使用微處理器制作的智能電子密碼鎖, 它除具有電子密碼鎖的功能外, 還可引入了智能化管理功能, 從而使密碼鎖具有更高的安全性和可靠性。本文介紹如何使用C語言編寫8051單片機(jī)程序,制作智能電子密碼鎖。系統(tǒng)由矩陣鍵盤、單片機(jī)系統(tǒng)、lcd顯示器和報(bào)警系統(tǒng)組成。該智能電子密碼鎖主要可由使用者自己設(shè)定一個(gè)6位數(shù)的密碼, 將密碼鎖上鎖。只有在按“PUT IN CODES”碼后12秒內(nèi)輸入和設(shè)定的密碼相同時(shí),
3、才能將鎖打開,否則報(bào)警,報(bào)警后只有通過使用鑰匙才能打開并停止報(bào)警。為了保證密碼的更改方便與永久保存, 使用了存儲(chǔ)芯片,這樣, 在斷電條件下, 其內(nèi)部密碼數(shù)據(jù)則可保持100年不丟失。本程序已經(jīng)在proteus仿真以及開發(fā)板用行成功。關(guān)鍵詞:電子密碼鎖;單片機(jī);矩陣鍵盤;lcd顯示器;報(bào)警ABSTRACTCode-Lock, one of the tools used in various types of insurance to resist, doors, security doors, is already extensively used in modern life.The elect
4、ronic lock replacing the traditional mechanical locks overcome the limited password number and the poor security of the mechanical lock. Particularly, the intelligent electronic lock produced by microprocessors, which, in addition with an electronic code lock function, but also introducing a intelli
5、gent management feature to let the code-lock possess a higher security and reliability. This article describes how to use the C language program 8051 to make the intelligent electronic code-lock. The System consists of matrix keyboard, SCM system, lcd display and alarm system components. The intelli
6、gent electronic lock provide the user to set a six-digit password himself and let the password lock locked. Only in accordance with "PUT IN CODES" yards input the right code within 12 seconds you can open the lock, or it will alarm, after which you can open the lock by key only and in the
7、same time it stopping alarming. In order to ensure the convenience changing and permanent preseving of the code we use the memory chips, so that when we are under the condition of interruption of power supply, its internal password data can be maintained without loss of 100 years. This program has a
8、lready been successful used in proteus-simulation, and development boards. Key words: Electronic Locks; Microcomputer; Matrix Keyboard; Lcd Monitor; Alarm1 概述1.1電子密碼鎖的研究現(xiàn)狀及前景電子密碼鎖是現(xiàn)代生活中常用的加密工具。它不克服了機(jī)械式密碼鎖密碼量少、安全性能差的缺點(diǎn),尤其是微控制器的智能電子密碼鎖,不僅具有電子密碼鎖的功能,還可引入智能化管理功能,從而使密碼鎖具有更高的安全性和可靠性。當(dāng)今的電子密碼鎖常使用arm1和單片機(jī)控制。
9、單片機(jī)相對arm實(shí)現(xiàn)較為簡單,功能較為完善,因此使用單片機(jī)控制較多。用單片機(jī)控制的密碼鎖常使用匯編語言編2寫程序,顯示器多數(shù)用數(shù)碼管3。而本文所介紹的電子密碼鎖使用移植性及可讀性強(qiáng)的高級語言C語言編寫,便于修改和增減功能;同時(shí)采用顯示清楚,功率消耗小而且壽命長的1602液晶顯示器,顯示更加直觀,使用更加方便。從經(jīng)濟(jì)實(shí)用的角度出發(fā), 采用STC89C524單片機(jī)設(shè)計(jì)一種具有密碼設(shè)置、報(bào)警功能和防止多次試探密碼的電子密碼鎖所需成本很低。1.2電子密碼鎖的基本構(gòu)件及優(yōu)點(diǎn)1.2.1 STC89C52的選擇STC89C525 是一種低功耗、高性能CMOS8位微控制器,具有8K可編程Flash存儲(chǔ)器。使用
10、高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在線系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。具體特點(diǎn)如下:一、加密性強(qiáng),很難解密或破解,解密費(fèi)用很高、國內(nèi)能解密的人少.二、超強(qiáng)抗干擾: 三、超低功耗: 四、在系統(tǒng)可編程,無需編程器,可遠(yuǎn)程升級 。五、STC單片機(jī)直接替換ATMEL,PHILIPS,Winbond等產(chǎn)品 。1.2.2液晶顯示模塊的選擇液晶是一種高分子材料,因?yàn)槠涮厥獾奈锢?、化學(xué)、光學(xué)特性,20世紀(jì)中葉開始
11、廣泛應(yīng)用在輕薄型顯示器上。具有功耗低,顯示信息大,壽命長和抗干擾能力強(qiáng)等優(yōu)點(diǎn),在低功耗的單片機(jī)系統(tǒng)中得到大量使用。液晶顯示模塊和鍵盤輸入模塊作為便攜式儀表的通用器件,在單片機(jī)系統(tǒng)的開發(fā)過程中也可以作為常用的程序和電路模塊進(jìn)行整體設(shè)計(jì)。液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區(qū)域進(jìn)行控制,有電就顯示黑色,這樣即可顯示出圖形。2 系統(tǒng)硬件構(gòu)成2.1硬件電路主要芯片(MCS-52)2.1.1 MCS-51的引腳圖2.1.2電源及時(shí)鐘引腳1、電源引腳電源引腳接入單片機(jī)的工作電源。(1) Vcc(40腳):接+5V電源;(2) Vss(20腳):接地。2、時(shí)鐘引腳兩個(gè)時(shí)鐘引腳XTAL1、XT
12、LA2外接晶體與片內(nèi)的反向放大器構(gòu)成了一個(gè)晶振器,它為單片機(jī)提供了時(shí)鐘控制信號。2個(gè)時(shí)鐘引腳也可外接晶體振蕩器。(1) XTAL1:接外部晶振一個(gè)引腳。該引腳是內(nèi)部反向放大器的輸入端,這個(gè)反向放大器構(gòu)成了片內(nèi)振蕩器。(2) XTAL2:接外部晶振另一端,該引腳是內(nèi)部反向放大器的輸出端。采用外部時(shí)鐘振蕩器時(shí),該引腳接收時(shí)鐘振蕩器的信號,即把此信號直接接到內(nèi)部時(shí)鐘發(fā)生器的輸入端。2.1.3 控制引腳1、RST/VPDRST該引腳是復(fù)位信號輸入端,高電平有效。當(dāng)單片機(jī)運(yùn)行時(shí),若此引腳上的電壓持續(xù)保持兩個(gè)機(jī)器周期(24個(gè)時(shí)鐘振蕩周期)的高電平,單片機(jī)就會(huì)復(fù)位。當(dāng)單片機(jī)正常工作時(shí)候應(yīng)該保持為0.5V低電
13、平。VPD為第9引腳第二功能,為備用電源的輸入端。當(dāng)主電源發(fā)生故障的時(shí)候,降低到某一規(guī)定的低電平時(shí),將+5V電源自動(dòng)接入RST端,為內(nèi)部RAM提供備用電源,這樣可以保證RAM的數(shù)據(jù)不會(huì)丟失,從而當(dāng)單片機(jī)再次開機(jī)的時(shí)候能繼續(xù)正常運(yùn)行。2、ALE/ALE為地址所存允許信號,當(dāng)單片機(jī)正常工作后,ALE引腳不斷地輸出正脈沖信號。當(dāng)訪問單片機(jī)外部存儲(chǔ)時(shí),ALE輸出信號的負(fù)跳沿用作8位地址的鎖存信號。即使不訪問外部鎖存器,ALE仍有正脈沖信號輸出,此頻率為時(shí)鐘振蕩器頻率的1/6.但是,每當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),在兩個(gè)機(jī)器周期中ALE只出現(xiàn)一次,即丟失一個(gè)ALE脈沖。因此,嚴(yán)格來說,用戶不宜用ALE作精細(xì)的
14、時(shí)鐘或定時(shí)鐘或定時(shí)信號。ALE端可以驅(qū)動(dòng)8個(gè)TTL負(fù)載。如果想判斷單片機(jī)芯片的好壞,可以用示波器查看ALE端是否有正脈沖輸出。若有正脈沖輸出,那么單片機(jī)基本是正常的。為30腳第二功能。在對片內(nèi)EPROM型單片機(jī)編程寫入時(shí),此引腳作為編程脈沖輸入端。3、程序存儲(chǔ)器允許輸出控制端。在單片機(jī)訪問外部程序存儲(chǔ)器時(shí),此引腳輸出的負(fù)脈沖作為讀外部程序存儲(chǔ)器的選通信號。此引腳接外部程序存儲(chǔ)器的端??梢则?qū)動(dòng)8個(gè)LS型TTL負(fù)載。如果檢查一個(gè)MCS-51單片機(jī)應(yīng)用系統(tǒng)上電后,CPU能否正常到外部程序存儲(chǔ)器讀取指令,也可以用示波器查端有無脈沖輸出,如果有脈沖輸出,那么說明單片機(jī)應(yīng)用系統(tǒng)基本正常工作。4、/VPP、
15、VPP為內(nèi)外程序存儲(chǔ)器選擇控制端。當(dāng)端為高電平時(shí),單片機(jī)訪問內(nèi)部程序存儲(chǔ)器,但在PC(程序計(jì)數(shù)器)值超過4KB,將自動(dòng)轉(zhuǎn)向執(zhí)行外部程序存儲(chǔ)器內(nèi)的程序。當(dāng)保持低電平時(shí),則只訪問外部程序存儲(chǔ)器,不論是否有外部程序存儲(chǔ)器。2.1.4 I/O口引腳(1)P0口:雙向8位三態(tài)I/O口,此口為地址總線(低8位)及數(shù)據(jù)總線分時(shí)復(fù)用口,可驅(qū)動(dòng)8個(gè)TTL負(fù)載。(2) P1口:8位準(zhǔn)雙向I/O口,可驅(qū)動(dòng)4個(gè)TTL負(fù)載。(3) P2口:8位準(zhǔn)雙向I/O口,與地址總線(高8位)復(fù)用,可以驅(qū)動(dòng)4個(gè)TTL負(fù)載(4) P3口:8位準(zhǔn)雙向I/O口,雙功能復(fù)用口,可以驅(qū)動(dòng)4個(gè)TTL負(fù)載。P1口、P2口、P3口線片內(nèi)均有固定的上
16、拉電阻,當(dāng)這3個(gè)準(zhǔn)雙向I/O口作輸入口使用時(shí),要向該口先寫“1”,另外準(zhǔn)雙向I/O口無高阻態(tài)。P0口線內(nèi)無固定的上拉電阻,有兩個(gè)MOS管串接而成,即可以開漏輸出,又可以處于高阻態(tài)的“浮空”狀態(tài),稱之為雙向三態(tài)I/O口。2.2 1602液晶顯示液晶6是一種高分子材料,因?yàn)槠涮厥獾奈锢?、化學(xué)、光學(xué)特性,20世紀(jì)中葉開始廣泛應(yīng)用在輕薄型顯示器上。它具有體積小、功耗低、顯示操作簡單等特點(diǎn)。2.2.1 1602接口信號說明如下圖 2.2.2 主要技術(shù)參數(shù):2.2.3基本操作時(shí)序讀狀態(tài) 輸入: RS=L,R/W=H,E=H 輸出:D0D7=狀態(tài)字讀數(shù)據(jù) 輸入: RS=H,R/W=H,E=H 輸出:無寫指令
17、 輸入: RS=L,R/W=L,E=高脈沖 輸出:D0D7=數(shù)據(jù)寫數(shù)據(jù) 輸入: RS=H,R/W=L,E=高脈沖 輸出:無2.2.4 RAM地址映射圖控制器內(nèi)部帶有80B的RAM緩存區(qū),對應(yīng)關(guān)系如下圖2.2.5.狀態(tài)字說明2.2.6.數(shù)據(jù)指針設(shè)置控制器內(nèi)部設(shè)有一個(gè)數(shù)據(jù)地址指針,用戶可以通過讓它們訪問內(nèi)部80B的RAM,如下圖:2.2.7 其他設(shè)置(如下圖)2.2.8 初始化設(shè)置(1)顯示模式設(shè)置(2)顯示/關(guān)及光標(biāo)設(shè)置3 功能分析3.1 中斷51單片機(jī)內(nèi)部一共有5個(gè)中斷7源,也就是說,有5種情況發(fā)生時(shí),會(huì)使單片機(jī)去處理中斷程序。對于單片機(jī)來說,中斷時(shí)CPU在處理某一件A時(shí),發(fā)生了另外一件事B,
18、請求CPU迅速處理(中斷發(fā)生);CPU暫時(shí)停止當(dāng)前的工作(中斷響應(yīng)),轉(zhuǎn)去處理事情B(中斷服務(wù));待CPU處理某一件事B完畢后,再回到原來事情A被中斷的地方繼續(xù)處理事情A(中斷返回),這一過程稱為中斷,其流程圖如下圖。主程序中斷響應(yīng)執(zhí)行中斷請求中斷斷點(diǎn)處理程序繼續(xù)執(zhí)行程序中斷返回單片機(jī)中斷過程3.1.1 52單片機(jī)6個(gè)中斷源INT0外部中斷0,有P3.2端口引入,低電平或下降沿引起。 INT1外部中斷1,有P3.3端口引入,低電平或下降沿引起。 T0定時(shí)器、計(jì)數(shù)器0中斷,有T0計(jì)數(shù)滿后回零引起。 T1定時(shí)器、計(jì)數(shù)器1中斷,有T1計(jì)數(shù)滿后回零引起。T2定時(shí)器、計(jì)數(shù)器2中斷,有T2計(jì)數(shù)滿后回零引起
19、。TI/RI串行口中斷,串行端口完成一幀字節(jié)符號發(fā)送、接收后引起。3.1.2 中斷允許寄存器IE中斷允許寄存器用來設(shè)定各個(gè)中斷源的打開和關(guān)閉,IE在特殊功能寄存器中,字節(jié)地址為A8H,位地址(由低位到高位)分別是AS8HAFH,該寄存器可以進(jìn)行位尋址,即可以對該寄存器的每一位進(jìn)行單獨(dú)操作。單片機(jī)復(fù)位時(shí)全部清零,各位定義見下表:EA-全局中斷允許位;EA=1,打開全局中斷,在此條件下,由各個(gè)中斷控制位確定相應(yīng)中斷的打開或關(guān)閉。3.1.3中斷優(yōu)先級寄存器IP中斷優(yōu)先級寄存器在特殊功能寄存器中,字節(jié)地址為B8H,位地址(由低位到高位)分別是B8HBFH,IP用來設(shè)定各個(gè)中斷源屬于兩級中斷的那一級。單
20、片機(jī)復(fù)位時(shí)IP自動(dòng)清零。各位定義如下表:(-為無效位)3.1.4定時(shí)器/計(jì)數(shù)器工作方式寄存器TMOD 定時(shí)器/計(jì)數(shù)器工作方式寄存器在特殊功能寄存器中,字節(jié)地址為89H,不能位尋址,TOMD用來確定定時(shí)器的工作方式及其功能選擇。單片機(jī)復(fù)位時(shí)TMOD全部被清零。各位定義如下表:TOMD的高四位用于設(shè)置定時(shí)器1,低四位用于設(shè)置定時(shí)器0,對應(yīng)四位的含義如下:GATE-門控制位。GATE=0,定時(shí)器/計(jì)時(shí)器啟動(dòng)與停止僅受TCON寄存器TRX控制。GATE=1,定時(shí)器/計(jì)時(shí)器啟動(dòng)與停止受TCON寄存器TRX和外部中斷共同控制。-定時(shí)器模式和計(jì)數(shù)器模式選擇位。=1,為計(jì)數(shù)模式;=0,為定時(shí)模式。M1M0-工
21、作方式如下圖:定時(shí)器/計(jì)數(shù)器控制寄存器TCOND如下圖:3.1.5計(jì)算定時(shí)器初值:定時(shí)器一旦啟動(dòng),它便在原來的數(shù)值上開始叫1計(jì)數(shù),若在程序開始時(shí),沒有設(shè)置TH0和TL0,它們的默認(rèn)值為0,假設(shè)時(shí)鐘頻率為12Mz,12個(gè)時(shí)鐘周期為一個(gè)機(jī)器周期,那么此時(shí)機(jī)器周期就是1毫秒,計(jì)滿TH0和TL0就需要個(gè)數(shù),再來一個(gè)脈沖計(jì)數(shù)器溢出,隨即向CPU申請中斷。因此溢出一次共需要65536毫秒,約等于65.5ms,如果我們要定時(shí)50ms的話,那么就需要先給TH0和TL0裝一個(gè)初值,在這個(gè)初值的基礎(chǔ)上計(jì)50000個(gè)數(shù)后,定時(shí)器溢出,此時(shí)剛好就是50ms中斷一次,當(dāng)初值需定時(shí)1s時(shí),我們寫程序時(shí)當(dāng)產(chǎn)生20次50ms
22、的定時(shí)器中斷后便認(rèn)為是1s,這樣便可精確控制定時(shí)時(shí)間了。3.1.6中斷服務(wù)程序的寫法void函數(shù)名()interrupt中斷號using工作組 中斷服務(wù)程序內(nèi)容通常定時(shí)器初始化過程如下:對TOMD賦值,以確定T0和T1的工作方式。計(jì)算初值,并將初值寫入TH0、TL0或TH1、HL1。中斷方式時(shí),對IE賦值,開放中斷。是TR0或TR1位置,啟動(dòng)定時(shí)器/計(jì)數(shù)器定時(shí)/或計(jì)數(shù)。3.2鍵盤鍵盤8分為編碼鍵盤和非編碼鍵盤。鍵盤上閉合的識(shí)別有專門的硬件編碼器實(shí)現(xiàn),生產(chǎn)編碼號或鍵值的成為編碼鍵盤??寇浖帉懗绦蜃R(shí)別的鍵盤稱為非編碼鍵盤,在單片機(jī)組成的各種系統(tǒng)中,用的最多的是非編碼鍵盤。3.2.1鍵盤輸入的特點(diǎn)
23、鍵盤實(shí)質(zhì)是一組按鍵開關(guān)的集合。通常,鍵盤所用開關(guān)為機(jī)械彈性開關(guān),均利用了機(jī)械觸點(diǎn)的合、斷作用。一個(gè)電壓信號通過機(jī)械觸點(diǎn)的斷開、閉合過程,其行線電壓輸出波形圖,如下:圖中t1和t3分別為按鍵的閉合和斷開過程的抖動(dòng)時(shí)間(呈現(xiàn)一串負(fù)脈沖),抖動(dòng)的時(shí)間長短與按鍵的機(jī)械特性有關(guān),一般為5-10ms,t2為穩(wěn)定的閉合期,其時(shí)間由按鍵的動(dòng)作所決定,一般為十分之一秒到幾秒,t0、t4為斷開期。3.2.2 按鍵的確定按鍵的閉合與否,反映在行線輸出電壓上就是呈現(xiàn)出高電平或低電平,如果為高電平表示斷開,低電平表示按鍵的閉合,所以通過對行線電平的高低狀態(tài)的檢測,便可確定按鍵是否按下。但是為了確保CPU對一次按鍵按下只
24、識(shí)別一次,必須消除抖動(dòng)。3.2.3如何消除抖動(dòng)消除抖動(dòng)分為硬件消抖和軟件消抖,一般的情況下采用軟件消抖。在第一次檢測到有按鍵按下時(shí),執(zhí)行延時(shí)程序,延時(shí)10ms,再次確定該鍵是否仍保持閉合狀態(tài),如果保持閉合狀態(tài)確定的確有鍵按下,從而消除了抖動(dòng)。3.2.4矩陣鍵盤工作原理按鍵設(shè)置在行、列線點(diǎn)上,行、列線分別連接到按鍵開關(guān)的兩端。行線通過上拉電阻接到+5V電源上。當(dāng)無按鍵按下時(shí),行線處于高電平狀態(tài),當(dāng)有鍵按下時(shí),行線電平狀態(tài)將由與此線相連的列線電平?jīng)Q定。列線電平若為低電平,則行線電平為低;列線電平為高,則行線電平也為高。這是識(shí)別矩陣鍵盤是否按下關(guān)鍵。由于矩陣鍵盤中的行、列線為多鍵共用,各按鍵均影響該
25、鍵所在的行和列的電平。因此各按鍵彼此將互相發(fā)生影響,所以必須將行、列線信號線配合起來并作適當(dāng)處理,這樣才能確定閉合鍵的具體位置。3.2.5按鍵的識(shí)別如上矩陣按鍵圖。當(dāng)3好鍵被按下時(shí),與此相連的行線電平將有與此鍵相連的列線電平?jīng)Q定,而行線電平在無按鍵按下時(shí)處于高電平狀態(tài)。如果所有的列線都處于高電平狀態(tài),那么按鍵是否按下,不會(huì)引起行線電平狀態(tài)的變化,行線始終為高電平。所以,讓所有的列線處于高電平是沒有辦法識(shí)別按鍵的。現(xiàn)在反過來,讓所有的列線處于低電平,很明顯,按鍵所在行電平將被接成低電平,根據(jù)此行電平的變化,便能判斷此行一定有鍵按下。但不能確定按下的鍵是3,因?yàn)椋绻菍?、1或0之一按下,也會(huì)產(chǎn)
26、生相同的結(jié)果。所以,讓所有列線處于低電平只能得出某行有鍵被按下的結(jié)論。為了進(jìn)一步判斷到底是哪一列的鍵被按下,可在某一時(shí)刻只讓一條列線處于低電平,而其余所有列線都處于高電平狀態(tài)。當(dāng)?shù)谝涣袨榈碗娖剑溆嗟母髁卸紴楦唠娖綍r(shí),因?yàn)槭?鍵被按下,所以第1行仍處于高電平狀態(tài);當(dāng)?shù)?列為低電平,其余的各列為高電平時(shí),同樣發(fā)現(xiàn)第1行仍處于高電平狀態(tài)。直到讓第4列為低電平時(shí)因?yàn)槭?號鍵被按下,所以第1行的電平將由高電平轉(zhuǎn)換到第4列所處的低電平,因此,確定第1行第4列交叉點(diǎn)處的鍵即3號鍵被按下。3.3C總線3.3.1C總線介紹傳統(tǒng)的單片機(jī)外圍電路擴(kuò)展通常使用并行方式,即單片機(jī)與外圍電路器件用8根數(shù)據(jù)線進(jìn)行數(shù)據(jù)交換
27、,再加上一些地址、控制線,占用了單片機(jī)大量的引腳,這往往不能接受。C總線9是一種用于IC之間連接的總線。它通過SDA和SCL兩根線與連接到總線上的器件之間傳送信息??偩€上每個(gè)節(jié)點(diǎn)都有一個(gè)固定的節(jié)點(diǎn)地址,根據(jù)地址識(shí)別每個(gè)器件,可以方便地構(gòu)成多機(jī)系統(tǒng)和外圍電路的擴(kuò)展。它的傳輸速率為100kb/ s總線的驅(qū)動(dòng)能力為400pF.3.3.2 C總線工作原理C總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線上的信號為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。 起始和終止信號 :SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間
28、,SDA線由低電平向高電平的變化表示終止信號。數(shù)據(jù)傳送格式:每一個(gè)字節(jié)必須保證是8位長度。數(shù)據(jù)傳送時(shí),先傳送最高位(MSB),每一個(gè)被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一幀共有9位)。如果一段時(shí)間內(nèi)沒有收到從機(jī)的應(yīng)答信號,則自動(dòng)認(rèn)為從機(jī)已正確接收到數(shù)據(jù)。 3.3.3 EEPROM AT24C021AT24C02引腳功能AT24C02引腳各引腳功能:1,2,3(A0、A1、A2)可編程地址輸入端。4(GND)電源地。5(SDA)串行數(shù)據(jù)輸入/輸出端。6(SCL)串行時(shí)鐘輸入端。7(WP)寫保護(hù)輸入端,用于硬件數(shù)據(jù)保護(hù)。該引腳為低電平時(shí),可以對整個(gè)存儲(chǔ)器進(jìn)行正常的讀和寫操作;當(dāng)為高電平時(shí),存儲(chǔ)
29、器只有讀操作功能,不能對改存儲(chǔ)器進(jìn)行寫操作。8(Vcc)電源正端。2、存儲(chǔ)結(jié)構(gòu)與尋址AT24C02的存儲(chǔ)器容量為2KB,內(nèi)部分為32頁,每頁8B,操作時(shí)有兩種尋址方式:芯片尋址和片內(nèi)子地址尋址。(1) 芯片尋址。AT24C02的芯片地址為1010,其他的控制字格式為1010A2A1A0R/。其中A2,A1,A0為可編程地址選擇位。A2,A1,A0引腳接高、低電平后得到確定的三位編碼,與1010形成7位編碼。R/為芯片讀寫控制位,該位為0,表示對芯片進(jìn)行寫操作;該位為1表示對芯片進(jìn)行讀操作。(2) 片內(nèi)子地址尋址。芯片尋址可對內(nèi)部256B中的任意一個(gè)進(jìn)行讀寫操作。4 程序分析#include &
30、lt;reg52.h>#define uchar unsigned char /宏定義#define uint unsigned intuchar code table="WELCOME "uchar data table1="PUT IN CODES " uchar data table3="STE CODES "void write_com(uchar); uchar a0,a1,a2,a3,a4,a5,b0,b1,b2,b3,b4,b5;sbit p1_4=P14;/位聲明sbit p1_3=P13;sbit RS=P24
31、; sbit RW=P25; sbit sda=P12;sbit scl=P11;sbit wp=P10;sbit E=P26;char count1=0;uint numb,i; /定義uchar number, a,j,m,k,time=0;/*函數(shù)聲明*/void delay(uint); void write_dat(uchar);uchar keyscan(void);int consure();int besure();/*eeprom函數(shù)聲明*/void delay1();void start();void stop();void respons() ;void init();v
32、oid write_byte(uchar date);uchar read_byte();uchar read_add(uchar address);void write_add(uchar address,uchar date);void delay2(uchar x);/*主函數(shù)*/ void main() uint key,ket,kot; int i;init();loop:/返回位置/*eeprom讀取*/b0=read_add(1);delay2(100);b1=read_add(11);delay2(100);b2=read_add(21);delay2(100);b3=read
33、_add(31);delay2(100);b4=read_add(41);delay2(100);b5=read_add(51);delay2(100); i=0;P1=0xff;EA=0; /關(guān)閉總中斷ET0=0;/關(guān)閉定時(shí)器中斷0TR0=0;/關(guān)閉定時(shí)器0if(time=3) p1_3=0;/*寫命令*/ write_com(0x38);/設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口 write_com(0x09); /開顯示并光標(biāo)閃爍 write_com(0x0c);/開顯示光標(biāo)不顯示并光標(biāo)不閃爍 write_com(0x01);/清零 write_com(0x80+0x05);for(n
34、umber=0;number<7;number+)write_dat(tablenumber);delay(10); while(1) key=keyscan();/調(diào)用鍵盤掃描/*密碼控制*/ if(key=0xe7) write_com(0x80+0x42); for(number=0;number<16;number+) write_dat(table1number);delay(5); delay(3000);key=keyscan();if(key!=0xe7) write_com(0x38);/設(shè)置16*2顯示,5*7點(diǎn)陣 write_com(0x09); /開顯示并光
35、標(biāo)閃爍 write_com(0x0c);/開顯示光標(biāo)不顯示并光標(biāo)不閃爍 /write_com(0x80); write_com(0x01);/顯示清屏*/ /*初始化中斷系統(tǒng)*/ TMOD=0x00;/設(shè)置定時(shí)器0為工作方式0(00000000)TH0=(8192-4607)/32;TL0=(8192-4607)%32;/賦初值EA=1; /開總中斷ET0=1;/開定時(shí)器中斷0 TR0=1;/啟動(dòng)定時(shí)器0 while(1) a0=consure();if(a0=b0)while(1) a1=consure();if(a1=0x10) time=time+1;a1=0xff;goto loop;
36、if(a1=b1)while(1)a2=consure();if(a2=0x10) time=time+1;a2=0xff;goto loop;if(a2=b2) while(1) a3=consure(); if(a3=0x10) time=time+1;a3=0xff;goto loop; if(a3=b3)while(1)a4=consure();if(a4=0x10) time=time+1; a4=0xff;goto loop;if(a4=b4);while(1) a5=consure(); if(a5=0x10) time=time+1;a5=0xff;goto loop; if(
37、a5=b5) kot=keyscan(); if(kot=0xd7) p1_4=0;delay(200); key=keyscan(); if(key=0xed) P1=0xff; write_com(0x01);write_com(0x80+0x43); for(number=0;number<16;number+) write_dat(table3number);delay(5); delay(3000);write_com(0x01);write_com(0x80+0x43);while(1)ket=keyscan();if(i>=6)goto loop; m=i*10+1;
38、j=besure();write_add(m,j);if(ket=0xee) i+;delay(500); write_dat('*'); delay(10);if(a0=0x10) time=time+1;a0=0xff;goto loop; /*LCD子函數(shù)*/void write_com(uchar com) E=0; RS=0; RW=0; P0=com; delay(5); E=1; delay(5); E=0;void write_dat(uchar dat) E=0; RW=0;RS=1; P0=dat; delay(5); E=1; delay(5);E=0;
39、/*矩陣鍵盤*/uchar keyscan(void)/鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法 uchar cord_h,cord_l;/行列值 P3=0x0f; /行線輸出全為0 cord_h=P3&0x0f; /讀入列線值 if(cord_h!=0x0f) /先檢測有無按鍵按下 delay(5); /去抖 if(cord_h!=0x0f) cord_h=P3&0x0f; /讀入列線值 P3=cord_h|0xf0; /輸出當(dāng)前列線值 cord_l=P3&0xf0; /讀入行線值 return(cord_h+cord_l);/鍵盤最后組合碼值 return(0xff); /
40、返回該值/*延時(shí)函數(shù)*/void delay(uint z) uint a,b; for(a=z;a>0;a-) for(b=110;b>0;b-);/*鍵盤確定函數(shù)*/int consure() int key; key=keyscan(); if(key=0x7e|0x7d|0x7b|0x77|0xbe|0xbd|0xbb|0xb7|0xde|0xdd) key=keyscan(); switch(key) case 0x7e:write_dat('*');numb=0x00;delay(1000);break;/0 case 0x7d:write_dat(
41、39;*');numb=0x01;delay(1000);break;/1 case 0x7b:write_dat('*');numb=0x02;delay(1000);break;/2 case 0x77:write_dat('*');numb=0x03;delay(1000);break;/3 case 0xbe:write_dat('*');numb=0x04;delay(1000);break;/4 case 0xbd:write_dat('*');numb=0x05;delay(1000);break;/5 ca
42、se 0xbb:write_dat('*');numb=0x06;delay(1000);break;/6 case 0xb7:write_dat('*');numb=0x07;delay(1000);break;/7 case 0xde:write_dat('*');numb=0x08;delay(1000);break;/8 case 0xdd:write_dat('*');numb=0x09;delay(1000);break;/9 case 0xeb:write_dat('b');numb=0x10;bre
43、ak;/e return numb; int besure() int key; key=keyscan(); if(key=0x7e|0x7d|0x7b|0x77|0xbe|0xbd|0xbb|0xb7|0xde|0xdd) key=keyscan(); switch(key) case 0x7e:write_dat('0');numb=0x00;delay(1000);break;/0 case 0x7d:write_dat('1');numb=0x01;delay(1000);break;/1 case 0x7b:write_dat('2'
44、);numb=0x02;delay(1000);break;/2 case 0x77:write_dat('3');numb=0x03;delay(1000);break;/3 case 0xbe:write_dat('4');numb=0x04;delay(1000);break;/4 case 0xbd:write_dat('5');numb=0x05;delay(1000);break;/5 case 0xbb:write_dat('6');numb=0x06;delay(1000);break;/6 case 0xb7:w
45、rite_dat('7');numb=0x07;delay(1000);break;/7 case 0xde:write_dat('8');numb=0x08;delay(1000);break;/8 case 0xdd:write_dat('9');numb=0x09;delay(1000);break;/9 return numb;/*中斷系統(tǒng)*/void Timer0() interrupt 1static count1=0; count1+;if(count1>=4000&&p1_4!=0) /定時(shí)20秒 p1_3=
46、0;count1=0; TR0=0; TH0=(8192-4607)/32; /重新裝初值 TL0=(8192-4607)%32;/*eeprom*/void delay1() ; void start() /開始信號sda=1;delay1();scl=1;delay1();sda=0;delay1();void stop() /停止sda=0; delay1();scl=1; delay1();sda=1; delay1();void respons() /應(yīng)答uchar i;scl=1; delay1();while(sda=1)&&(i<250)i+;scl=0;
47、 delay1();/*初始化eeprom*/void init()sda=1;delay1();scl=1; delay1();void write_byte(uchar date)uchar i,temp;temp=date;for(i=0;i<8;i+)temp=temp<<1; scl=0; delay1(); sda=CY; delay1();scl=1; delay1();scl=0; delay1();sda=1; delay1();uchar read_byte()uchar i,k;scl=0; delay1();sda=1; delay1();for(i=0;i<8;i+)scl=1; delay1();k=(k<<1)|sda;scl=0; delay1(); return k;void delay2(uchar x)uchar a,b;for(a=x;a>0;a-) for(b=100;b&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 買房車購車合同范例
- 代發(fā)快遞服務(wù)合同范本
- 2025年度環(huán)保技術(shù)研發(fā)與應(yīng)用合作合同
- 2025年度國際物流信息平臺(tái)進(jìn)口與實(shí)施合同
- 兄弟合伙生意合同范本
- 城市中等裝修房屋出租合同范本
- 入股代理合同范本
- 關(guān)于砂石購買標(biāo)準(zhǔn)合同范本
- 出版社教材出版合同范本
- 2025年食品級甘氨酸鈉項(xiàng)目投資可行性研究分析報(bào)告
- 政府資金項(xiàng)目(榮譽(yù))申報(bào)獎(jiǎng)勵(lì)辦法
- JJF 1069-2012 法定計(jì)量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
- 最新如何進(jìn)行隔代教育專業(yè)知識(shí)講座課件
- 當(dāng)前警察職務(wù)犯罪的特征、原因及防范,司法制度論文
- 計(jì)算機(jī)文化基礎(chǔ)單元設(shè)計(jì)-windows
- 創(chuàng)建動(dòng)物保護(hù)家園-完整精講版課件
- 廣東省保安服務(wù)監(jiān)管信息系統(tǒng)用戶手冊(操作手冊)
- DNA 親子鑒定手冊 模板
- DB33T 1233-2021 基坑工程地下連續(xù)墻技術(shù)規(guī)程
- 天津 建設(shè)工程委托監(jiān)理合同(示范文本)
- 部編一年級語文下冊教材分析
評論
0/150
提交評論