基於ATMEGA128的密碼鎖

2021-10-12 14:02:28 字數 3993 閱讀 9954

密碼鎖題目要求

使用微控制器實現簡易密碼鎖,通過輸入密碼,實現門鎖的開啟(控制繼電器)。

具體要求如下:

(1)當輸入正確密碼後,繼電器開啟。

(2)當三次輸入錯誤密碼後,密碼鎖禁止輸入 10 秒鐘,並進行相應的提示。

(3)在輸入正確的密碼後,可修改密碼和查詢、清除門開啟的次數。

(4)自製繼電器電路模組。

(5)實現密碼掉電不丟失。

可新增符合題目背景的其它合理功能。

用矩陣鍵盤作輸入,lcd1602顯示輸入情況和判斷情況。

輸入密碼正確,三極體導通,繼電器開啟,燈亮起。

輸入密碼之後需要按下確認鍵,然後判斷函式來判斷密碼的正確與否,錯誤就錯誤次數加1,然後lcd提示一下輸入錯誤。

輸入密碼後才能夠進行密碼的修改和查詢,設定乙個變數,密碼正確後賦1就可以實現。

密碼不掉電只需要把密碼存在eeprom就可以解決了,128內部自帶eeprom,所以很好實現,我順便也把門開啟的次數也存了進去。

繼電器電路就不用多說了,很簡單的乙個電路。

題目還是很簡單的,一晚上的時間基本敲了個大概,完善了一下也沒花多長時間,上述要求全部實現,最後沒有做實物只是**了一下,有條件的可以做一下實物試一下,連的線也不多

輸入密碼連續錯誤三次,鎖定10秒,蜂鳴器響,紅色led亮起,結果如下

輸入密碼正確,繼電器開啟

修改密碼

查詢開門次數

其他功能就不演示了,例如斷電密碼不丟失。

下面展示主函式,完整程式會放鏈結

#include

#include

#include

//lcd液晶1602

#define uchar unsigned char

#define uint unsigned int

#define rs_0

portf&=~

(1<<

pf1)

#define rs_1

portf|=(

1<<

pf1)

#define rw_0

portf&=~

(1<<

pf2)

#define rw_1

portf|=(

1<<

pf2)

#define en_0

portf&=~

(1<<

pf3)

#define en_1

portf|=(

1<<

pf3)

// eeprom

void

delay

(uint ms)

;void

eeprom_write

(uchar addr,uchar data)

;uchar eeprom_read

(uchar data)

;/*定時器*/

long sencond_cnt=0;

//用於10s計數

uchar time_open=0;

void

io_init()

;//io初始化函式

void

timer0_init()

;//t/c0初始化函式

char miao;

//lcd液晶1602 參考課本的p241

uchar table1[16]

="hello"

;uchar table2[16]

="------"

;void

lcd_wcom

(uchar com)

;void

lcd_wdat

(uchar dat)

;void

lcd_init()

;void

write1602_data_r1()

;void

write1602_data_r2()

;//串列埠 用於除錯

void

led_init()

;void

uart0_init()

;//usart0 初始化函式

void

uart0_send_1byte

(uchar send_char)

;//串列埠傳送函式

uchar num_send;

void

send_s()

;//按鍵

uchar key_press()

;//按鍵檢測函式

uchar key_where()

;//按鍵定位函式

uint in=1

,in_num=0;

uchar password0[6]

=;uchar password_in[6]

;//輸入密碼

uchar password_current[6]

;//當前密碼

uchar input[6]

=;uchar num_code[16]

=;uchar num_input=0;

//矩陣鍵盤輸入按鍵位置

uchar inum;

//開門,模式

uchar open_n=

0,mode=1;

void

trans

(uchar mode)

;//根據模式轉換提示

uchar confirm=0;

//確認輸入

uchar correct=0;

uint error_n=0;

void

panduan()

;void

main

(void

)strcpy

(table1,

"reseted already");

write1602_data_r1()

;delay

(1000);

//eeprom_write(7,0); 重置開門次數}if

(pinb

==0xfd

)//鎖門if(

key_press()

)//判斷鍵盤中是否有按鍵按下

}else

if(num_input==10)

//確認輸入

confirm=1;

//已確認

}else

if(num_input==11)

//清除輸入

else

if(num_input==

12&&correct==1)

//修改密碼

elseif(

(num_input==13)

&&correct==1)

//查詢

mode=4;

elseif(

(num_input==15)

&&correct==1)

//清除開門次數

elseif(

(num_input==14)

&&mode!=2)

//輸入密碼模式

}trans

(mode)

;//液晶顯示根據模式進行轉換

if(confirm)

//確認輸入 進入密碼判斷函式

panduan()

;if(error_n==3)

//錯誤三次 鎖定十秒

}}

程式和**檔案:

stc12 密碼鎖 基於EEPROM

是照著清翔微控制器資源改過來的.大一剛來時 人生買的第乙個開發板 i2c.c include i2c.h include lcd12864.h bit ack 用於暫存應答位的值 uchar ad value 儲存ad轉換回的數字量 void delay5us void delay1us void ...

基於51微控制器的密碼鎖

本次的專案是基於51微控制器的密碼鎖,適合用來作為課程設計 主要實現了 密碼鎖功能,通過矩陣按鍵輸入密碼,輸入範圍為0 f,共有四位 同時,也可以使用更改按鍵更改密碼,在更改時需要輸入原密碼來進入更改模式,四位密碼顯示h標識,成功修改後,紅綠指示燈會同時閃爍 在輸入密碼正確後,綠色指示燈點亮,舵機啟...

密碼鎖程式 最簡單的PLC密碼鎖,我來告訴你

範例示意如下所示 控制要求 1 i0.2 i0.3為可按壓鍵。開鎖條件為i0.2設定按壓次數為三次,i0.3設定按壓次數為兩次 同時按壓i0.2 i0.3時有順序的,應先按壓i0.2,再按壓i0.3。如果按上述規定按壓,再按下開鎖按鈕i0.1,密碼鎖自動開啟。2 i0.4為不可按壓鍵,一旦按壓,再按...