#include
#include"intrins.h"
#include"key.h"
#include"xsh.h"
#include"24c02.h"
#define ulong unsigned long
bit bjcb=0;//報警標誌
xg=0,//修改密碼標誌位
bj=0,//報警標誌位
sj=0;//鎖鍵盤標誌位
// xg=0;//修改密碼標誌位
uchar pswd0_0[16]=;//密碼輸入快取儲存單元
//uchar code pswd0_1[16]=;//使用者初始密碼儲存單元
//uchar pswd1_0[16]=;//讀出密碼快取儲存單元
uchar pswd1_1[16]=;//管理員初始密碼儲存單元
sbit out=p3^5;//輸出埠
sbit l1=p0^2;//上電指示
sbit l2=p0^1;//開鎖指示
sbit l3=p0^0;//報警指示
uint mg=0,//密碼個數
ksc=0,//開鎖次數
bjc=0,//報警次數
tcnty=0,//使用者按鍵定時次數累加
tcntg=0,//管理員輸入密碼定時次數
yhsh,//使用者輸入標誌位
glsh,//管理員輸標誌位
shw;//密碼輸完標誌位
void yhmimaxig();//密碼修改程式
void glmimaxig();//管理員修改程式
void bjyin(ulong t)
if(mg==1) //有密碼鍵按下開定時器限時
} while(num!=15);
if(mg!=16)
}
/密碼比較電路
if(flag==1&&num==15)
for(i=0;i<16;i++)
else
bjcb=0; }}
if(bjcb!=0)
goto loop;
}else if(bjc==3)
goto loop;
} }
else
if(bjcb==0)
l2=0;
l1=1;
out=1;
mg=0;//密碼個數清零
loop1:do //鍵盤掃瞄等待功能鍵按下
if(flag==1&&num==14&&mg>=1)//輸入錯誤刪除
if(mg==16)
while(num!=15);
} }
while(num!=15);
if(mg!=16&&num==15)
}if(flag==1&&num==15)
display_1(ksc);
do //鍵盤掃瞄等待功能鍵按下
while(num!=11); //按下返回鍵,鎖鎖返回
}};break;
case 11: }}
}while(flag!=0);//如果設定密碼鍵按下
goto loop1;
// i2cwrite24c02_page(0x00,pswd1_1,mg);} }
else
while(num!=12);//判斷是否為管理員功能鍵按下
gl:do//管理員輸入密碼
if(flag==1&&num==14&&mg>=1)//刪除鍵按下
if(mg==1)
//開定時器to限5秒開鎖
} while(num!=15);
if(mg!=16&&num==15)
}//管理員密碼比較///
//read_page24c02(0x10,pswd0_1,16)
for(i=0;i<16;i++) //從24c02裡讀出16個密碼
if(flag==1&&num==15)
if(mg==16)
while(num!=15);
} }
while(num!=15);
if(mg!=16&&num==15)
}if(flag==1&&num==15)
display_4();
do //鍵盤掃瞄等待功能鍵按下
while(num!=11); //按下返回鍵,鎖鎖返回 }}
if(flag==1&&num==10)
while(num!=11);//按下返回鍵,鎖鎖返回
goto loop;
}if(flag==1&&num==11)//按下返回鍵,鎖鎖返回 }}
} #ifndef _key_h
#define _key_h
#include
#define uchar unsigned char
#define uint unsigned int
bit flag=0;//按鍵按下標誌位
sbit beep=p3^7;//蜂鳴器埠
delay(int z)//延時1ms
uchar num;//按鍵返回值
按鍵音程式//
void yin()
}}
鍵盤程式///
int key()
do
while(temp!=0x0f);
flag=1;
yin();} }
p2=0xbf;
temp=p2&0x0f;
if(temp!=0x0f)
do
while(temp!=0x0f);
flag=1;
yin();}}
p2=0xdf;
temp=p2&0x0f;
if(temp!=0x0f)
do
while(temp!=0x0f);
flag=1;
yin();}}
p2=0xef;
temp=p2&0x0f;
if(temp!=0x0f)
do
while(temp!=0x0f);
flag=1;
yin();} }
return(num);
}#endif
#ifndef _xsh_h
#define _xsh_h
#include
#define uchar unsigned char
#define uint unsigned int
sbit shj=p1^0;//串列埠資料口
sbit sck=p1^1;//串列埠時鐘
uchar code tab[20]=; //共陽數碼管
uchar code sb0[3]=,/*開鎖後顯示*/
code sb1[3]=,/*開鎖前顯示*/
code sb2[6]=,/*修改顯示*/
code sb3[6]=,/*第一二次報警顯示*/
code sb4[6]=,/*管理員進入顯示*/
code sb5[6]=;/*第三次報警顯示*/
//*顯示電路*/
void writedata(uchar num)//傳送乙個位元組
}void display_0(uchar temp)//開鎖前狀態
writedata(q);
writedata(s);
writedata(g);
}void display_1(uchar temp)//開鎖後狀態
writedata(q);
writedata(s);
writedata(g);
}void display_2()//修改密碼顯示 }
void display_3()//報警顯示 }
void display_4()//管理員模式顯示 }
void display_5()//管理員模式顯示 }
#endif
#ifndef _24c02_h
#define _24c02_h
#include
#define writedeviceaddress 0xa0
#define readdeviceaddress 0xa1
sbit sda=p1^5;//i2c資料端
sbit scl=p1^6;//i2c時鐘端
///24c0224c08讀寫驅動程式///
void delayms(unsigned int number)
}void i2cstart(void)
void i2cstop(void)
void i2cack(void)
void i2cnoack(void)
void i2cwrite8bit(unsigned char input)
delayms(20);
}unsigned char i2cread8bit(void)
return(rbyte);
}void i2cwrite24lc16b(unsigned char wdata,unsigned char romaddress)
//寫入多個位元組到24c02中
//傳入引數:位址、待寫入的資料的首位址、資料長度
bit i2cwrite24c02_page(uchar romaddress,uchar *wrdata,uchar length)
{ uint i;
i2cstart();
i2cwrite8bit(writedeviceaddress);
i2cack();
i2cwrite8bit(romaddress);
i2cack();
for(i=0;i
微控制器實用密碼鎖
unsigned char num,i,j unsigned char passwordtemp 16 最大輸入16個 unsigned char inputtimes 密碼輸入錯誤次數 unsigned char passwordlength,plen 輸入密碼長度,實際密碼長度 bit flag...
基於51微控制器的密碼鎖
本次的專案是基於51微控制器的密碼鎖,適合用來作為課程設計 主要實現了 密碼鎖功能,通過矩陣按鍵輸入密碼,輸入範圍為0 f,共有四位 同時,也可以使用更改按鍵更改密碼,在更改時需要輸入原密碼來進入更改模式,四位密碼顯示h標識,成功修改後,紅綠指示燈會同時閃爍 在輸入密碼正確後,綠色指示燈點亮,舵機啟...
基於微控制器的智慧型密碼鎖
基於微控制器的智慧型密碼鎖 該密碼鎖控制器 鍵盤上有0 9個數字按鍵,功能鍵 確認和取消等,可設定復合鍵。密碼的位數及密碼可以任意設定,當輸入數字和設定的密碼相同的時候,鎖開啟,否則無法開啟。採用iic通訊方式,密碼鎖的密碼掉電不丟失。include include define uint unsi...