電子密碼鎖設計

2021-09-26 06:33:04 字數 3002 閱讀 7183

01

設計要求

(1)密碼為6位長度,初始值是111111。有三次登陸機會,每錯一次,紅燈及蜂鳴器各亮、響一秒,液晶顯示錯誤資訊。錯三次後,禁止再登陸。正確登陸後綠燈亮。

(2)可修改密碼,但須先正確輸入原密碼。設定新密碼需連續正確輸入兩次,同時密碼須有相應格式,如密碼需8位數字。(其餘格式,如不能連續8位相同數字、符號*#可作為密碼等可根據情況自行設定)。

(3)輸入密碼時可用*顯示已輸入密碼,用-表示未輸入的部分。可設刪除按鍵,可以刪除所輸入的數字;有取消按鍵,可以取消修改密碼,取消登陸等功能。

02

程式

#include#include#include "stdio.h"

#include "string.h"

#define uchar unsigned char

#define uint unsigned int

// 定義lcd引腳

sbit lcm_rw=p2^5;

sbit lcm_rs=p2^6;

sbit lcm_e=p2^7;

#define lcm_data p0

// 用於檢測lcm狀態字中的busy標識

#define busy 0x80

// 按鍵定義

sbit k1=p1^0;

sbit k2=p1^1;

sbit k3=p1^2;

sbit k4=p1^3;

sbit k5=p1^4;

sbit k6=p1^5;

sbit k7=p1^6;

sbit k8=p1^7;

sbit red=p2^0;

sbit green=p2^1;

sbit beep=p2^2;

void lcminit(void);

void displayonechar(unsigned char x, unsigned char y, unsigned char ddata);

void displaylistchar(unsigned char x, unsigned char y, unsigned char code *ddata);

void writedatalcm(unsigned char wdlcm);

void writecommandlcm(unsigned char wclcm,buysc);

unsigned char readdatalcm(void);

unsigned char readstatuslcm(void);

void delay5ms(void);

void keyscan();

void xianshi();

void keyscan1();

void xianshi1();

void t0_init();

uchar jiance_geshi(uchar *a);

unsigned char code shuru =;

unsigned char code right = ;

unsigned char code error = ;

unsigned char code fail = ;

unsigned char code kongbai =;

unsigned char code g1 = "------";

uchar mima_chushi[6]="111111";

uchar mima[6]="";

uchar mima_xiu[6]="";

// 變數的定義

uchar mima_num;

uchar flag_num,flag_correct,flag_xiugai,flag_error,flag_xiu1,flag_xiu2,flag_quxiao;

// 5ms延時

void delay5ms(void)

void delay(unsigned int i)

// 寫資料

void writedatalcm(unsigned char wdlcm)

// 寫指令

// buysc為0時忽略忙檢測

void writecommandlcm(unsigned char wclcm, buysc)

// 讀資料

unsigned char readdatalcm(void)

// 讀狀態

unsigned char readstatuslcm(void)

// lcm初始化

void lcminit(void)

// 按指定位置顯示乙個字元

void displayonechar(unsigned char x, unsigned char y, unsigned char ddata) //y 為1 則是第二行

// 按指定位置顯示一串字元

void displaylistchar(unsigned char x, unsigned char y, unsigned char code *ddata)

}}void qing_shuzu(uchar *a)

else return 1;

}void main()

keyscan();

xianshi();

if(mima_num==6) //6位輸完 開始檢測

else

}luoji_xianshi();

if(flag_correct)

else displaylistchar(0, 0, shuru);

while(flag_correct) //進入登陸裝填

if(flag_xiugai==1)

else

else }}

}}}}

}}

}/*中斷服務程式*/

void timer0() interrupt 1

}

03

電子設計 密碼鎖

3.附 基於52微控制器的簡易密碼鎖有多種實現方案,比如使用數碼管可以做,使用點陣可以做,使用1602和12864液晶都可以做,關鍵在於使用者介面,我的微控制器只有數碼管和1602液晶,數碼管只有四位,並且只能顯示數字,這不僅對密碼鎖使用者很不友好,而且只有四位密碼安全性不高所以最終選擇使用液晶。對...

電子密碼鎖

最近剛寫乙個電子密碼鎖的程式,使用verilog語言實現的。剛剛學這個語言,練習一下。感覺這個語言不是很難,而且通過學這個語言,感覺自己還能通過自學掌握一門語言,挺有成就感的。雖然現在只懂verilog最基本的一些語法,但是通過不斷練習我會不加深入的掌握它,也有信心自學更多的。加油!密碼輸入 刪除模...

實用密碼鎖

unsigned char num,i,j unsigned char passwordtemp 16 最大輸入16個 unsigned char inputtimes 密碼輸入錯誤次數 unsigned char passwordlength,plen 輸入密碼長度,實際密碼長度 bit flag...