資源簡介
密碼鎖 Proteus密碼鎖 Proteus密碼鎖 Proteus密碼鎖 Proteus密碼鎖 Proteus密碼鎖 Proteus密碼鎖 Proteus

代碼片段和文件信息
/*
六位密碼原始密碼為362330該程序有點(diǎn)問題也有不完善的地方就是修改密碼后如果輸入的密碼與修改的密碼
相同則鎖會開如果有一次輸入有錯則密碼會變回原來的密碼即362330.可能因?yàn)槎x的數(shù)組
pws[6]為全局變量但是也不肯定.希望下載的人提出寶貴的意見大家共同交流謝謝.
*/
#include
#define?uchar?unsigned?char
#define?uint?unsigned?int
uint?num=10; //開始讓數(shù)碼管什么都顯示
bit?set=0; //定義設(shè)置密碼的位
char?count=-1; //開始讓COUNT=-1方便后面顯示數(shù)碼管
sbit?Beep=P1^2;?//蜂鳴器
uchar?temp;
uchar?pws[6]={362330}; //原始密碼
uchar?pwx[6]; //按下的數(shù)字存儲區(qū)
bit?rightflag; //密碼正確標(biāo)志位
uchar?workbuf[6];
uchar?code?tabledu[]={
0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x000x40
}; //段選碼共陰極
uchar?code?tablewe[]={
0xfe0xfd0xfb0xf70xef0xdf
}; //位選碼
uint?keyscan();
void?delay(uchar?z) //延時(shí)ms級
{
uchar?y;
for(;z>0;z--)
for(y=120;y>0;y--);
}
void?setpw() //設(shè)置密碼函數(shù)
{
keyscan();
}
uint?keyscan() //鍵盤掃描函數(shù)
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5); //鍵盤去抖最好20ms以上這里用了5ms
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
count++;//按鍵計(jì)數(shù)加1
temp=P3;
switch(temp)
{
case?0xee:?
{
num=7;
if(count<6) //六位密碼所以COUNT<6
{
if(set==0) //設(shè)置密碼鍵沒有按下時(shí)
pwx[count]=num;?//存儲按下的數(shù)字
else
pws[count]=num;?//設(shè)置密碼鍵按下時(shí)設(shè)置新密碼
workbuf[count]=tabledu[11];?//相應(yīng)位的數(shù)碼管顯示“--“不顯示相應(yīng)的數(shù)字密碼是保密的
}
}
break;
case?0xde:?
{
num=8;
if(count<6) //以下掃描鍵盤的原理差不多同上
{
if(set==0)
pwx[count]=num;
else
pws[count]=num;
workbuf[count]=tabledu[11];
}
}
break;
case?0xbe:?
{
num=9;
{
if(count<6)
{
if(set==0)
pwx[count]=num;
else
pws[count]=num;
workbuf[count]=tabledu[11];
}
}?
}
break;
case?0x7e: //設(shè)置密碼鍵按下
{
set=1; //設(shè)置密碼標(biāo)志位置1
P1_3=0; //設(shè)置密碼指示燈亮
workbuf[0]=0x00;//數(shù)碼管第一位不顯示
workbuf[1]=0x00;//......
workbuf[2]=0x00;//......
workbuf[3]=0x00;
workbuf[4]=0x00;
workbuf[5]=0x00;//......
count=-1; //按鍵計(jì)數(shù)復(fù)位為-1
if(count<6) //密碼沒有設(shè)置完繼續(xù)設(shè)置密碼
{
setpw(); //設(shè)置密碼
}
}
break;
}
while(temp!=0xf0)??//按鍵抬起檢測
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
count++;
temp=P3;
switch(temp)
{
case?0xed:?
{
num=4;
if(count<6)
{
if(set==0)
pwx[count]=num;
else
pws[count]=num;
workbuf[count]=tabledu[11];
}
}
break;
case?0xdd:?
{
num=5;
if(count<6)
{
if(set==0)
pwx[count]=num;
else
pws[count]=num;
workbuf[count]=tabledu[11];
}
}
break;
case?0xbd:
{
num=6;
if(count<6)
{
if(set==0)
pwx[count]=num;
else
pws[count]=num;
workbuf[count]=tabledu[11];
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????742??2009-07-27?17:34??密碼鎖\diy.PWI
?????文件??????13585??2008-07-06?22:09??密碼鎖\keilc\bb
?????文件???????3877??2008-07-06?22:09??密碼鎖\keilc\bb.hex
?????文件??????20952??2008-07-06?22:09??密碼鎖\keilc\bb.M51
?????文件????????194??2009-07-27?17:29??密碼鎖\keilc\bb.plg
?????文件???????2075??2005-05-29?13:45??密碼鎖\keilc\bb_Uv2.Bak
?????文件???????7596??2008-07-06?22:08??密碼鎖\keilc\main.c
?????文件??????25235??2008-07-06?22:09??密碼鎖\keilc\main.LST
?????文件??????15741??2008-07-06?22:09??密碼鎖\keilc\main.OBJ
?????文件??????11785??2008-07-06?22:09??密碼鎖\keilc\STARTUP.lst
?????文件????????896??2008-07-06?22:09??密碼鎖\keilc\STARTUP.obj
?????文件???????2194??2009-06-19?18:51??密碼鎖\keilc\bb.Uv2
????.......???????938??2009-07-13?15:11??密碼鎖\keilc\bb_Opt.Bak
?????文件????????934??2009-07-27?17:29??密碼鎖\keilc\bb.Opt
?????文件?????126935??2009-07-27?17:33??密碼鎖\Last?Loaded?diy.DBK
?????文件?????126935??2009-07-27?17:34??密碼鎖\diy.DSN
?????目錄??????????0??2009-07-27?17:28??密碼鎖\keilc
?????目錄??????????0??2009-07-27?17:27??密碼鎖
?????文件????????115??2009-11-26?16:03??密碼.txt
-----------?---------??----------?-----??----
???????????????360729????????????????????19
評論
共有 條評論