电子密码锁课设 下载本文

内容发布更新时间 : 2024/4/28 20:47:53星期一 下面是文章的全部内容请认真阅读。

case (0x44): k='9';break; case (0x82): k='C';break; case (0x18): k='*';break; case (0x28): k='0';break; case (0x48): k='#';break; case (0x88): k='D';break; }

return(k); }

//=================按键检测并返回按键值================ uchar keynum(void) {

uchar row,col,i; P1=0xf0;

if((P1&0xf0)!=0xf0) { Delay5Ms(); Delay5Ms(); if((P1&0xf0)!=0xf0) {

row=P1^0xf0; //确定行线 i=0;

P1=a[i]; //精确定位 while(i<4) {

if((P1&0xf0)!=0xf0) { col=~(P1&0xff); //确定列线 break; //已定位后提前退出 } else { i++; P1=a[i]; } } }

else {

return 0; }

while((P1&0xf0)!=0xf0);

21

return (row|col); //行线与列线组合后返回 }

else return 0; //无键按下时返回0 }

//=========显示输入的N个数字,用*代替以便隐藏========== void DisplayOne(void) {

write_1602com(yi+5+N); write_1602dat('*'); }

//=======================显示提示输入========================= void DisplayChar(void) {

uchar i; if(pass==1) {

write_1602com(er); for(i=0;i<16;i++) {

write_1602dat(LockOpen[i]); } } else {

if(N==0) {

write_1602com(er); for(i=0;i<16;i++) {

write_1602dat(Error[i]); } } else {

write_1602com(er); for(i=0;i<16;i++) {

write_1602dat(start_line[i]); } } } }

void DisplayInput(void)

22

{

uchar i;

if(CorrectCont==1) {

write_1602com(er); for(i=0;i<16;i++) {

write_1602dat(Input[i]); } } }

//==================重置密码=============== void ResetPassword(void) {

uchar i; uchar j; if(pass==0) {

pass=0;

DisplayChar(); } else {

if(ReInputEn==1) {

if(N==6) {

ReInputCont++; if(ReInputCont==2) {

for(i=0;i<6;) {

if(TempPassword[i]==InputData[i]) //将两次输入的新密码作对比

i++; else {

write_1602com(er); for(j=0;j<16;j++) {

write_1602dat(Error[j]); } pass=0;

ReInputEn=0; //关闭重置功能,

23

ReInputCont=0; DisplayChar(); break; } }

if(i==6) {

write_1602com(er); for(j=0;j<16;j++) {

write_1602dat(ResetOK[j]); }

WrToROM(TempPassword,0,6); /将新密码写入24C02存储

ReInputEn=0; }

ReInputCont=0; CorrectCont=0; } else {

write_1602com(er); for(j=0;j<16;j++) {

write_1602dat(again[j]); } for(i=0;i<6;i++) {

TempPassword[i]=InputData[i]; //将第一次输入的数据暂存起来 } }

N=0; //输入数据位数计数器清零 } } } }

//================取消所有操作================= void Cancel(void) {

uchar i;

24

uchar j;

write_1602com(er); for(j=0;j<16;j++) {

write_1602dat(start_line[j]); }

for(i=0;i<6;i++) {

InputData[i]=0; }

lock_led=0; //锁

operation=0; //操作标志位清零 pass=0; //密码正确标志清零 ReInputEn=0; //重置输入充许标志清零 CorrectCont=0; //密码正确输入次数清零 ReInputCont=0; //重置密码输入次数清零 open_led=1; s3_keydown=0;

N=0; //输入位数计数器清零 }

//===确认键,并通过相应标志位执行相应功======= void Ensure(void) {

uchar i,j;

RdFromROM(CurrentPassword,0,6); //从24C02里读出存储密码 if(N==6) {

if(ReInputEn==0) //重置密码功能未开启 {

for(i=0;i<6;) {

if(CurrentPassword[i]==InputData[i]) {

i++; } else

{

TR0=1; //开启定时 pass=0; break; } }

25