按行列鍵盤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, 下載次數: 129)
2018-12-10 09:42 上傳
點擊文件名下載附件
|