亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
51單片機12864顯示的電子密碼鎖源碼
[打印本頁]
作者:
swanghn
時間:
2018-8-1 15:21
標題:
51單片機12864顯示的電子密碼鎖源碼
這是一個基于STC89C52的指紋識別和鍵盤密碼鎖,里面包括程
1.當要想從標志位中退出來就一定要知道程序當前在哪個標志位中讀取,然后就是在這個里面設定退出方可,
否則是不能使用的,相當于是沒有一樣。
單片機源程序如下:
/*************************************************************************************
密碼鎖,可以改個人密碼和管理員密碼的一個基于單片機的鎖。
按鍵值碼: 1 2 3 set 輸入密碼只能按0~9,10位確定鍵,11位取消鍵(輸入密碼小
4 5 6 ↑ 于8時取消輸入的密碼),12是時鐘功能鍵,13是時鐘“+”,
7 8 9 ↓ 14是時鐘“-”,15改密碼的時候的確定鍵
ok 0 c fun
**************************************************************************************/
/******************************頭文件****************************************/
#include<reg52.h>
#include<stdio.h>
#include<math.H>
#include"lcd.h"
#include"ds1302.h"
#include"keyboard.h"
#include"delay.h"
#include"deal.h"
#include "i2c.h"
#include "uart.h"
/*************************宏定義*************************************/
#define uchar unsigned char
#define uint unsigned int
//========================IO口定義==================================//
sbit s = P2^2; //控制背光
sbit k2 = P3^2; //
sbit JDQ_key = P3^7; //繼電器控制
unsigned char flag4,flag5=0,flag8=1,flag1=0,flag_time=0,
flag_time2=0;flag3=0;
unsigned char wrongtimes=0,k,p=1,miao=59,t=0,snum=0,
c=0,up=0,down=0,a=0;
//===========================密碼的初始值==========================//
unsigned char MIMAword[8]={1,2,3,4,5,6,7,8}; //密碼的初始值
unsigned char G_MIMA[8]={8,8,8,8,8,8,8,8}; //管理員密碼,可以更改
void MIMA_input(); //EEPROM寫
void MIMA_output(); //EEPROM讀
//===========================配置定時器============================//
void init_conf()
{
TH0=(65536-50000)/256; //
TL0=(65536-50000)%256;
EA=1;
ET0=1;
IT0=1; //跳變沿出發方式(下降沿)
EX0=1; //打開INT0的中斷允許。
TR1 = 1;
ET1 = 1;
}
//===============================主函數===========================//
void main()
{
unsigned char num,i = 0,j;
unsigned char temp[8];
unsigned char Ztemp[8]={'1','2','3','4','5','6','7','8'};
unsigned char Zresponsuccess[4]={0x55,0x11,0x01,0x00};
unsigned char Zresponfail[]="your command is wrong";
unsigned char ch[8]={0},z1=0, Znum[8]={0};
bit Flag;
/***********************以下是斷電后重啟的讀出EEPROM的數據*******************************/
//第一次上電先隱去 88888888修改管理員密碼 然后取隱用修改后的管理員進入修改個人密碼
G_MIMA[0] = EEPROMread_add(11,19);
delay(20);
G_MIMA[1] = EEPROMread_add(12,20);
delay(20);
G_MIMA[2] = EEPROMread_add(13,21);
delay(20);
G_MIMA[3] = EEPROMread_add(14,22);
delay(20);
G_MIMA[4] = EEPROMread_add(15,23);
delay(20);
G_MIMA[5] = EEPROMread_add(16,24);
delay(20);
G_MIMA[6] = EEPROMread_add(17,25);
delay(20);
G_MIMA[7] = EEPROMread_add(18,26);
delay(20);
/***********************以上是斷電重啟后讀出EEPROM里面的數據*********************************/
s=0; //背光控制,上電時低電平將三極管導通
JDQ_key=1; //繼電器驅動裝置,低電平(三極管不導通,則繼電器工作,則鎖關
//換為J3Y后更改電平
init_conf(); //配置定時器
LCD12864_Init(); //12864初始化
Ds1302Init(); //1302初始化
UartInit(); //串口初始化
LCD12864_SetWindow(0,2,"歡迎光臨"); //第一行顯示信息
LCD12864_SetWindow(1,1,"華北科技學院"); //第二行顯示信息
LCD12864_SetWindow(2,1,"單片機實驗室"); //第三行顯示信息
LCD12864_SetWindow(3,1,"輸入八位密碼"); //第四行顯示信息
Delay3000ms();
LCD12864_SetWindow(0,0," ");
LCD12864_SetWindow(1,0," ");
while(1)
{
//=============================串口處理函數=====================================//
while(UART_Re_N(8,ch))
{
for(z1=0;z1<8;z1++)
{
Znum[z1]= ch[z1];
}
if((Ztemp[0]==Znum[0])&&(Ztemp[1]==Znum[1]))
{
UART_Send_Strs(Zresponsuccess);
UART_Send_Enter();
JDQ_key=0;//三極管不導通,則繼電器不工作,則鎖開
LCD12864_SetWindow(3,0," ");
//經測試發現正確的“正”不能正常顯示,
//需要打補丁才能顯示,“正”的內碼缺失,
//運用GBK國標擴展碼顯示如下
LCD12864_WriteCmd(0x98+2);
LCD12864_WriteData(0xc3);//密
LCD12864_WriteData(0xdc);
LCD12864_WriteData(0xc2);//碼
LCD12864_WriteData(0xeb);
LCD12864_WriteData(0xd5);//正
LCD12864_WriteData(0xfd);
LCD12864_WriteData(0xc8);//確
LCD12864_WriteData(0xb7);
Delay5000ms();//5s后把繼電器導通,使鎖鎖上
LCD12864_SetWindow(2,0," ");
LCD12864_SetWindow(3,0," ");//清除該行
LCD12864_SetWindow(2,1,"單片機實驗室"); //寫入第3行信息
LCD12864_SetWindow(3,1,"輸入八位密碼");
JDQ_key=1; //三極管導通,則繼電器工作,則鎖關
}
else
{
UART_Send_Strs(Zresponfail);
UART_Send_Enter();
}
}
if(flag3 == 1)
{
MIMA_input();//修改密碼
}
else
{
if(flag_time2==0)
{
p=1;
LCD12864_WriteCmd(0x0c);
LCD12864_SetWindow(2,1,"單片機實驗室"); //第三行顯示信息
Ds1302Write(0x90,0xa9); //涓細充電
Ds1302ReadTime(); //時間讀取
LcdDisplaytime(); //顯示時間
delay(5);
week(); //顯示星期
delay(5);
displayday(); //顯示日期
delay(5);
while(UART_Re_N(8,ch)) //串口處理
{
for(z1=0;z1<8;z1++)
{
Znum[z1]= ch[z1];
}
if((Ztemp[0]==Znum[0])&&(Ztemp[1]==Znum[1]))
{
UART_Send_Strs(Zresponsuccess);
UART_Send_Enter();
JDQ_key=0;//三極管不導通,則繼電器不工作,則鎖開
LCD12864_SetWindow(3,0," ");
//經測試發現正確的“正”不能正常顯示,
//需要打補丁才能顯示,“正”的內碼缺失,
//運用GBK國標擴展碼顯示如下
LCD12864_WriteCmd(0x98+2);
LCD12864_WriteData(0xc3);//密
LCD12864_WriteData(0xdc);
LCD12864_WriteData(0xc2);//碼
LCD12864_WriteData(0xeb);
LCD12864_WriteData(0xd5);//正
LCD12864_WriteData(0xfd);
LCD12864_WriteData(0xc8);//確
LCD12864_WriteData(0xb7);
Delay5000ms();//5s后把繼電器導通,使鎖鎖上
LCD12864_SetWindow(2,0," ");
LCD12864_SetWindow(3,0," ");//清除該行
LCD12864_SetWindow(2,1,"單片機實驗室"); //寫入第3行信息
LCD12864_SetWindow(3,1,"輸入八位密碼");
JDQ_key=1; //三極管導通,則繼電器工作,則鎖關
}
else
{
UART_Send_Strs(Zresponfail);
UART_Send_Enter();
}
}
num=KeyPro();
delay(5); //按鍵掃描
if(num!=0xff)
{
if(num==12) //設置時間的標志位
flag_time=1;
if(num>=0&&num<10) //設置密碼數位為0~9有效
{
if(i==0)
{
LCD12864_SetWindow(3,0," ");//顯示空,相當于清屏
}
if(i<8) //密碼是8位,大于8位時不再輸入按鍵值
{
temp[i]=num;
LCD12864_char(3,i,'*'); //顯示*號
}
i++;
}
if(num==11) //取消清零鍵,只有密碼少于8位時有效
{
i=0; //計數清零
LCD12864_SetWindow(3,0," ");
LCD12864_SetWindow(3,1,"輸入八位密碼");
}
while(i==8)
{
num=KeyPro();
if(num==10) //確定鍵
i=9;
}
if(i==9) //8位后的按鍵不輸入數值
{
i=0; //計數器復位
Flag=1; //先把比較位置1
flag4 = 1;
MIMA_output(); // p = 1
for(k = 0; k < 8; k++)
flag4=flag4&&((temp[k]==G_MIMA[k])); //管理員密碼比較
if(flag4) //flag4為管理員的更改密碼
{
unsigned char m;
flag8 = 0;
flag5 = 1;
LCD12864_WriteCmd(0x01);
LCD12864_SetWindow(0,2,"修改密碼");
LCD12864_SetWindow(1,0,"1.個人密碼修改");
LCD12864_SetWindow(2,0,"2.管理員密碼修改"); //管理員密碼正確顯示的信息
LCD12864_SetWindow(1,0,"");
LCD12864_WriteCmd(0x0f); //顯示光標
m=KeyPro();
delay(50);
m=0XFF;
while(m != 10) //改密碼按鍵
{
m=0XFF;
while(m==0XFF)
{
m=KeyPro();
if( m == 14) //下
{
p = 0; //管理員密碼修改的標志位
LCD12864_SetWindow(2,0,"");
LCD12864_WriteCmd(0x0f);
}
if( m == 13) //上
{
p = 1; //個人密碼修改的標志位
LCD12864_SetWindow(1,0,"");
LCD12864_WriteCmd(0x0f);
}
}
}
k2=0; //可以進入改密碼中斷
MIMA_input();
flag8 = 0;
}
for(j=0;j<8;j++) //循環比較8個數值,如果有一個不等 則最終Flag值為0
Flag=Flag&&(temp[j]==MIMAword[j]);//比較輸入值和已有密碼
if(Flag) //如果比較全部相同,標志位置1
{
wrongtimes=0;
JDQ_key=0;//三極管不導通,則繼電器不工作,則鎖開
LCD12864_SetWindow(3,0," ");
//經測試發現正確的“正”不能正常顯示,
//需要打補丁才能顯示,“正”的內碼缺失,
//運用GBK國標擴展碼顯示如下
LCD12864_WriteCmd(0x98+2);
LCD12864_WriteData(0xc3);//密
LCD12864_WriteData(0xdc);
LCD12864_WriteData(0xc2);//碼
LCD12864_WriteData(0xeb);
LCD12864_WriteData(0xd5);//正
LCD12864_WriteData(0xfd);
LCD12864_WriteData(0xc8);//確
LCD12864_WriteData(0xb7);
Delay5000ms();//5s后把繼電器導通,使鎖鎖上
LCD12864_SetWindow(2,0," ");
LCD12864_SetWindow(3,0," ");//清除該行
LCD12864_SetWindow(2,1,"單片機實驗室"); //寫入第3行信息
LCD12864_SetWindow(3,1,"輸入八位密碼");
JDQ_key=1; //三極管導通,則繼電器工作,則鎖關
}
else
flag1=1;
if(flag8)
{
if(flag1==1)
{
flag1=0;
LCD12864_SetWindow(3,0," ");
LCD12864_SetWindow(2,0," ");
LCD12864_SetWindow(2,2,"密碼錯誤"); //密碼錯誤,提示重新輸入
LCD12864_SetWindow(3,2,"重新輸入");
Delay2000ms();
wrongtimes++; //錯誤次數累加
LCD12864_SetWindow(2,0," ");//清除該行
LCD12864_SetWindow(3,0," ");
LCD12864_SetWindow(2,1,"單片機實驗室");
LCD12864_SetWindow(3,1,"輸入八位密碼");
if(wrongtimes>=5) //當錯誤達到n次后
{
TR0=1; //啟動定時
wrongtimes=0; //清零
LCD12864_SetWindow(2,0," ");//清除該行
LCD12864_SetWindow(3,0," ");//清除該行
nop();
LCD12864_SetWindow(2,2,"錯誤五次");
LCD12864_SetWindow(3,2,"等59秒");
while(TR0); //鎖定屏幕
}
}
}
}
}
}
}//flag3的else
if(flag_time==1)//顯示的是更改時間的頁面
{
i = 0;
flag_time=0; //要將標志位置零,不然會一直掃描
flag_time2=1;
LCD12864_WriteCmd(0x01);//清屏
LCD12864_SetWindow(0,1,"修改時間日期");delay(10);//第一行顯示內容
week1();delay(10); //星期
displayday1();delay(10);//日期
LcdDisplaytime1();delay(10);//時間
}
if(flag_time2==1)
{
num=KeyPro();
if(num==15)//改時間的確定鍵
{
snum=0;//清零0
//下面將改過的時間寫進去
Ds1302Write(0x80,TIME[0]);delay(10);//秒
Ds1302Write(0x82,TIME[1]);delay(10);//分
Ds1302Write(0x84,TIME[2]);delay(10);//時
Ds1302Write(0x8a,TIME[5]);delay(10);//星期
Ds1302Write(0x86,TIME[3]);delay(10);//日
Ds1302Write(0x88,TIME[4]);delay(10);//月
Ds1302Write(0x8c,TIME[6]);delay(10);//年
Ds1302Write(0x8E,0x80);
LCD12864_WriteCmd(0x01);
LCD12864_WriteCmd(0x0c);
LCD12864_SetWindow(3,1,"輸入八位密碼");
flag_time2=0;//在這里就可以實現退出的功能,因為當
//flag_time2==1時,程序一直會掃描這里
}
if(num==12)
{
Ds1302Write(0x8E,0x00); //關閉寫保護
LCD12864_WriteCmd(0x0f);
delay(10);
snum++;
switch(snum)
{
case 1: LCD12864_SetWindow(3,2,"調整秒");LCD12864_WriteCmd(0x88+5);break;
case 2: LCD12864_SetWindow(3,2,"調整分");LCD12864_SetWindow(2,3,"");break;
case 3: LCD12864_SetWindow(3,2,"調整時");LCD12864_SetWindow(2,1,"");break;
case 4: LCD12864_SetWindow(3,2,"調整星期");LCD12864_SetWindow(1,7,"");break;
case 5: LCD12864_SetWindow(3,0," ");
LCD12864_SetWindow(3,2,"調整日");
LCD12864_SetWindow(1,5,"");break;
case 6: LCD12864_SetWindow(3,2,"調整月");LCD12864_SetWindow(1,3,"");break;
case 7: LCD12864_SetWindow(3,2,"調整年");LCD12864_SetWindow(1,1,"");break;
case 8:
{
snum=0;
LCD12864_WriteCmd(0x01);
LCD12864_SetWindow(3,1,"輸入八位密碼");
LCD12864_WriteCmd(0x0c);delay(20);
Ds1302Write(0x80,TIME[0]);delay(10);
Ds1302Write(0x82,TIME[1]);delay(10);
Ds1302Write(0x84,TIME[2]);delay(10);
Ds1302Write(0x8a,TIME[5]);delay(10);
Ds1302Write(0x86,TIME[3]);delay(10);
Ds1302Write(0x88,TIME[4]);delay(10);
Ds1302Write(0x8c,TIME[6]);delay(10);
Ds1302Write(0x8E,0x80); //打開寫保護
flag_time2=0;
}break;
}
}
if(snum!=0)
{
//*******************************以下是按鍵按下減的計數******************************************/
if(num==13)
{
LCD12864_WriteCmd(0x0c);
switch(snum)
{
case 1: //秒
{
TIME[0]++;
if((TIME[0]&0x0f)==10)
{
TIME[0]&=0xf0;
TIME[0]+=0x10;
}
if(TIME[0]>=0x60)
TIME[0]=0;
LCD12864_WriteCmd(0x88+5);
Ds1302Write(0,'0'+TIME[0]);
LCD12864_WriteData('0'+TIME[0]/16);//秒
LCD12864_WriteData('0'+(TIME[0]&0x0f));
}break;
case 2: //分
{
TIME[1]++;
if((TIME[1]&0x0f)==10)
{
TIME[1]&=0xf0;
TIME[1]+=0x10;
}
if(TIME[1]>=0x60)
TIME[1]=0;
LCD12864_WriteCmd(0x88+3);
Ds1302Write(0,'0'+TIME[1]);
LCD12864_WriteData('0'+TIME[1]/16);//分
LCD12864_WriteData('0'+(TIME[1]&0x0f));
}break;
case 3: //時
{
TIME[2]++;
if((TIME[2]&0x0f)==10)
{
TIME[2]&=0xf0;
TIME[2]+=0x10;
}
if(TIME[2]>=0x24)
TIME[2]=0;
LCD12864_WriteCmd(0x88+1);
Ds1302Write(0,'0'+TIME[2]);
LCD12864_WriteData('0'+TIME[2]/16);//時
LCD12864_WriteData('0'+(TIME[2]&0x0f));
}break;
case 4: //星期
{
TIME[5]++;
if(TIME[5]>=0x08)//星期最大到7
TIME[5]=0x01;//最小到1
LCD12864_WriteCmd(0x90+7);
Ds1302Write(0,'0'+TIME[5]);
c=TIME[5];
switch(c)
{
case 1:LCD12864_SetWindow(1,7,"一");break;
case 2:LCD12864_SetWindow(1,7,"二");break;
case 3:{
LCD12864_WriteCmd(0x90+7);
DelayUs2x(10);
LCD12864_WriteData(0xc8);//三
LCD12864_WriteData(0xfd);
}break;
case 4:LCD12864_SetWindow(1,7,"四");break;
case 5:LCD12864_SetWindow(1,7,"五");break;
case 6:LCD12864_SetWindow(1,7,"六");break;
case 7:LCD12864_SetWindow(1,7,"日");break;
}//switch 星期的
}break;
case 5: //日
{
TIME[3]++;
if((TIME[3]&0x0f)==10)
{
TIME[3]&=0xf0;
TIME[3]+=0x10;
}
if(TIME[3]==0x32)
TIME[3]=0x01;
LCD12864_WriteCmd(0x90+5);
Ds1302Write(0,'0'+TIME[3]);
LCD12864_WriteData('0'+TIME[3]/16);//日
LCD12864_WriteData('0'+(TIME[3]&0x0f));
}break;
case 6: //月
{
TIME[4]++;
if((TIME[4]&0x0f)==10)
{
TIME[4]&=0xf0;
TIME[4]+=0x10;
}
if(TIME[4]>=0x13)
TIME[4]=0x01;
LCD12864_WriteCmd(0x90+3);
Ds1302Write(0,'0'+TIME[4]);
LCD12864_WriteData('0'+TIME[4]/16);//月
LCD12864_WriteData('0'+(TIME[4]&0x0f));
}break;
case 7: //年
{
TIME[6]++;
if((TIME[6]&0x0f)==10)
{
TIME[6]&=0xf0;
TIME[6]+=0x10;
}
if(TIME[6]==0xa0)
TIME[6]=0;
LCD12864_WriteCmd(0x90+1);
Ds1302Write(0,'0'+TIME[6]);
LCD12864_WriteData('0'+TIME[6]/16);//年
LCD12864_WriteData('0'+(TIME[6]&0x0f));
}break;
} //switch
}
//*******************************以下是按鍵按下減的計數******************************************/
if(num==14) //減
{
LCD12864_WriteCmd(0x0c);
switch(snum)
{
case 1: //秒
{
TIME[0]--;
if((TIME[0]&0x0f)==0x0f)
{
TIME[0]&=0xf0;
TIME[0]|=0x09;
}
if(TIME[0]==0xf9)
TIME[0]=0x59;
LCD12864_WriteCmd(0x88+5);
Ds1302Write(0,'0'+TIME[0]);
LCD12864_WriteData('0'+TIME[0]/16);//秒
LCD12864_WriteData('0'+(TIME[0]&0x0f));
}break;
case 2: //分
{
TIME[1]--;
if((TIME[1]&0x0f)==0x0f)
{
TIME[1]&=0xf0;
TIME[1]|=0x09;
}
if(TIME[1]==0xf9)
TIME[1]=0x59;
LCD12864_WriteCmd(0x88+3);
Ds1302Write(0,'0'+TIME[1]);
LCD12864_WriteData('0'+TIME[1]/16);//分
LCD12864_WriteData('0'+(TIME[1]&0x0f));
}break;
case 3: //時
{
TIME[2]--;
if((TIME[2]&0x0f)==0x0f)
{
TIME[2]&=0xf0;
TIME[2]|=0x09;
}
if(TIME[2]==0xf9)
TIME[2]=0x23;
LCD12864_WriteCmd(0x88+1);
Ds1302Write(0,'0'+TIME[2]);
LCD12864_WriteData('0'+TIME[2]/16);//時
LCD12864_WriteData('0'+(TIME[2]&0x0f));
}break;
case 4: //星期
{
TIME[5]--;
if(TIME[5]<=0x00)
TIME[5]=0x07;
c=TIME[5];
LCD12864_WriteCmd(0x90+7);
Ds1302Write(0,'0'+TIME[5]);
switch(c)
{
case 1:LCD12864_SetWindow(1,7,"一");break;
case 2:LCD12864_SetWindow(1,7,"二");break;
case 3:{
LCD12864_WriteCmd(0x90+7);
DelayUs2x(10);
LCD12864_WriteData(0xc8);//三
LCD12864_WriteData(0xfd);
}break;
case 4:LCD12864_SetWindow(1,7,"四");break;
case 5:LCD12864_SetWindow(1,7,"五");break;
case 6:LCD12864_SetWindow(1,7,"六");break;
case 7:LCD12864_SetWindow(1,7,"日");break;
}//switch 星期的
}break;
case 5: //日
{
TIME[3]--;
if((TIME[3]&0x0f)==0x0f)
{
TIME[3]&=0xf0;
TIME[3]|=0x09;
}
if(TIME[3]==0x00)
TIME[3]=0x31;
LCD12864_WriteCmd(0x90+5);
Ds1302Write(0,'0'+TIME[3]);
LCD12864_WriteData('0'+TIME[3]/16);//日
LCD12864_WriteData('0'+(TIME[3]&0x0f));
}break;
case 6: //月
{
TIME[4]--;
if((TIME[4]&0x0f)==0x0f)
{
TIME[4]&=0xf0;
TIME[4]|=0x09;
}
if(TIME[4]==0x00)
TIME[4]=0x12;
LCD12864_WriteCmd(0x90+3);
Ds1302Write(0,'0'+TIME[4]);
LCD12864_WriteData('0'+TIME[4]/16);//月
LCD12864_WriteData('0'+(TIME[4]&0x0f));
}break;
case 7: //年
{
TIME[6]--;
if((TIME[6]&0x0f)==0x0f)
{
TIME[6]&=0xf0;
TIME[6]|=0x09;
}
if(TIME[6]==0xf9)
TIME[6]=0x99;
LCD12864_WriteCmd(0x90+1);
Ds1302Write(0,'0'+TIME[6]);
LCD12864_WriteData('0'+TIME[6]/16);//年
LCD12864_WriteData('0'+(TIME[6]&0x0f));
}break;
}//switch
}
}
}
} //while
}
//===============================中斷處理函數===============================//
//是錯誤次數達到一定次數后的中斷
void init_irq1()interrupt 1 using 0
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a>=20)
{
a=0; //a大于等于20時說明一秒到了
miao--; //五次錯誤后將會鎖屏1分鐘后才能輸入密碼
clock(3,miao);
}
if(miao<=0)
{
TR0=0;
miao=59; //當倒計時完成后將時間重新置于一分鐘即是60
LCD12864_SetWindow(2,0," ");
LCD12864_SetWindow(3,0," ");
LCD12864_SetWindow(2,1,"單片機實驗室"); //寫入第一行信息,主循環中不再更改此信息,所以在while之前寫入
LCD12864_SetWindow(3,1,"輸入八位密碼");
flag_time2=0;
}
}
//==============================密碼輸入(密碼修改)=============================//
void MIMA_input()
{
unsigned char i=0,m,k=1,flag7 = 1;
if(flag5 == 1)
{
if(k2 == 0)
{
delay(5);
if(k2 == 0) //如果掃描是按鍵有效值則進行處理
{
flag7 = 0;
flag8 = 1;
if(i == 0)
LCD12864_WriteCmd(0x01);//輸入是第一個字符的時候需要把改行清空,方便觀看密碼
if(p==1)//修改個人密碼
{
LCD12864_SetWindow(0,0,"修改個人密碼");
LCD12864_SetWindow(1,2,"新密碼");
LCD12864_SetWindow(2,1,"請輸入密碼");
LCD12864_WriteCmd(0x0c);
}
if(p==0)//修改管理員密碼
{
LCD12864_SetWindow(0,0,"修改管理員密碼");
LCD12864_SetWindow(1,2,"新密碼");
LCD12864_SetWindow(2,1,"請輸入密碼");
LCD12864_WriteCmd(0x0c);
}
for(i = 0; i < 8 ; i++) //密碼是8位,大于8位時不再輸入按鍵值
{
delay(10);
m=0XFF;
while(m==0XFF)
{
m=KeyPro(); //掃描鍵盤
if(m == 11)
{
delay(20);
if(m == 11)
{
i= -1; //計數清零
LCD12864_SetWindow(2,0," ");
}
}
}
delay(10);
if(m != 11)
{
if(m >= 10)
{
i--;
}
if(i==0)
LCD12864_SetWindow(2,0,"* ");
if( m>=0 && m<10 ) //設置密碼數位為0~9有效
{
LCD12864_char(2,i,'*'); //星號(*)
if(p == 1)
{
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
密碼鎖1.12864 720.zip
(152.87 KB, 下載次數: 107)
2018-8-1 15:20 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
qcyqcy
時間:
2019-12-31 23:17
樓主仿真有沒有
作者:
hack778
時間:
2020-2-13 20:40
謝謝老板
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1