|
51单片机+LCD1602+4*4矩阵键盘做的密码锁
密码可以输入10位数- #include <REGX52.H>
- #include "Delay.h"
- #include "LCD1602.h"
- #include "MatrixKey.h"
- unsigned char KeyNum;
- unsigned long Password,Count;
- void main()
- {
- LCD_Init();
- LCD_ShowString(1,1,"Password:");
- while(1)
- {
- KeyNum=MatrixKey();
- if(KeyNum)
- {
- if(KeyNum<=10) //如果S1~S10按键按下,输入密码
- {
- if(Count<4) //如果输入次数小于4
- {
- Password*=10; //密码左移一位
- Password+=KeyNum%10; //获取一位密码
- Count++; //计次加一
- }
- LCD_ShowNum(2,1,Password,4); //更新显示
- }
- if(KeyNum==11) //如果S11按键按下,确认
- {
- if(Password==2345) //如果密码等于正确密码
- {
- LCD_ShowString(1,14,"OK "); //显示OK
- Password=0; //密码清零
- Count=0; //计次清零
- LCD_ShowNum(2,1,Password,4); //更新显示
- }
- else //否则
- {
- LCD_ShowString(1,14,"ERR"); //显示ERR
- Password=0; //密码清零
- Count=0; //计次清零
- LCD_ShowNum(2,1,Password,4); //更新显示
- }
- }
- if(KeyNum==12) //如果S12按键按下,取消
- {
- Password=0; //密码清零
- Count=0; //计次清零
- LCD_ShowNum(2,1,Password,4); //更新显示
- }
- }
- }
- }
复制代码
- #include <REGX52.H>
- #include "Delay.h"
- /**
- * @brief 矩阵键盘读取按键键码
- * @param 无
- * @retval KeyNumber 按下按键的键码值
- 如果按键按下不放,程序会停留在此函数,松手的一瞬间,返回按键键码,没有按键按下时,返回0
- */
- unsigned char MatrixKey()
- {
- unsigned char KeyNumber=0;
-
- P1=0xFF;
- 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;
- }
复制代码
|
|