资源
工程文件压缩包
链接:https://pan.baidu.com/s/1zTLkDFnQD21Dyc9uZyeOew
提取码:otin
效果
密码不匹配
输入溢出
密码正确
main函数
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
//初始化输入
void Init(unsigned char *s,unsigned char len){
unsigned char i=0;
for(i;i<len;i++){
s[i]='0';
}
}
//获取键盘输入
unsigned char get_matrix(){
unsigned char ret=-1;
P1=0xff;
while(1){
//扫描第4列
P1_0=0x0;P1_1=0x1;P1_2=0x1;P1_3=0x1;//0000 1110
if(P1_4==0) {ret=-1;break;}
if(P1_5==0) {ret=11;break;}
if(P1_6==0) {ret=7 ;break;}
if(P1_7==0) {ret=3 ;break;}
//扫描第3列
P1_0=0x1;P1_1=0x0;P1_2=0x1;P1_3=0x1;//0000 1101
if(P1_4==0) {ret=-1;break;}
if(P1_5==0) {ret=10;break;}
if(P1_6==0) {ret=6 ;break;}
if(P1_7==0) {ret=2 ;break;}
//扫描第2列
P1_0=0x1;P1_1=0x1;P1_2=0x0;P1_3=0x1;//0000 1011
if(P1_4==0) {ret=-1;break;}
if(P1_5==0) {ret=9 ;break;}
if(P1_6==0) {ret=5 ;break;}
if(P1_7==0) {ret=1 ;break;}
//扫描第1列
P1_0=0x1;P1_1=0x1;P1_2=0x1;P1_3=0x0;//0000 0111
if(P1_4==0) {ret=-1;break;}
if(P1_5==0) {ret=8 ;break;}
if(P1_6==0) {ret=4 ;break;}
if(P1_7==0) {ret=0 ;break;}
}
return ret;
}
//判断输入与密码是否相等
unsigned char Equal(unsigned char *s0,unsigned char *s1,unsigned char len){
unsigned char ret=1;
unsigned char i=0;
for(i;i<len;i++){
if(s0[i]!=s1[i]){
ret=0;
break;
}
}
return ret;
}
void main(){
unsigned char Passwd[]={'4','3','9','9'};
unsigned char Input[4];
unsigned char i=0;
unsigned char ret;
Init(Input,4);//Input置0
LCD_Init();
LCD_ShowString(1,1,"Password:");
LCD_ShowString(2,1,Input);
while(1){
ret=get_matrix();//无输入返回 -1
if(ret>=0 && ret<=9){//输入0~9
if(i<4){
Input[i++]+=ret;
LCD_ShowString(2,1,Input);
LCD_ShowString(2,5," ");
}
else{
LCD_ShowString(2,13,"Over");
}
}
if(ret==10){//确认
if(Equal(Input,Passwd,4)){
LCD_ShowString(1,15,"OK");
}
else{
LCD_ShowString(1,14,"ERR");
Init(Input,4);
LCD_ShowString(2,1,Input);
LCD_ShowString(2,5," ");
}
i=0;
LCD_ShowString(2,13," ");
}
if(ret==11){//取消
Init(Input,4);
LCD_ShowString(2,1,Input);
LCD_ShowString(2,5," ");
LCD_ShowString(2,13," ");
LCD_ShowString(1,14," ");
i=0;
}
Delays(1);
}
}