项目概要:利用C52cpu,矩阵键盘,LCD1602制作一个4位密码锁
电路图
因为开发板中矩阵键盘模块中的P10P11P12P13会与另一个模块冲突,所以矩阵键盘选择逐列扫描(按键会有高低电平触发交流引起蜂鸣器响,至P10 P11P12 P13稳定,利用P14 P15 P16 P17来判断哪一个按键触发)
main.c
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "Key.h"
int Result=0;
unsigned char KeyNum;
unsigned int Password,Count;
void main()
{
LCD_Init();//LED初始化
LCD_ShowString(1,3,"KeyNumber");
while(1)
{KeyNum=KeyBoard();
if(KeyNum)
{
if(KeyNum<=10)
{
if(Count<4)//判断小于4位可以进入
{
Password*=10;//左移一位
Password+=KeyNum%10;//获取一位密码
Count++;//自增到4 密码四位
}
}
LCD_ShowNum(2,1,Password,4);//显示LCD
if(KeyNum==11)//确认
{
if(Password==1115)//密码正确
{
LCD_ShowString(1,14,"OK!");
Password=0;//密码清0
Count=0;//读数清0 可以重新输入
LCD_ShowNum(2,1,Password,4);
}
else
{
LCD_ShowString(1,14,"ERR!");//错误
Password=0;
Count=0;
LCD_ShowNum(2,1,Password,4);
}
}
if(KeyNum==12)//取消
{
LCD_ShowString(1,14," ");
Password=0;
Count=0;
LCD_ShowNum(2,1,Password,4);
}
}
}
}
key.c
#include "Key.h"
#include <REGX52.H>
#include "Delay.h"
unsigned char KeyBoard()
{
unsigned char KeyNumber=0;
P1=0XFF;//将矩阵键盘全部IO口置1 分段判断
P1_3=0;//第一列
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}//第一行
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}//第二行
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}//第三行
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}//第四行
P1=0XFF;
P1_2=0;//第二列
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
P1=0XFF;
P1_1=0;//第三列
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
P1=0XFF;
P1_0=0;//第四列
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
return KeyNumber;
}