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...