所用模塊含:EEPROM,LCD1602,矩陣按鍵,無源蜂鳴器,LED
IMG_20210716_170500.jpg (2.39 MB, 下載次數: 82)
下載附件
2021-7-16 17:06 上傳
IMG_20210716_170449.jpg (2.94 MB, 下載次數: 65)
下載附件
2021-7-16 17:06 上傳
IMG_20210716_170435.jpg (3.2 MB, 下載次數: 71)
下載附件
2021-7-16 17:06 上傳
單片機源程序如下:
- #include <reg52.h>
- #include <string.h>
- #include "eeprom.h"
- #include "iic.h"
- #include "keyboard.h"
- #include "lcd1602.h"
- #include "sound.h"
- sbit led2=P2^3; //連D2
- sbit led3=P2^2; //連D4
- typedef unsigned char uchar;
- typedef unsigned int uint;
- void Init_Timer1(void);
- uchar code password[]={'1','0','0','8','6'}; //注意要以字符形式存
- bit sign;
- #define Clear {length=0;password_length=0;num=0;i=0;input_times=0;flag=0;sign=0;led=1;}
-
- void main()
- {
- uchar length,password_length; //實際密碼長度,輸入密碼長度
- uchar num,i;
- uchar password_temp[16]={0}; //輸入密碼
- uchar input_times; //記錄輸入錯誤次數
- bit flag;
-
- label:
- Clear
- length = sizeof(password) / sizeof(password[0]);
- EEPROM_Write(password, 1, length);
- EEPROM_Read(password, 1,length);
- LCD_Init();
- Init_Time0();
- LCD_Clear();
- LCD_Write_String(0,0,"LCD Cipher Lock");
- LCD_Write_String(0,1," --Yanglizidi ");
- while(1)
- {
- num=KeyDriver();
-
- if(num!=0xff) //如果掃描是按鍵有效值則進行處理
- {
- led2=1;
- if(i==0) //輸入是第一個字符的時候需要把改行清空,方便觀看密碼
- {
- LCD_Clear();
- LCD_Write_String(0,0," Yanglizidi ");
- }
- if(i<16)
- {
- password_temp[i]=num;
- LCD_Write_Char(i,1,'*'); //輸入的密碼用"*"代替
- }
- i++;
- if( (num=='f') || (i==16) ) // 'f'為確認鍵,當按下確認鍵和密碼長度達到16,則開始比對
- {
- password_length=i-1; // 輸入的密碼長度計算
- i=0;
- if(password_length == length)//長度相等則比較,否則直接輸出錯誤
- {
- flag=0;
- if(strncmp(password_temp,password,length) == 0)
- {
- flag=1;
- }
- }
- if(flag)
- {
- LCD_Clear();
- LCD_Write_String(0,0," Yanglizidi ");
- LCD_Write_String(0,1,"Right-->Open!>>> ");
- input_times=0;
- led2=0;
- flag=0;
- }
- else
- {
- LCD_Clear();
- LCD_Write_String(0,0," Yanglizidi ");
- LCD_Write_String(0,1,"Wrong ! Retry ! ");
- input_times++;
- if(input_times==3)
- {
- LCD_Clear();
- LCD_Write_String(0,0," Wrong 3 times !");
- LCD_Write_String(0,1," Wait a minute !");
- Init_Timer1();
- while(1)
- {
- Sound_DIDA();
- if(sign==0)
- goto label;
- }
- }
- }
- }
- }
- }
- }
- void Init_Timer1()
- {
- TMOD |=0x10;
- TH1=0x4c;
- TL1=0x00; // 定時50ms
- ET1=1;
- sign=1;
- EA=1;
- TR1=1;
- led3=0;
- }
- void Timer1() interrupt 3
- {
- static uint k;
- TH1=0x4c;
- TL1=0x00; // 定時50ms
- k++;
- if(k==1200) //1 min
- {
- k=0;
- TR1=0;
- sign=0;
- led3=1;
- }
- }
復制代碼
所有代碼51hei附件下載:
LCD1602密碼鎖.7z
(37.76 KB, 下載次數: 26)
2021-7-16 17:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|