按行列键盘0~9输入六位密码数据存储到AT24C02,按“=”键从AT24C02中读取数据并在液晶屏中显示,再按“+/-”清屏。
按行列键盘0~9输入六位密码,按“=”验证密码,正确显示“TURE”,并且亮绿灯;错误显示“FLASE”,并且亮红灯,蜂鸣器响起。
如果输入验证密码过程中输入错误,可按“%”退位,也可按“?”清除所有密码。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg52.H>
- #include "LCD1602_run.h"
- #include "LCD1602_mid_run.h"
- #include "keypad.h"
- #include "timer_Init.h"
- #include "iic.h"
- #include "at24c02.h"
- #include <string.h>
- sbit LedRed = P0^0;
- sbit LedGreen = P0^1;
- void main()
- {
- unsigned char Cou;
- unsigned char KeyBuff[7];
- unsigned char KeyPassword[7];
- unsigned char i;
- unsigned char KeyBuffIndex=0;
- unsigned char KeyBuffIndex2=0;
- Timer_Init();
- LCD_initial();
- P0=0xff;
- while(1)
- {
- if((KeyNum <= '9') && (KeyNum >= '0') && (KeyNum != '=')&& (KeyNum != 'c')) /*存密码*/
- {
-
- KeyBuff[KeyBuffIndex] = KeyNum;
- At24c02_Write_Add(KeyBuffIndex, KeyNum);
- // LCD1602_write_char( 0,KeyBuffIndex,' ');
- LCD1602_write_char( 0,KeyBuffIndex,'*');
-
- KeyBuffIndex++;
- if(KeyBuffIndex == 6)
- {
- KeyBuff[KeyBuffIndex] = '\0';
- KeyBuffIndex = 0;
- }
- while(KeyNum != 0x11);
- }
-
- if(KeyNum == '=')/*显示存储密码*/
- {
-
- LCD_write_cmd(0X01);
- while(KeyNum != 0x11);
- for(i = 0; i < 6; i++)
- {
- KeyPassword [i] = At24c02_Read_Add(i);
- }
- KeyPassword [i] = '\0';
- LCD1602_write_string(1,0,KeyPassword);
- Cou = 0;
-
- }
-
- if(KeyNum == 'c') /*清屏*/
- {
-
- while(KeyNum != 0x11);
- LCD_write_cmd( 0x01 );
- break;
- }
- }
-
- while(1)
- {
- if((KeyNum <= '9') && (KeyNum >= '0') && (KeyNum != '=') && (KeyNum != '%') && (KeyNum != '?') ) /*输入密码*/
- {
- KeyBuff[KeyBuffIndex2] = KeyNum;
- // LCD1602_write_char( 1,KeyBuffIndex2,KeyNum);
- LCD1602_write_char( 0,KeyBuffIndex2,'*');
-
- KeyBuffIndex2 ++;
- if(KeyBuffIndex2 == 6)
- {
- KeyBuff[KeyBuffIndex2] = '\0';
- KeyBuffIndex2 = 0;
- }
-
- //Cou ++;
- while(KeyNum != 0x11);
- }
-
- if( (KeyNum == '%') && (KeyBuffIndex2 > 0 ) ) /*退位*/
- {
- KeyBuffIndex2 --;
- // KeyBuff[KeyBuffIndex] = KeyNum;
- LCD1602_write_char( 0,KeyBuffIndex2,' ');
- // KeyBuffIndex2 = KeyBuffIndex2 - 1;
- //LCD1602_write_char( 0,KeyBuffIndex2,'*');
- while(KeyNum != 0x11);
- }
-
- if(KeyNum == '?') /*清屏*/
- {
-
- while(KeyNum != 0x11);
- LCD_write_cmd( 0x01 );
- KeyBuffIndex2 = 0;
-
- }
-
- if( KeyNum == '=' )/*检验密码*/
- {
- for(i = 0; i < 6; i++)
- {
- KeyPassword [i] = At24c02_Read_Add(i);
- }
- KeyPassword [i] = '\0';
- LCD_write_cmd( 0x01 );
- if( strcmp( KeyBuff,KeyPassword ) == 0 )
- {
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
密码锁.rar
(115.17 KB, 下载次数: 128)
|