版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 . . . 屆 別 2010 學 號 3畢業(yè)設計基于C語言STC89C52單片機電子密碼鎖設計與仿真姓 名 系 別、專 業(yè) 物電系 導 師 姓 名、職 稱 講師 完 成 時 間 2010-5-1027 / 31目錄摘 要IABSTRACTII1 概述11.1電子密碼鎖的研究現狀與前景11.2電子密碼鎖的基本構件與優(yōu)點12 系統(tǒng)硬件構成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、仿真結果266結論26參考文獻27致 27摘 要密碼鎖是現代生活中經常用到的工具之一,常用于各類保險柜、房門、防盜門等。電子密碼鎖, 克服了傳統(tǒng)的機械式密碼鎖密碼量少、安全性能差的缺點。特別是使用微處理器制作的智能電子密碼鎖, 它除具有電子密碼鎖的功能外, 還可引入了智能化管理功能, 從而使密碼鎖具有更高的安全性和可靠性。本文介紹如何使用C語言編寫8051單片機程序,制作智能電子密碼鎖。系統(tǒng)由矩陣鍵盤、單片機系統(tǒng)、lcd顯示器和報警系統(tǒng)組成。該智能電子密碼鎖主要可由使用者自己設定一個6位數的密碼, 將密碼鎖上鎖。只有在按“PUT IN CODES”碼后12秒輸入和設定的密碼一樣時, 才能將鎖打
3、開,否則報警,報警后只有通過使用鑰匙才能打開并停止報警。為了保證密碼的更改方便與永久保存, 使用了存儲芯片,這樣, 在斷電條件下, 其部密碼數據則可保持100年不丟失。本程序已經在proteus仿真以與開發(fā)板用行成功。關鍵詞:電子密碼鎖;單片機;矩陣鍵盤;lcd顯示器;報警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 electronic
4、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 intelligent m
5、anagement feature tolet the code-lock possess a higher security and reliability. This article describes how to use the C language program 8051 to makethe intelligent electronic code-lock. The System consists of matrix keyboard, SCM system, lcd display and alarm system components. The intelligent ele
6、ctronic 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 same tim
7、e it stopping alarming. In order to ensure the convenience changing and permanent presevingof 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 already be
8、ensuccessful used in proteus-simulation, and development boards. Key words: Electronic Locks; Microcomputer; Matrix Keyboard; Lcd Monitor; Alarm1 概述1.1電子密碼鎖的研究現狀與前景電子密碼鎖是現代生活中常用的加密工具。它不克服了機械式密碼鎖密碼量少、安全性能差的缺點,尤其是微控制器的智能電子密碼鎖,不僅具有電子密碼鎖的功能,還可引入智能化管理功能,從而使密碼鎖具有更高的安全性和可靠性。當今的電子密碼鎖常使用arm1和單片機控制。單片機相對arm實現
9、較為簡單,功能較為完善,因此使用單片機控制較多。用單片機控制的密碼鎖常使用匯編語言編2寫程序,顯示器多數用數碼管3。而本文所介紹的電子密碼鎖使用移植性與可讀性強的高級語言C語言編寫,便于修改和增減功能;同時采用顯示清楚,功率消耗小而且壽命長的1602液晶顯示器,顯示更加直觀,使用更加方便。從經濟實用的角度出發(fā), 采用STC89C524單片機設計一種具有密碼設置、報警功能和防止多次試探密碼的電子密碼鎖所需成本很低。1.2電子密碼鎖的基本構件與優(yōu)點1.2.1 STC89C52的選擇STC89C525 是一種低功耗、高性能CMOS8位微控制器,具有8K可編程Flash存儲器。使用高密度非易失性存儲器
10、技術制造,與工業(yè)80C51 產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在線系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。具體特點如下:一、加密性強,很難解密或破解,解密費用很高、國能解密的人少.二、超強抗干擾: 三、超低功耗: 四、在系統(tǒng)可編程,無需編程器,可遠程升級 。五、STC單片機直接替換ATMEL,PHILIPS,Winbond等產品 。1.2.2液晶顯示模塊的選擇液晶是一種高分子材料,因為其特殊的物理、化學、光學特性,20世紀中葉開始廣泛應用在輕薄型顯示器
11、上。具有功耗低,顯示信息大,壽命長和抗干擾能力強等優(yōu)點,在低功耗的單片機系統(tǒng)中得到大量使用。液晶顯示模塊和鍵盤輸入模塊作為便攜式儀表的通用器件,在單片機系統(tǒng)的開發(fā)過程中也可以作為常用的程序和電路模塊進行整體設計。液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區(qū)域進行控制,有電就顯示黑色,這樣即可顯示出圖形。2 系統(tǒng)硬件構成2.1硬件電路主要芯片(MCS-52)2.1.1 MCS-51的引腳圖2.1.2電源與時鐘引腳1、電源引腳電源引腳接入單片機的工作電源。(1) Vcc(40腳):接+5V電源;(2) Vss(20腳):接地。2、時鐘引腳兩個時鐘引腳XTAL1、XTLA2外接晶體與片的反
12、向放大器構成了一個晶振器,它為單片機提供了時鐘控制信號。2個時鐘引腳也可外接晶體振蕩器。(1) XTAL1:接外部晶振一個引腳。該引腳是部反向放大器的輸入端,這個反向放大器構成了片振蕩器。(2) XTAL2:接外部晶振另一端,該引腳是部反向放大器的輸出端。采用外部時鐘振蕩器時,該引腳接收時鐘振蕩器的信號,即把此信號直接接到部時鐘發(fā)生器的輸入端。2.1.3 控制引腳1、RST/VPDRST該引腳是復位信號輸入端,高電平有效。當單片機運行時,若此引腳上的電壓持續(xù)保持兩個機器周期(24個時鐘振蕩周期)的高電平,單片機就會復位。當單片機正常工作時候應該保持為0.5V低電平。VPD為第9引腳第二功能,為
13、備用電源的輸入端。當主電源發(fā)生故障的時候,降低到某一規(guī)定的低電平時,將+5V電源自動接入RST端,為部RAM提供備用電源,這樣可以保證RAM的數據不會丟失,從而當單片機再次開機的時候能繼續(xù)正常運行。2、ALE/ALE為地址所存允許信號,當單片機正常工作后,ALE引腳不斷地輸出正脈沖信號。當訪問單片機外部存儲時,ALE輸出信號的負跳沿用作8位地址的鎖存信號。即使不訪問外部鎖存器,ALE仍有正脈沖信號輸出,此頻率為時鐘振蕩器頻率的1/6.但是,每當訪問外部數據存儲器時,在兩個機器周期中ALE只出現一次,即丟失一個ALE脈沖。因此,嚴格來說,用戶不宜用ALE作精細的時鐘或定時鐘或定時信號。ALE端可
14、以驅動8個TTL負載。如果想判斷單片機芯片的好壞,可以用示波器查看ALE端是否有正脈沖輸出。若有正脈沖輸出,那么單片機基本是正常的。為30腳第二功能。在對片EPROM型單片機編程寫入時,此引腳作為編程脈沖輸入端。3、程序存儲器允許輸出控制端。在單片機訪問外部程序存儲器時,此引腳輸出的負脈沖作為讀外部程序存儲器的選通信號。此引腳接外部程序存儲器的端??梢则寗?個LS型TTL負載。如果檢查一個MCS-51單片機應用系統(tǒng)上電后,CPU能否正常到外部程序存儲器讀取指令,也可以用示波器查端有無脈沖輸出,如果有脈沖輸出,那么說明單片機應用系統(tǒng)基本正常工作。4、/VPP、VPP為外程序存儲器選擇控制端。當端
15、為高電平時,單片機訪問部程序存儲器,但在PC(程序計數器)值超過4KB,將自動轉向執(zhí)行外部程序存儲器的程序。當保持低電平時,則只訪問外部程序存儲器,不論是否有外部程序存儲器。2.1.4 I/O口引腳(1)P0口:雙向8位三態(tài)I/O口,此口為地址總線(低8位)與數據總線分時復用口,可驅動8個TTL負載。(2) P1口:8位準雙向I/O口,可驅動4個TTL負載。(3) P2口:8位準雙向I/O口,與地址總線(高8位)復用,可以驅動4個TTL負載(4) P3口:8位準雙向I/O口,雙功能復用口,可以驅動4個TTL負載。P1口、P2口、P3口線片均有固定的上拉電阻,當這3個準雙向I/O口作輸入口使用時
16、,要向該口先寫“1”,另外準雙向I/O口無高阻態(tài)。P0口線無固定的上拉電阻,有兩個MOS管串接而成,即可以開漏輸出,又可以處于高阻態(tài)的“浮空”狀態(tài),稱之為雙向三態(tài)I/O口。2.2 1602液晶顯示液晶6是一種高分子材料,因為其特殊的物理、化學、光學特性,20世紀中葉開始廣泛應用在輕薄型顯示器上。它具有體積小、功耗低、顯示操作簡單等特點。2.2.1 1602接口信號說明如下圖 2.2.2 主要技術參數:2.2.3基本操作時序讀狀態(tài) 輸入: RS=L,R/W=H,E=H 輸出:D0D7=狀態(tài)字讀數據 輸入: RS=H,R/W=H,E=H 輸出:無寫指令 輸入: RS=L,R/W=L,E=高脈沖 輸
17、出:D0D7=數據寫數據 輸入: RS=H,R/W=L,E=高脈沖 輸出:無2.2.4 RAM地址映射圖控制器部帶有80B的RAM緩存區(qū),對應關系如下圖2.2.5.狀態(tài)字說明2.2.6.數據指針設置控制器部設有一個數據地址指針,用戶可以通過讓它們訪問部80B的RAM,如下圖:2.2.7 其他設置(如下圖)2.2.8 初始化設置(1)顯示模式設置(2)顯示/關與光標設置3 功能分析3.1 中斷51單片機部一共有5個中斷7源,也就是說,有5種情況發(fā)生時,會使單片機去處理中斷程序。對于單片機來說,中斷時CPU在處理某一件A時,發(fā)生了另外一件事B,請求CPU迅速處理(中斷發(fā)生);CPU暫時停止當前的工
18、作(中斷響應),轉去處理事情B(中斷服務);待CPU處理某一件事B完畢后,再回到原來事情A被中斷的地方繼續(xù)處理事情A(中斷返回),這一過程稱為中斷,其流程圖如下圖。主程序中斷響應執(zhí)行中斷請求中斷斷點處理程序繼續(xù)執(zhí)行程序中斷返回單片機中斷過程3.1.1 52單片機6個中斷源INT0外部中斷0,有P3.2端口引入,低電平或下降沿引起。 INT1外部中斷1,有P3.3端口引入,低電平或下降沿引起。 T0定時器、計數器0中斷,有T0計數滿后回零引起。 T1定時器、計數器1中斷,有T1計數滿后回零引起。T2定時器、計數器2中斷,有T2計數滿后回零引起。TI/RI串行口中斷,串行端口完成一幀字節(jié)符號發(fā)送、
19、接收后引起。3.1.2 中斷允許寄存器IE中斷允許寄存器用來設定各個中斷源的打開和關閉,IE在特殊功能寄存器中,字節(jié)地址為A8H,位地址(由低位到高位)分別是AS8HAFH,該寄存器可以進行位尋址,即可以對該寄存器的每一位進行單獨操作。單片機復位時全部清零,各位定義見下表:EA-全局中斷允許位;EA=1,打開全局中斷,在此條件下,由各個中斷控制位確定相應中斷的打開或關閉。3.1.3中斷優(yōu)先級寄存器IP中斷優(yōu)先級寄存器在特殊功能寄存器中,字節(jié)地址為B8H,位地址(由低位到高位)分別是B8HBFH,IP用來設定各個中斷源屬于兩級中斷的那一級。單片機復位時IP自動清零。各位定義如下表:(-為無效位)
20、3.1.4定時器/計數器工作方式寄存器TMOD 定時器/計數器工作方式寄存器在特殊功能寄存器中,字節(jié)地址為89H,不能位尋址,TOMD用來確定定時器的工作方式與其功能選擇。單片機復位時TMOD全部被清零。各位定義如下表:TOMD的高四位用于設置定時器1,低四位用于設置定時器0,對應四位的含義如下:GATE-門控制位。GATE=0,定時器/計時器啟動與停止僅受TCON寄存器TRX控制。GATE=1,定時器/計時器啟動與停止受TCON寄存器TRX和外部中斷共同控制。-定時器模式和計數器模式選擇位。=1,為計數模式;=0,為定時模式。M1M0-工作方式如下圖:定時器/計數器控制寄存器TCOND如下圖
21、:3.1.5計算定時器初值:定時器一旦啟動,它便在原來的數值上開始叫1計數,若在程序開始時,沒有設置TH0和TL0,它們的默認值為0,假設時鐘頻率為12Mz,12個時鐘周期為一個機器周期,那么此時機器周期就是1毫秒,計滿TH0和TL0就需要個數,再來一個脈沖計數器溢出,隨即向CPU申請中斷。因此溢出一次共需要65536毫秒,約等于65.5ms,如果我們要定時50ms的話,那么就需要先給TH0和TL0裝一個初值,在這個初值的基礎上計50000個數后,定時器溢出,此時剛好就是50ms中斷一次,當初值需定時1s時,我們寫程序時當產生20次50ms的定時器中斷后便認為是1s,這樣便可精確控制定時時間了
22、。3.1.6中斷服務程序的寫法void函數名()interrupt中斷號using工作組 中斷服務程序容通常定時器初始化過程如下:對TOMD賦值,以確定T0和T1的工作方式。計算初值,并將初值寫入TH0、TL0或TH1、HL1。中斷方式時,對IE賦值,開放中斷。是TR0或TR1位置,啟動定時器/計數器定時/或計數。3.2鍵盤鍵盤8分為編碼鍵盤和非編碼鍵盤。鍵盤上閉合的識別有專門的硬件編碼器實現,生產編碼號或鍵值的成為編碼鍵盤。靠軟件編寫程序識別的鍵盤稱為非編碼鍵盤,在單片機組成的各種系統(tǒng)中,用的最多的是非編碼鍵盤。3.2.1鍵盤輸入的特點鍵盤實質是一組按鍵開關的集合。通常,鍵盤所用開關為機械彈
23、性開關,均利用了機械觸點的合、斷作用。一個電壓信號通過機械觸點的斷開、閉合過程,其行線電壓輸出波形圖,如下:圖中t1和t3分別為按鍵的閉合和斷開過程的抖動時間(呈現一串負脈沖),抖動的時間長短與按鍵的機械特性有關,一般為5-10ms,t2為穩(wěn)定的閉合期,其時間由按鍵的動作所決定,一般為十分之一秒到幾秒,t0、t4為斷開期。3.2.2 按鍵的確定按鍵的閉合與否,反映在行線輸出電壓上就是呈現出高電平或低電平,如果為高電平表示斷開,低電平表示按鍵的閉合,所以通過對行線電平的高低狀態(tài)的檢測,便可確定按鍵是否按下。但是為了確保CPU對一次按鍵按下只識別一次,必須消除抖動。3.2.3如何消除抖動消除抖動分
24、為硬件消抖和軟件消抖,一般的情況下采用軟件消抖。在第一次檢測到有按鍵按下時,執(zhí)行延時程序,延時10ms,再次確定該鍵是否仍保持閉合狀態(tài),如果保持閉合狀態(tài)確定的確有鍵按下,從而消除了抖動。3.2.4矩陣鍵盤工作原理按鍵設置在行、列線點上,行、列線分別連接到按鍵開關的兩端。行線通過上拉電阻接到+5V電源上。當無按鍵按下時,行線處于高電平狀態(tài),當有鍵按下時,行線電平狀態(tài)將由與此線相連的列線電平決定。列線電平若為低電平,則行線電平為低;列線電平為高,則行線電平也為高。這是識別矩陣鍵盤是否按下關鍵。由于矩陣鍵盤中的行、列線為多鍵共用,各按鍵均影響該鍵所在的行和列的電平。因此各按鍵彼此將互相發(fā)生影響,所以
25、必須將行、列線信號線配合起來并作適當處理,這樣才能確定閉合鍵的具體位置。3.2.5按鍵的識別如上矩陣按鍵圖。當3好鍵被按下時,與此相連的行線電平將有與此鍵相連的列線電平決定,而行線電平在無按鍵按下時處于高電平狀態(tài)。如果所有的列線都處于高電平狀態(tài),那么按鍵是否按下,不會引起行線電平狀態(tài)的變化,行線始終為高電平。所以,讓所有的列線處于高電平是沒有辦法識別按鍵的。現在反過來,讓所有的列線處于低電平,很明顯,按鍵所在行電平將被接成低電平,根據此行電平的變化,便能判斷此行一定有鍵按下。但不能確定按下的鍵是3,因為,如果是將2、1或0之一按下,也會產生一樣的結果。所以,讓所有列線處于低電平只能得出某行有鍵
26、被按下的結論。為了進一步判斷到底是哪一列的鍵被按下,可在某一時刻只讓一條列線處于低電平,而其余所有列線都處于高電平狀態(tài)。當第一列為低電平,其余的各列都為高電平時,因為是3鍵被按下,所以第1行仍處于高電平狀態(tài);當第2列為低電平,其余的各列為高電平時,同樣發(fā)現第1行仍處于高電平狀態(tài)。直到讓第4列為低電平時因為是3號鍵被按下,所以第1行的電平將由高電平轉換到第4列所處的低電平,因此,確定第1行第4列交叉點處的鍵即3號鍵被按下。3.3C總線3.3.1C總線介紹傳統(tǒng)的單片機外圍電路擴展通常使用并行方式,即單片機與外圍電路器件用8根數據線進行數據交換,再加上一些地址、控制線,占用了單片機大量的引腳,這往往
27、不能接受。C總線9是一種用于IC之間連接的總線。它通過SDA和SCL兩根線與連接到總線上的器件之間傳送信息??偩€上每個節(jié)點都有一個固定的節(jié)點地址,根據地址識別每個器件,可以方便地構成多機系統(tǒng)和外圍電路的擴展。它的傳輸速率為100kb/ s總線的驅動能力為400pF.3.3.2C總線工作原理C總線進行數據傳送時,時鐘信號為高電平期間,數據線上的數據必須保持穩(wěn)定,只有在時鐘線上的信號為低電平期間,數據線上的高電平或低電平狀態(tài)才允許變化。起始和終止信號 :SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號。數據傳送格式:
28、每一個字節(jié)必須保證是8位長度。數據傳送時,先傳送最高位(MSB),每一個被傳送的字節(jié)后面都必須跟隨一位應答位(即一幀共有9位)。如果一段時間沒有收到從機的應答信號,則自動認為從機已正確接收到數據。3.3.3 EEPROM AT24C021AT24C02引腳功能AT24C02引腳各引腳功能:1,2,3(A0、A1、A2)可編程地址輸入端。4(GND)電源地。5(SDA)串行數據輸入/輸出端。6(SCL)串行時鐘輸入端。7(WP)寫保護輸入端,用于硬件數據保護。該引腳為低電平時,可以對整個存儲器進行正常的讀和寫操作;當為高電平時,存儲器只有讀操作功能,不能對改存儲器進行寫操作。8(Vcc)電源正端
29、。2、存儲結構與尋址AT24C02的存儲器容量為2KB,部分為32頁,每頁8B,操作時有兩種尋址方式:芯片尋址和片子地址尋址。(1) 芯片尋址。AT24C02的芯片地址為1010,其他的控制字格式為1010A2A1A0R/。其中A2,A1,A0為可編程地址選擇位。A2,A1,A0引腳接高、低電平后得到確定的三位編碼,與1010形成7位編碼。R/為芯片讀寫控制位,該位為0,表示對芯片進行寫操作;該位為1表示對芯片進行讀操作。(2) 片子地址尋址。芯片尋址可對部256B中的任意一個進行讀寫操作。4 程序分析#include <reg52.h>#define uchar unsigned
30、 char /宏定義#define uint unsigned intuchar code table="WELCOME "uchar data table1="PUT IN CODES " uchar data table3="STE CODES "void write_(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; sbit RW=P25; sbit sda=P12;sbit scl=P1
31、1;sbit wp=P10;sbit E=P26;char count1=0;uint numb,i; /定義uchar number, a,j,m,k,time=0;/*函數聲明*/void delay(uint); void write_dat(uchar);uchar keyscan(void);int consure();int besure();/*eeprom函數聲明*/void delay1();void start();void stop();void respons() ;void init();void write_byte(uchar date);uchar read_b
32、yte();uchar read_add(uchar address);void write_add(uchar address,uchar date);void delay2(uchar x);/*主函數*/ 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_add(31);delay2(100);b4=read_add(41);de
33、lay2(100);b5=read_add(51);delay2(100); i=0;P1=0xff;EA=0; /關閉總中斷ET0=0;/關閉定時器中斷0TR0=0;/關閉定時器0if(time=3) p1_3=0;/*寫命令*/ write_(0x38);/設置16*2顯示,5*7點陣,8位數據接口 write_(0x09); /開顯示并光標閃爍 write_(0x0c);/開顯示光標不顯示并光標不閃爍 write_(0x01);/清零 write_(0x80+0x05);for(number=0;number<7;number+)write_dat(tablenumber);del
34、ay(10); while(1) key=keyscan();/調用鍵盤掃描/*密碼控制*/ if(key=0xe7) write_(0x80+0x42); for(number=0;number<16;number+) write_dat(table1number);delay(5); delay(3000);key=keyscan();if(key!=0xe7) write_(0x38);/設置16*2顯示,5*7點陣 write_(0x09); /開顯示并光標閃爍 write_(0x0c);/開顯示光標不顯示并光標不閃爍 /write_(0x80); write_(0x01);/顯
35、示清屏*/ /*初始化中斷系統(tǒng)*/ TMOD=0x00;/設置定時器0為工作方式0(00000000)TH0=(8192-4607)/32;TL0=(8192-4607)%32;/賦初值EA=1; /開總中斷ET0=1;/開定時器中斷0 TR0=1;/啟動定時器0 while(1) a0=consure();if(a0=b0)while(1) a1=consure();if(a1=0x10) time=time+1;a1=0xff;goto loop;if(a1=b1)while(1)a2=consure();if(a2=0x10) time=time+1;a2=0xff;goto loop;
36、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(a5=b5) kot=keyscan(); if(kot=0xd7) p1_4=0;delay(200); key=keyscan(); if(
37、key=0xed) P1=0xff; write_(0x01);write_(0x80+0x43); for(number=0;number<16;number+) write_dat(table3number);delay(5); delay(3000);write_(0x01);write_(0x80+0x43);while(1)ket=keyscan();if(i>=6)goto loop; m=i*10+1;j=besure();write_add(m,j);if(ket=0xee) i+;delay(500); write_dat('*'); delay(
38、10);if(a0=0x10) time=time+1;a0=0xff;goto loop; /*LCD子函數*/void write_(uchar ) E=0; RS=0; RW=0; P0=; 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; /*矩陣鍵盤*/uchar keyscan(void)/鍵盤掃描函數,使用行列反轉掃描法 uchar cord_h,cord_l;/行列值 P3=0x0f; /行線輸出全為0 cord_
39、h=P3&0x0f; /讀入列線值 if(cord_h!=0x0f) /先檢測有無按鍵按下 delay(5); /去抖 if(cord_h!=0x0f) cord_h=P3&0x0f; /讀入列線值 P3=cord_h|0xf0; /輸出當前列線值 cord_l=P3&0xf0; /讀入行線值 return(cord_h+cord_l);/鍵盤最后組合碼值 return(0xff); /返回該值/*延時函數*/void delay(uint z) uint a,b; for(a=z;a>0;a-) for(b=110;b>0;b-);/*鍵盤確定函數*/in
40、t 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('*');numb=0x01;delay(1000);break;/1 case 0x7b:write_dat('*');numb=0x02;delay(10
41、00);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 case 0xbb:write_dat('*');numb=0x06;delay(1000);break;/6 case 0xb7:write_dat('*'
42、);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;break;/e return numb; int besure() int key; key=keyscan(); if(key=0x7e|0x7d|0x7b|0x77|0xbe|0xbd|
43、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');numb=0x02;delay(1000);break;/2 case 0x77:write_dat('3');numb=0x03;delay(1000);break
44、;/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:write_dat('7');numb=0x07;delay(1000);break;/7 case 0xde:write_dat('8');numb=0x
45、08;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) /定時20秒 p1_3=0;count1=0; TR0=0; TH0=(8192-4607)/32; /重新裝初值 TL0=(8192-4607)%32;/*eeprom*/void delay1() ; vo
46、id start() /開始信號sda=1;delay1();scl=1;delay1();sda=0;delay1();void stop() /停止sda=0; delay1();scl=1; delay1();sda=1; delay1();void respons() /應答uchar i;scl=1; delay1();while(sda=1)&&(i<250)i+;scl=0; delay1();/*初始化eeprom*/void init()sda=1;delay1();scl=1; delay1();void write_byte(uchar date)u
47、char 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;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度山地旅游道路建設用塊石供應合同3篇
- 2025年度校外心理咨詢服務合同范本3篇
- 二零二五年度KTV包間租賃與會員積分兌換合同3篇
- 二零二五年度建筑工地柴油供應合同范本3篇
- 二零二五年度房產購買貸款按揭合同范本(含綠化)3篇
- 二零二五年度9A條款離婚協(xié)議修訂版及解析2篇
- 二零二五年度農村集體土地房屋交易合同書3篇
- 2025年度皮鞋生產線worker培訓合同3篇
- 2025版?zhèn)鶛鄠鶆辙D讓及債務重組代理服務協(xié)議3篇
- 2025年度湖北省非物質文化遺產租賃合同3篇
- 基站外電引入建設指導意見
- 空調安裝和維修的培訓
- ??祱?zhí)法記錄儀解決方案
- 焊機安全技操作規(guī)程15篇
- 液化氣供應站安全管理制度和營業(yè)制度
- 高中學籍檔案卡
- CMS電子后視鏡遇見未來
- GB/T 397-2009煉焦用煤技術條件
- GB/T 21385-2008金屬密封球閥
- GB/T 18994-2003電子工業(yè)用氣體高純氯
- GB/T 13384-2008機電產品包裝通用技術條件
評論
0/150
提交評論