資源簡(jiǎn)介
基于單片機(jī)的密碼鎖,包括(1)設(shè)置6位密碼,密碼通過(guò)鍵盤輸入,若密碼正確,則將鎖打開(kāi)。
(2)密碼可以由用戶自己修改設(shè)定(只支持6位密碼),鎖打開(kāi)后才能修改密碼。修改密碼之前必須再次輸入密碼,在輸入新密碼時(shí)候需要二次確認(rèn),以防止誤操作。
(3)報(bào)警、鎖定鍵盤功能。密碼輸入錯(cuò)誤數(shù)碼顯示器會(huì)出現(xiàn)錯(cuò)誤提示,若密碼輸入錯(cuò)誤次數(shù)超過(guò)3次,蜂鳴器報(bào)警并且鎖定鍵盤。
經(jīng)調(diào)試,絕對(duì)可用

代碼片段和文件信息
#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;//報(bào)警位定義,當(dāng)密碼輸入錯(cuò)誤時(shí)報(bào)警位置1
sbit?QD=P3^3;
uchar?key;?//存鍵值
uchar?count=0;//用于記錄輸入的密碼位數(shù)
uchar?mima[6]={0};//存密碼值
uchar?mima1[6]={0};//存第一次輸入密碼值
uchar?mima2[6]={0}; //存第二次輸入密碼值
uchar?mimabuf[6]={0};?//存輸入的數(shù)字
uchar?gongneng_flag=0;//功能選擇位標(biāo)志,為1時(shí)為Set,為2時(shí)為Open密碼正確打開(kāi)
uchar?mima_error_count=0;//密碼按錯(cuò)的次數(shù)
bit?key_flag=0; ?//有按鍵按下標(biāo)志位
bit?mima_error=0;//密碼輸入錯(cuò)誤標(biāo)志位
bit?mima_set_error=0;//密碼設(shè)置不同 ???
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的狀態(tài)即狀態(tài)字最高位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內(nèi)寫命令
void?WriteCmdLcd1602(unsigned?char?command)
{
while(Lcd1602Busy());
rs=0;
rw=0;
en=1;
_nop_();
lcd1602_data=command;
_nop_();
en=0;
}
//向LCD1602內(nèi)寫數(shù)據(jù)
void?WriteDatLcd1602(unsigned?char?dat)
{
while(Lcd1602Busy());
rs=1;
rw=0;
en=1;
_nop_();
lcd1602_data=dat;
_nop_();
en=0;
}
//將坐標(biāo)定位在第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);
}
//延時(shí)約1S
void?delay(void)
{
uchar?ijk;
for(i=0;i<20;i++)
for(j=0;j<125;j++)
for(k=0;k<250;k++);
}
//初始化函數(shù)
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_();
}
}
//延時(shí)10ms
void?delay10ms(void)
{
uchar?ij;
for(i=0;i<25;i++)
for(j=0;j<250;j++);
}
void?KeyScan(void)?//鍵盤掃描程序,key應(yīng)定義為全局無(wú)符號(hào)字符型 //采用掃描法識(shí)別鍵盤
{
uchar?itemptemp1=0xfe;
if(lock_mima==0)
{
for(i=0;i<4;i++)
{
P2=temp1;
temp=P2&0xf0;
if(temp!=0xf0) //若行均為高電平,說(shuō)明此列無(wú)按鍵按下
{
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; ?//按鍵按下標(biāo)志位置1
break;
}
}
temp1=(temp1<<1)|0x01;
}
}
}
//狀態(tài)1,在第一行輸出“Welcome...”
void?state1(void)
{
uchar?i;
Goto_xy(11);
PutStrLcd1602(table1);
Goto_xy(21);
f
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????16966??2013-03-22?11:46??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì)
?????文件???????7447??2013-03-22?11:45??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).c
?????文件???????3850??2013-03-22?11:46??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).hex
?????文件?????????88??2013-03-22?11:46??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).lnp
?????文件??????19571??2013-03-22?11:46??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).LST
?????文件??????26759??2013-03-22?11:46??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).M51
?????文件??????20687??2013-03-22?11:46??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).OBJ
?????文件????????252??2013-03-22?13:56??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).plg
?????文件??????55325??2013-03-22?13:56??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).uvopt
?????文件??????13337??2011-07-31?23:44??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).uvproj
?????文件??????55321??2013-03-22?13:25??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì)_uvopt.bak
?????文件??????13333??2011-07-31?17:34??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì)_uvproj.bak
?????文件?????109991??2013-03-22?09:24??基于51的電子密碼鎖設(shè)計(jì)\proteus\Last?Loaded?基于51單片機(jī)的電子密碼鎖設(shè)計(jì).DBK
?????文件?????109991??2013-03-22?11:17??基于51的電子密碼鎖設(shè)計(jì)\proteus\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).DSN
?????文件???????1078??2013-03-22?13:25??基于51的電子密碼鎖設(shè)計(jì)\proteus\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).PWI
?????文件??????????0??2013-03-22?22:14??基于51的電子密碼鎖設(shè)計(jì)\初始密碼:000000.txt
?????目錄??????????0??2013-03-22?22:13??基于51的電子密碼鎖設(shè)計(jì)\Keil
?????目錄??????????0??2013-03-22?22:13??基于51的電子密碼鎖設(shè)計(jì)\proteus
?????目錄??????????0??2013-03-22?22:14??基于51的電子密碼鎖設(shè)計(jì)
-----------?---------??----------?-----??----
???????????????453996????????????????????19
評(píng)論
共有 條評(píng)論