標(biāo)題:
用24c04與1602液晶屏設(shè)計(jì)的簡易加密電子鎖 程序+原理圖+仿真下載
[打印本頁]
作者:
2947450351
時(shí)間:
2015-11-1 17:18
標(biāo)題:
用24c04與1602液晶屏設(shè)計(jì)的簡易加密電子鎖 程序+原理圖+仿真下載
用24c04與1602液晶屏設(shè)計(jì)的簡易加密電子鎖源程序+仿真文件下載:
用24c04與1602液晶屏設(shè)計(jì)的簡易加密電子鎖.rar
(96 KB, 下載次數(shù): 228)
2015-11-4 00:58 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
主程序預(yù)覽:
#include"LCD1602.h"
#include"AT24C04.h"
//上次按鍵和當(dāng)前按鍵序號,該矩陣中序號范圍為0~15,16表示無按鍵
INT8U Key_Value = 0xFF, Pre_KeyNo = 0xFF;
INT8U DSY_BUFFER[10]= ""; //顯示緩沖區(qū)
INT8U UserPassword[7]; //用戶輸入密碼
INT8U I2C_Password[7]; //從I2C存儲器讀取的密碼
sbit LED_OPEN = P2^7; //開鎖亮燈
sbit BEEP = P3^7; //蜂鳴器
void Beep();
void Clear_Pwd();
void Read_I2C_Pwd();
void Write_I2C_Pwd();
void Keys_Scan();
//----------主程序------------
void main()
{
INT8U i = 0;
INT8U IS_Valid_User = 0;
P0 = 0xFF; P1 = 0xFF; P2 = 0xFF;
Delay_ms(10);
Init_LCD(); //初始化LCD
Write_LCD_String(0, 0, "Your Password...");
Read_I2C_Pwd(); //將密碼讀入I2C
while(1)
{
P1 = 0x0F;
while(P1 == 0x0F); Keys_Scan();
Pre_KeyNo = Key_Value; //掃描鍵盤獲取鍵序號
switch(Pre_KeyNo)
{
case 0: case 1: case 2: case 3: case 4:
case 5: case 6: case 7: case 8: case 9:
if(i <= 5)
{
//如果i為0則執(zhí)行一次清屏
if(i == 0) Write_LCD_String(1, 0, " ");
UserPassword[i] = Pre_KeyNo + '0';
UserPassword[i+1] = '\0';
DSY_BUFFER[i] = '*';
DSY_BUFFER[i+1] = '\0'; i++;
Write_LCD_String(1, 0,DSY_BUFFER );
} break;
case 10: //按A鍵開鎖
Read_I2C_Pwd(); //從I2C存儲器讀回密碼
if(strcmp(UserPassword,I2C_Password) == 0)
{
LED_OPEN = 0; //點(diǎn)亮LED
Clear_Pwd();
Write_LCD_String(1, 0, "Unlock OK! ");
IS_Valid_User = 1;
}
else
{
LED_OPEN = 1; //關(guān)閉LED
Clear_Pwd();
Write_LCD_String(1, 0, "ERROR ! ");
IS_Valid_User = 0;
}
i = 0; break;
case 11: //按B鍵上鎖
LED_OPEN = 1;
Clear_Pwd();
Write_LCD_String(0, 0, "Your Password... ");
Write_LCD_String(1, 0, " ");
i = 0; IS_Valid_User = 0; break;
case 12: //按C鍵設(shè)置新密碼
//如果是合法用戶則提示輸入新密碼
if(!IS_Valid_User)
Write_LCD_String(1, 0, "No right ! ");
else
{
i = 0; //密碼輸入緩沖索引歸零
Write_LCD_String(0, 0, "New Password:... ");
Write_LCD_String(1, 0, " ");
} break;
case 13: //按D鍵保存新密碼
if(!IS_Valid_User)
Write_LCD_String(1, 0, "No right ! ");
else
{
//寫入新設(shè)置的密碼,并重新讀回
Write_I2C_Pwd(); Delay_ms(5); Read_I2C_Pwd();
i = 0; //密碼輸入緩沖索引歸零
Write_LCD_String(0, 0, "Your Password ... ");
Write_LCD_String(1, 0, "Password Saved ! ");
} break;
case 14: //按E鍵消除所有輸入
i = 0; Clear_Pwd();
Write_LCD_String(0, 0, "Your Password... ");
Write_LCD_String(1, 0, " ");
}
Beep(); Delay_ms(100);
while(P1 != 0xF0); //如果有鍵未釋放則等待
}
}
//-----------蜂鳴器子程序------------
void Beep()
{
INT8U i;
for(i = 0; i < 100; i++)
{
Delay_ms(1);
BEEP = ~BEEP;
}
BEEP = 0;
}
//------------清除密碼--------------
void Clear_Pwd()
{
UserPassword[0] = '\0';
DSY_BUFFER[0]='\0';
}
//----------讀取密碼字符串(以'\0'為結(jié)束標(biāo)志)----------
void Read_I2C_Pwd()
{
INT8U i = -1; //只限于讀取存儲器前半部分
do { i++; I2C_Password[i] = Random_Read(0xA0,(INT16U)i); }
while(I2C_Password[i] != '\0' && i < 6);
//如果循環(huán)結(jié)束后未遇到結(jié)束標(biāo)志,則直接在字符串末尾補(bǔ)上結(jié)束標(biāo)志
if(I2C_Password[i] != '\0') I2C_Password[i] = '\0';
}
//----------寫密碼字符串(結(jié)束標(biāo)志'\0'注意一并寫入)---------
void Write_I2C_Pwd()
{
INT8U i = 0;
//循環(huán)寫入密碼字符,字符串末尾的'\0'也要寫入,最多7個(gè)字符
while(i <= 6)
{
Random_Write(0xA0, i,UserPassword[i]); Delay_ms(5);
if(UserPassword[i] == '\0') break;
i++;
}
//如果循環(huán)結(jié)束時(shí)密碼字符串末尾未遇到'\0'則直接向I2C補(bǔ)充寫入'\0'
if(UserPassword[i] != '\0') Random_Write(0xA0, i,'\0');
}
//-----------------鍵掃描------------------------------------
void Keys_Scan()
{
/*列判斷*/
P1 = 0x0F; Delay_ms(1);
if(P1 == 0x0F)
{
Key_Value = 0xFF; return;
}
switch(P1)
{
case 0x0E: Key_Value = 0; break;
case 0x0D: Key_Value = 1; break;
case 0x0B: Key_Value = 2; break;
case 0x07: Key_Value = 3; break;
default : Key_Value = 0xFF; return;
}
/*行判斷*/
P1 = 0xF0; Delay_ms(1);
switch(P1)
{
case 0xE0: Key_Value += 0; break;
case 0xD0: Key_Value += 4; break;
case 0xB0: Key_Value += 8; break;
case 0x70: Key_Value += 12; break;
default : Key_Value = 0xFF;
}
}
復(fù)制代碼
作者:
niyaolin
時(shí)間:
2017-3-26 16:24
66666厲害額大神6666
作者:
2408150817
時(shí)間:
2018-12-18 09:55
y有沒有點(diǎn)h文件
作者:
820590074
時(shí)間:
2018-12-18 11:03
可以,玩玩。
作者:
chj666326
時(shí)間:
2022-4-5 19:15
666簡直是寶地
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1