亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
基于單片機(jī)+LCD1602的簡易電子密碼鎖程序
[打印本頁]
作者:
楓樹566
時間:
2019-5-13 19:53
標(biāo)題:
基于單片機(jī)+LCD1602的簡易電子密碼鎖程序
//程序移植時,請注意修改I/O端口
/*-----------------------------------------------
名稱:基于1602的簡易密碼鎖
描述:當(dāng)密碼驗證正確后,會在1602上顯示: password right!
密碼驗證錯誤時,會在1602上顯示: password error!
矩陣按鍵分布: 0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
矩陣按鍵功能:11:功能選擇界面 0:輸入密碼開鎖界面(這里以1602顯示password right!代表開鎖成功)
13:修改密碼界面 1~9:為密碼元素 15:驗證密碼
14:撤銷誤操作輸入的錯誤密碼元素
具體流程如下:
程序燒錄到單片機(jī)后,1602會顯示:“ Welcome! Input password! ”
這時按按鍵11,進(jìn)入功能選擇界面,1602會顯示:“ 0:enter mima 13:alter mima ”
如果按按鍵0,1602會顯示:“ password: ”
那么此時你就可以按按鍵1~9輸入密碼(我的初始密碼為12345678)輸入完成后按按鍵15,
如果密碼正確,1602會顯示:“ password right! ”,否則,1602顯示:“ password error! ”。
這時可以再按按鍵0,重新輸入密碼。
在1602顯示:“ password right! ”或“ password error! ”狀態(tài)下,按按鍵11,返回功能界面。
如果按按鍵13,1602會顯示:“ old password: ”,這時需要輸入舊密碼(我這里輸入12345678);
輸入完成后按按鍵15,如果舊密碼正確,1602會快速顯示:“ oldpassword right! ”,然后顯示:
“ new password: ”,這時輸入8位新密碼后,1602會顯示:“ alter success! ”。這時按按鍵11,返回
功能界面。
------------------------------------------------*/
#include <stc8.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#include <stdio.h>
#include "1602.h"
#include "delay.h"
#include "key.h"
#include "intrins.h"
#include "AT24C0X.h"
unsigned char password[8]={1,2,3,4,5,6,7,8};// 可以更改此密碼做多組測試
u16 bool = 0;
/*------------------------------------------------
主程序
------------------------------------------------*/
void main()
{
unsigned char keyvalue = '#',i=0,j=0,val=0x00;
bit Flag=0 , flag=0 ,flag_ok=0,flag_enter=0; // Flag用于判斷密碼對錯標(biāo)志,flag用于是否進(jìn)入密碼輸入界面
u8 table[8] = {0}; // 用于接收輸入的密碼,用于與設(shè)定的密碼進(jìn)行對比工作
u8 newtable[8] = {0}; // 用于存儲輸入的新密碼
// 將初始化密碼寫入AT24C04中
write_24c04(0x00,password[0]);
DELAY();
write_24c04(0x01,password[1]);
DELAY();
write_24c04(0x02,password[2]);
DELAY();
write_24c04(0x03,password[3]);
DELAY();
write_24c04(0x04,password[4]);
DELAY();
write_24c04(0x05,password[5]);
DELAY();
write_24c04(0x06,password[6]);
DELAY();
write_24c04(0x07,password[7]);
DELAY();
LCD_Init(); // 初始化液晶屏
DelayMs(10); // 延時用于穩(wěn)定,可以去掉
LCD_Clear(); // 清屏
LCD_Write_String(0,0," Welcome!"); // 寫入第一行信息,主循環(huán)中不再更改此信息,所以在while之前寫入
LCD_Write_String(0,1,"Input password!"); // 寫入第二行信息,提示輸入密碼
while (1) // 主循環(huán)
{
keyvalue = key_scan(); // 掃描鍵盤
if(keyvalue == 11)
{
LCD_Clear();
LCD_Write_String(0,0,"0 : enter mima");
LCD_Write_String(0,1,"13: alter mima");
flag = 1;
}
// 進(jìn)入密碼輸入界面
if((keyvalue == 0) && (flag==1))
{
LCD_Clear();
LCD_Write_String(0,0,"password:");
i=0;
flag=2;
while(1)
{
keyvalue = key_scan();
if((keyvalue != '#') && (flag==2)) // 輸入的密碼顯示
{
if(keyvalue > 0 && keyvalue <= 9)
{
switch(bool)
{
case 0:
if(i==8)
{
i=0;break;
}
table[i]=keyvalue;
LCD_Write_Com(0xc0+i);
LCD_Write_Data(0x30+keyvalue);
i++;
DelayMs(300);
break;
}
}
}
if((keyvalue == 15)&&(flag==2)) // 驗證密碼
{
val = 0x00;
// 從at24c04中讀出密碼
password[0] = read_24c04(0x00);
DELAY();
password[1] = read_24c04(0x01);
DELAY();
password[2] = read_24c04(0x02);
DELAY();
password[3] = read_24c04(0x03);
DELAY();
password[4] = read_24c04(0x04);
DELAY();
password[5] = read_24c04(0x05);
DELAY();
password[6] = read_24c04(0x06);
DELAY();
password[7] = read_24c04(0x07);
DELAY();
if(i != 0)
{
for(j=i;j<8;j++)
table[i] = 0;
}
for(j=0;j<8;j++)
{
if(password[j]!=table[j])
{
LCD_Clear();
LCD_Write_String(0,0,"password error!");
Flag = 1; //密碼錯誤標(biāo)志
i=0;
//該注釋代碼用于密碼輸入錯誤時,查看正確密碼
// for(j=0;j<8;j++)
// {
// LCD_Write_Com(0xc0+j);
// LCD_Write_Data(0x30+password[j]);
// }
break;
}
}
if(!Flag) // 密碼正確
{
LCD_Clear();
LCD_Write_String(0,0,"password right!");
i=0;
}
Flag=0;
for(j=0;j<8;j++)
table[j] = 0;
break;
}
if((keyvalue==14)&&(flag==2)) // 撤銷錯誤密碼元素
{
i=i-1;
table[i]=0;
LCD_Write_Com(0xc0+i);
LCD_Write_Data(' ');
}
}
}
// 修改密碼界面
if((keyvalue == 13) && (flag == 1))
{
LCD_Clear();
LCD_Write_String(0,0,"old password:");
flag=3;
flag_ok = 0;
flag_enter = 0;
for(j=0;j<8;j++)
newtable[j]=0;
i=0;
while(1)
{
keyvalue = key_scan();
if((keyvalue != '#') && (flag==3)) // 輸入的密碼顯示
{
if(keyvalue > 0 && keyvalue <= 9)
{
switch(bool)
{
case 0:
if(i==8)
{
i=0;break;
}
if(flag_ok==1)
{
newtable[i]=keyvalue;
LCD_Write_Com(0xc0+i);
LCD_Write_Data(0x30+keyvalue);
i++;
DelayMs(300);
}
if(flag_ok==0)
{
table[i]=keyvalue;
LCD_Write_Com(0xc0+i);
LCD_Write_Data(0x30+keyvalue);
i++;
DelayMs(300);
}
break;
}
}
}
if((keyvalue == 15)&&(flag==3)) // 驗證密碼
{
val = 0x00;
for(j=0;j<8;j++) // 從at24c04中讀出密碼
{
password[j] = read_24c04(val);
DELAY();
val = val + 0x01;
if(j==8)
val=0x00;
}
if((i!=0)&&(table[i]!=0))
{
for(j=i;j<8;j++)
table[j] = 0;
}
if((i!=0)&&(newtable[i]!=0))
{
for(j=i;j<8;j++)
newtable[j]=0;
}
for(j=0;j<8;j++)
{
if(password[j]!=table[j])
{
LCD_Clear();
LCD_Write_String(0,0,"oldpassword err!");
Flag = 1; //密碼錯誤標(biāo)志
flag_ok = 0;
i=0;
break;
}
}
if(!Flag) // 密碼正確
{
LCD_Clear();
LCD_Write_String(0,0,"oldpassword ok!");
DelayMs(1000);
DelayMs(1000);
DelayMs(1000);
DelayMs(1000);
flag_ok = 1;
LCD_Clear();
LCD_Write_String(0,0,"new password:");
i=0;
}
Flag=0;
for(j=0;j<8;j++)
table[j] = 0;
}
if((keyvalue==14)&&(flag==3)) // 撤銷錯誤密碼元素
{
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
#include <stc8.h>
#include <stdio.h>
#include "1602.h"
#include "delay.h"
#include "key.h"
#include "intrins.h"
#include "AT24C0X.h"
unsigned char password[8]={1,2,3,4,5,6,7,8}; //初始密碼
u16 bool = 0;
void main()
{
unsigned char keyvalue = '#',i=0,j=0,val=0x00;
bit Flag=0 , flag=0 ,flag_ok=0; // Flag標(biāo)志,用于判斷密碼真假。flag標(biāo)志,用于是進(jìn)密碼輸入界面還是修改密碼界面
// flag_ok標(biāo)志,用于區(qū)別此時輸入的是舊密碼還是新密碼
u8 table[8] = {0}; // 用于存儲輸入的數(shù)字,與密碼比較時使用
u8 newtable[8] = {0}; // 用于存儲輸入的新密碼
// 將初始密碼寫入到at24c04中
write_24c04(0x00,password[0]);
DELAY();
write_24c04(0x01,password[1]);
DELAY();
write_24c04(0x02,password[2]);
DELAY();
write_24c04(0x03,password[3]);
DELAY();
write_24c04(0x04,password[4]);
DELAY();
write_24c04(0x05,password[5]);
DELAY();
write_24c04(0x06,password[6]);
DELAY();
write_24c04(0x07,password[7]);
DELAY();
LCD_Init(); // 1602液晶初始化
DelayMs(10);
LCD_Clear(); // 清屏
LCD_Write_String(0,0," Welcome!");
LCD_Write_String(0,1,"Input password!")
while (1)
{
keyvalue = key_scan(); // 按鍵掃描
if(keyvalue == 11)
{
LCD_Clear();
LCD_Write_String(0,0,"0 : enter mima");
LCD_Write_String(0,1,"13: alter mima");
flag = 1;
}
// 進(jìn)入輸入密碼界面
if((keyvalue == 0) && (flag==1))
{
LCD_Clear();
LCD_Write_String(0,0,"password:");
i=0;
flag=2;
while(1)
{
keyvalue = key_scan();
if((keyvalue != '#') && (flag==2)) //輸入密碼
{
if(keyvalue > 0 && keyvalue <= 9)
{
switch(bool)
{
case 0:
if(i==8)
{
i=0;break;
}
table=keyvalue;
LCD_Write_Com(0xc0+i);
LCD_Write_Data(0x30+keyvalue);
i++;
DelayMs(300);
break;
}
}
}
if((keyvalue == 15)&&(flag==2)) // 驗證密碼
{
val = 0x00;
// 從at24c04中讀取密碼
password[0] = read_24c04(0x00);
DELAY();
password[1] = read_24c04(0x01);
DELAY();
password[2] = read_24c04(0x02);
DELAY();
password[3] = read_24c04(0x03);
DELAY();
password[4] = read_24c04(0x04);
DELAY();
password[5] = read_24c04(0x05);
DELAY();
password[6] = read_24c04(0x06);
DELAY();
password[7] = read_24c04(0x07);
DELAY();
if(i != 0)
{
for(j=i;j<8;j++)
table = 0;
}
for(j=0;j<8;j++)
{
if(password[j]!=table[j])
{
LCD_Clear();
LCD_Write_String(0,0,"password error!");
Flag = 1; //密碼錯誤標(biāo)志
i=0;
//該注釋代碼用于密碼錯誤時,提示正確密碼,調(diào)試時使用
// for(j=0;j<8;j++)
// {
// LCD_Write_Com(0xc0+j);
// LCD_Write_Data(0x30+password[j]);
// }
break;
}
}
if(!Flag) //密碼正確
{
LCD_Clear();
LCD_Write_String(0,0,"password right!");
i=0;
}
Flag=0;
for(j=0;j<8;j++)
table[j] = 0;
break;
}
if((keyvalue==14)&&(flag==2)) // 撤銷錯誤密碼元素
{
i=i-1;
table[ i ]=0;
LCD_Write_Com(0xc0+i);
LCD_Write_Data(' ');
}
}
}
// 修改密碼界面
詳情請下載文件。
復(fù)制代碼
全部資料51hei下載地址:
基于1602的電子密碼鎖源碼.rar
(88.01 KB, 下載次數(shù): 43)
2019-5-13 19:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1