当前位置:首页 > 基于51单片机密码锁课程设计报告
case (0x84): k='B';break; case (0x12): k=7;break; case (0x22): k=8;break; case (0x42): k=9;break; case (0x82): k='C';break; case (0x11): k='*';break; case (0x21): k=0;break; case (0x41): k='#';break; case (0x81): k='D';break; }
return(k); }
//=====================按键检测并返=============================== unsigned char keynum(void) {
unsigned char 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); return (row|col); //行线与列线组合后返回 }
else return 0; //无键按下时返回0 }
//=======================一声提示音,表示有效输入======================== voidOneAlam(void) {
ALAM=0;
Delay5Ms(); ALAM=1; }
//========================二声提示音,表示操作成功======================== voidTwoAlam(void) {
ALAM=0;
Delay5Ms(); ALAM=1; Delay5Ms(); ALAM=0;
Delay5Ms(); ALAM=1; }
//========================三声提示音,表示错误======================== voidThreeAlam(void) {
ALAM=0;
Delay5Ms(); ALAM=1; Delay5Ms(); ALAM=0;
Delay5Ms(); ALAM=1; Delay5Ms(); ALAM=0;
Delay5Ms(); ALAM=1; }
//=====================显示输入的N个数字,用H代替以便隐藏============================
voidDisplayOne(void) {
// DisplayOneChar(9+N,1,'*'); write_1602com(yi+5+N); write_1602dat('*'); }
//=======================显示提示输入========================= voidDisplayChar(void) {
unsigned char i; if(pass==1) {
//DisplayListChar(0,1,LockOpen); write_1602com(er); for(i=0;i<16;i++) {
write_1602dat(LockOpen[i]); } } else {
if(N==0) {
//DisplayListChar(0,1,Error); write_1602com(er); for(i=0;i<16;i++) {
write_1602dat(Error[i]); } } else {
//DisplayListChar(0,1,start_line); write_1602com(er); for(i=0;i<16;i++) {
write_1602dat(start_line[i]); } } } }
voidDisplayInput(void) {
unsigned char i;
if(CorrectCont==1) {
//DisplayListChar(0,0,Input); write_1602com(er); for(i=0;i<16;i++) {
write_1602dat(Input[i]); } } }
//========================重置密码==================================================
//==================================================================================
voidResetPassword(void) {
unsigned char i; unsigned char j; if(pass==0) {
pass=0;
DisplayChar(); ThreeAlam(); } else {
if(ReInputEn==1) {
if(N==6) {
ReInputCont++; if(ReInputCont==2) {
for(i=0;i<6;) {
if(TempPassword[i]==InputData[i]) //将两次输入的新密码作对比
i++; else {
//DisplayListChar(0,1,Error); write_1602com(er); for(j=0;j<16;j++) {
共分享92篇相关文档