資源簡介
基于單片機的密碼鎖,包括(1)設置6位密碼,密碼通過鍵盤輸入,若密碼正確,則將鎖打開。
(2)密碼可以由用戶自己修改設定(只支持6位密碼),鎖打開后才能修改密碼。修改密碼之前必須再次輸入密碼,在輸入新密碼時候需要二次確認,以防止誤操作。
(3)報警、鎖定鍵盤功能。密碼輸入錯誤數碼顯示器會出現錯誤提示,若密碼輸入錯誤次數超過3次,蜂鳴器報警并且鎖定鍵盤。
經調試,絕對可用

代碼片段和文件信息
#include
#include
#define?uchar?unsigned?char
#define?uint?unsigned?int
#define?lcd1602_data?P0 ???//Lcd1602的位定義
sbit?rs=P3^0;
sbit?rw=P3^1;
sbit?en=P3^2;
sbit?BJ=P1^7;//報警位定義,當密碼輸入錯誤時報警位置1
sbit?QD=P3^3;
uchar?key;?//存鍵值
uchar?count=0;//用于記錄輸入的密碼位數
uchar?mima[6]={0};//存密碼值
uchar?mima1[6]={0};//存第一次輸入密碼值
uchar?mima2[6]={0}; //存第二次輸入密碼值
uchar?mimabuf[6]={0};?//存輸入的數字
uchar?gongneng_flag=0;//功能選擇位標志,為1時為Set,為2時為Open密碼正確打開
uchar?mima_error_count=0;//密碼按錯的次數
bit?key_flag=0; ?//有按鍵按下標志位
bit?mima_error=0;//密碼輸入錯誤標志位
bit?mima_set_error=0;//密碼設置不同 ???
bit?lock_mima=0;//是否需要鎖鍵盤,為1鎖鍵盤,不允許任何輸入
uchar?code?table1[]=“Welcome...??????“;
uchar?code?table2[]=“Select?Mode...??“;
uchar?code?table3[]=“1:?SET??2:?OPEN?“;
uchar?code?table4[]=“Previous?number?“;
uchar?code?table5[]=“New?number?is:??“;
uchar?code?table6[]=“Number?is?“;
uchar?code?table7[]=“?It?is?wrong!!!?“;
uchar?code?table8[]=“Set?is?OK?!!!???“;
uchar?code?table9[]=“The?number?is?OK“;
uchar?code?table10[]=“New?number?again:“;
uchar?code?table11[]=“Number?is?different“;
//判斷LCD1602的狀態即狀態字最高位STA7
uchar?Lcd1602Busy(void) ??
{
register?unsigned?char?lcdbusy;
rs=0;
rw=1;
en=1;
_nop_();
lcdbusy=lcd1602_data;
_nop_();
en=0;
return(lcdbusy&0x80);
}
//向LCD1602內寫命令
void?WriteCmdLcd1602(unsigned?char?command)
{
while(Lcd1602Busy());
rs=0;
rw=0;
en=1;
_nop_();
lcd1602_data=command;
_nop_();
en=0;
}
//向LCD1602內寫數據
void?WriteDatLcd1602(unsigned?char?dat)
{
while(Lcd1602Busy());
rs=1;
rw=0;
en=1;
_nop_();
lcd1602_data=dat;
_nop_();
en=0;
}
//將坐標定位在第row行第column列
void?Goto_xy(unsigned?char?rowunsigned?char?column)
{
if(row==1)
WriteCmdLcd1602(0x80+column-1);
else?if(row==2)
WriteCmdLcd1602(0x80+0x40+column-1);
}
//延時約1S
void?delay(void)
{
uchar?ijk;
for(i=0;i<20;i++)
for(j=0;j<125;j++)
for(k=0;k<250;k++);
}
//初始化函數
void?InitLcd1602(void)
{
WriteCmdLcd1602(0x38);
WriteCmdLcd1602(0x01);
WriteCmdLcd1602(0x0f);
WriteCmdLcd1602(0x06);
}
//在液晶上顯示字符串
void?PutStrLcd1602(char?*string)
{
unsigned?char?i;
for(i=0;string[i]!=‘\0‘;i++)
{
WriteDatLcd1602(string[i]);
_nop_();
}
}
//延時10ms
void?delay10ms(void)
{
uchar?ij;
for(i=0;i<25;i++)
for(j=0;j<250;j++);
}
void?KeyScan(void)?//鍵盤掃描程序,key應定義為全局無符號字符型 //采用掃描法識別鍵盤
{
uchar?itemptemp1=0xfe;
if(lock_mima==0)
{
for(i=0;i<4;i++)
{
P2=temp1;
temp=P2&0xf0;
if(temp!=0xf0) //若行均為高電平,說明此列無按鍵按下
{
delay10ms();
temp=P2&0xf0;
if(temp!=0xf0)
{
while((P2&0XF0)!=0xf0);
switch(temp)
{
case?0xe0:key=4*i+0;break;
case?0xd0:key=4*i+1;break;
case?0xb0:key=4*i+2;break;
case?0x70:key=4*i+3;break;
}
key_flag=1; ?//按鍵按下標志位置1
break;
}
}
temp1=(temp1<<1)|0x01;
}
}
}
//狀態1,在第一行輸出“Welcome...”
void?state1(void)
{
uchar?i;
Goto_xy(11);
PutStrLcd1602(table1);
Goto_xy(21);
f
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????16966??2013-03-22?11:46??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計
?????文件???????7447??2013-03-22?11:45??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計.c
?????文件???????3850??2013-03-22?11:46??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計.hex
?????文件?????????88??2013-03-22?11:46??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計.lnp
?????文件??????19571??2013-03-22?11:46??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計.LST
?????文件??????26759??2013-03-22?11:46??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計.M51
?????文件??????20687??2013-03-22?11:46??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計.OBJ
?????文件????????252??2013-03-22?13:56??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計.plg
?????文件??????55325??2013-03-22?13:56??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計.uvopt
?????文件??????13337??2011-07-31?23:44??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計.uvproj
?????文件??????55321??2013-03-22?13:25??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計_uvopt.bak
?????文件??????13333??2011-07-31?17:34??基于51的電子密碼鎖設計\Keil\基于51單片機的電子密碼鎖設計_uvproj.bak
?????文件?????109991??2013-03-22?09:24??基于51的電子密碼鎖設計\proteus\Last?Loaded?基于51單片機的電子密碼鎖設計.DBK
?????文件?????109991??2013-03-22?11:17??基于51的電子密碼鎖設計\proteus\基于51單片機的電子密碼鎖設計.DSN
?????文件???????1078??2013-03-22?13:25??基于51的電子密碼鎖設計\proteus\基于51單片機的電子密碼鎖設計.PWI
?????文件??????????0??2013-03-22?22:14??基于51的電子密碼鎖設計\初始密碼:000000.txt
?????目錄??????????0??2013-03-22?22:13??基于51的電子密碼鎖設計\Keil
?????目錄??????????0??2013-03-22?22:13??基于51的電子密碼鎖設計\proteus
?????目錄??????????0??2013-03-22?22:14??基于51的電子密碼鎖設計
-----------?---------??----------?-----??----
???????????????453996????????????????????19
- 上一篇:p0f 被動式的指紋識別工具
- 下一篇:文件讀入 畫變形監測曲線
評論
共有 條評論