電子密碼鎖按照輸入密碼方式的不同可分為好多種,其中最常用的一種是用數(shù)字鍵盤輸入密碼的電子密碼鎖。這一講主要介紹用ATmega8和LCD1602液晶顯示器等組成的電子密碼鎖,這個電子密碼鎖能夠由用戶自行修改密碼,掉電后密碼不丟失。通過實驗和學習使大家掌握電子密碼鎖的工作原理和ATmega8中EEPROM存儲器的使用方法。
一,EEPROM數(shù)據(jù)存儲器簡介ATmega8的存儲器由可分別獨立尋址的程序存儲器Flash、片內(nèi)數(shù)據(jù)存儲器SRAM和EEPROM三部分組成。
ATmega8包含512字節(jié)的EEPROM數(shù)據(jù)存儲器,可用于保存系統(tǒng)的設定參數(shù)、掉電后數(shù)據(jù)保存等。EEPROM可以按字節(jié)為單位進行讀寫,至少可進行100000次擦寫操作。EEPROM的訪問由地址寄存器、數(shù)據(jù)寄存器和控制寄存器決定。
在程序中EEPROM的訪問是通過I/O空間的寄存器來實現(xiàn)的,EEPROM的編程時間典型值為8.5ms。
為了防止無意的EEPROM寫入,必須遵照規(guī)范的寫入順序。當讀取EEPROM時,單片機將暫停4個時鐘周期再執(zhí)行下一條指令;當寫EEPROM時,單片機將暫停2個時鐘周期再執(zhí)行下一條指令。
下面介紹與EEPROM相關的幾個寄存器。
1.EEPROM地址寄存器
EEARH、EEARL因為ATmega8有512(2的9次方)字節(jié)的EEPROM,所以要用兩個8位寄存器來作地址寄存器,編址為0x0000~0x01FF。地址寄存器EEAR可讀可寫,EEAR的初始值沒有定義,在訪問EEPROM之前必須寫入一個正確的地址值。
EEAR的定義見下表。
2.EEPROM數(shù)據(jù)寄存器
EEDR數(shù)據(jù)寄存器EEDR用來存放即將寫入EEPROM或者從EEPROM讀出的某個單元的數(shù)據(jù),寫入或讀出的地址由地址寄存器EEAR給出。EEDR的初始值為0x00。
3.EEPROM控制寄存器EECREECR的定義見下表。
EERIE位為EEPROM中斷準備好使能位,當EERIE置位而且SREG寄存器中的全局中斷位I置位時,若EEWE為0,則單片機產(chǎn)生一個中斷。
EEMWE位為EEPROM主機寫入使能位,EEMWE決定了EEWE置位是否可以啟動EEPROM寫操作。當EEMWE為置位時,在4個時鐘周期內(nèi)EEWE置位將把數(shù)據(jù)寫入EEPROM的指定地址;若EEMWE為0,則操作EEWE不起作用。EEMWE置位后4個周期,硬件對其清零。
EEWE位為EEPROM寫使能位,當EEPROM數(shù)據(jù)和地址設置好之后,需置位EEWE以便將數(shù)據(jù)寫入EEPROM。此時EEMWE必須置位,否則EEPROM寫操作將不會發(fā)生。寫時序如下:
(1)等待EEWE位變?yōu)榱恪?/p>
(2)將新的EEPROM地址寫入EEAR(可選)。
(3)將新的EEPROM數(shù)據(jù)寫入EEDR(可選)。
(4)置位EEMWE。
(5)在置位EEMWE的4個周期內(nèi),置位EEWE。
EERE位為EEPROM讀使能位,當EEPROM地址設置好之后,需置位EERE以便將數(shù)據(jù)讀入EEDR。
EEPROM數(shù)據(jù)的讀取只需要一條指令。讀取EEPROM后CPU要停止4個時鐘周期才可以執(zhí)行下一條指令。
二、電子密碼鎖實驗
1.實驗電路
電子密碼鎖主要由單片機ATmega8、液晶顯示器LCD1602和電磁鐵鎖芯等部分組成。實驗板上與電子密碼鎖有關的電路部分見下圖。圖中SB1、SB2、SB3為輸入按鍵,用于輸入數(shù)字密碼。VD6、R7、VT4等組成電磁鐵驅動電路,由ATmega8的PD7腳進行控制,實際使用時只要將VT4的負載由繼電器換成電子密碼鎖的電磁鐵吸合線圈即可,當然也可以用繼電器的常開觸點去控制電磁鐵吸合線圈。
2.程序設計
程序有主函數(shù)、初始化函數(shù)、LCD顯示函數(shù)、鍵盤掃描函數(shù)、密碼設置函數(shù)、EEPROM讀寫函數(shù)和延時函數(shù)等部分組成。
程序中共使用了6個數(shù)組,其中數(shù)組Datal[]用來存儲按鍵值,它存儲在SRAM數(shù)據(jù)存儲區(qū),用來記錄輸入的。
按鍵值。其中數(shù)組a[]用來存儲密碼值,為了防止密碼值掉電丟失,a[]存儲在EEPROM數(shù)據(jù)存儲區(qū),a[]的初始值為a[]={0,0,0,0,0,0,0,0,0,0,0,0},即初始密碼為000000000000。
實驗板上的SB1、SB2兩個按鈕作數(shù)字輸入鍵,SB1輸入數(shù)字0,SB2輸人數(shù)字1。SB3為確認鍵。由于只有兩個數(shù)字輸入按鈕,因此密碼只能采用二進制數(shù),密碼長度為12位。輸入的12位密碼存儲在數(shù)組Datal口中,按一下確認鍵SB3后,程序將數(shù)組Datal口的各元素和數(shù)組a[]的對應元素進行比較,如果兩個數(shù)組相等,說明密碼正確,LCD顯示屏顯示:RIGHT,PD7輸出高電平,由VT4推動電磁鐵吸合打開電子密碼鎖;反之,如果密碼錯誤,LCD顯示屏顯示:ERROR,打不開電子密碼鎖。輸入密碼時輸入幾個數(shù)字LCD顯示屏就顯示幾個·號。
為了程序設計方便,引入了一個特征值Key,沒有任何鍵按下時,令Key=0;當SB1、SB2有鍵按下時,令Key=1;當SB3按下時,令Key=2;當密碼不正確時,令Key=3。特征值Key作為主函數(shù)和按鍵掃描函數(shù)之間聯(lián)系的一條紐帶。
輸入密碼由按鍵掃描函數(shù)完成,按鍵掃描函數(shù)的流程圖見下圖。
密碼設置函數(shù)用來重新設置密碼,新的密碼仍然保存在EEPROM數(shù)據(jù)存儲區(qū),這樣掉電后新設置的密碼就不會丟失了。密碼設置函數(shù)的流程圖見下圖。
在驗證密碼和重新設置密碼時要對EEPROM進行讀寫,這可以用EEPROM讀寫函數(shù)來完成,兩個函數(shù)的語句如下。
寫EEPROM數(shù)據(jù)函數(shù):
Void Write-EEPROM(ucharData,uintAddress)
(if(EECR&0x20)//判斷寫使能是否為0
Delay Ms(10);//延時10ms
EEARH=Address》》8;//送高地址
EEARL=Address&0x0000ff;//送低地址
EEDR=Data;//送數(shù)據(jù)
EECR=EECR|0x04;//主寫使能置位
EECR=EECR|0x02;//寫使能置位
Delay Ms(10);//延時10ms
}
讀EEPROM數(shù)據(jù)函數(shù):
UcharRead_EEPROM(uint Address)
{uchar i;
if(EECR&0x01)//判斷讀使能是否為0
Delay Ms(10);//延時10ms
EEARH=Address》》8;//送高地址
EEARL=Address&0x00ff;//送高地址
EECR=EECR|0x01;//讀使能置位
Delay Ms(10);//延時10ms
i=EEDR;//讀數(shù)據(jù)
return(i);//返回數(shù)據(jù)
}
上面只對幾個主要的函數(shù)作了介紹,詳細的源程序見本期配刊光盤。
3.電子密碼鎖實驗首先將程序目標文件寫入單片機,為了防止密碼掉電后丟失,同時使密碼能夠重新修改,必須將密碼寫入EEPROM數(shù)據(jù)存儲器。由于程序中使用了EEPROM數(shù)據(jù)存儲器,因此程序在編譯時除了生成HEX目標文件外,還會產(chǎn)生EEP目標文件。HEX目標文件寫入Flash程序存儲器,EEP目標文件寫入EEPROM數(shù)據(jù)存儲器。所以用PonyProg2000寫芯片時,在打開目標文件時要分別打開目標文件Lock.hex和lock.eep,具體操作過程是:
(1)對芯片進行擦除;(2)用工具欄上的“Open Pro—gram Memory(FLASH)File按鈕打開lock.hex文件;(3)用工具欄上的“Open Data Memory(EEPROM)File”按鈕打開lock.eep文件;(4)單擊工具欄中的“寫器件”按鈕即可把兩個目標文件分別寫入Flash程序存儲器和EEPROM數(shù)據(jù)存儲器。操作過程如下圖(略)所示。
接下來接通實驗板的電源,通過SB1、SB2輸入12位密碼,按一下確認鍵SB3,如果密碼正確的話,LCD顯示屏會顯示“RIGHT”,同時PD7輸出5秒鐘的高電平,使發(fā)光二極管VD6點亮,電磁鐵吸合,電子密碼鎖被打開,如下圖(略)所示。如果密碼不正確,LCD顯示屏會顯示“ERROR”,PD7輸出仍為低電平,電子密碼鎖不能被打開。
如果要修改密碼,必須先輸入正確的密碼,在VD7沒有熄滅前按下SB3,并在VD7熄滅后再保持3秒鐘,到時LCD顯示屏會顯示“SET_PASSWORD”,這時即可用SB1、SB2輸入新的12位密碼。下次使用時必須輸入新的密碼才能打開鎖,這樣經(jīng)常變更密碼可提高鎖的安全性。
由于受按鍵數(shù)量的限制,密碼采用了二進制,12位密碼的組合也只有4096種,為了提高破解的難度,有兩種方法:一種方法是修改程序使得連續(xù)輸入幾次密碼錯誤后將電路鎖定一段時間,延長破解的時間;另一種方法是密碼采用十進制數(shù),但這就要使用更多的按鍵,從而使用較多的I/0接口,電路必須進行調(diào)整。上述兩種方法如何實施留給讀者自己思考。
-
寄存器
+關注
關注
31文章
5336瀏覽量
120230 -
密碼鎖
+關注
關注
6文章
249瀏覽量
34993 -
電子密碼鎖
+關注
關注
8文章
90瀏覽量
20613
發(fā)布評論請先 登錄
相關推薦
評論