欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機做電子密碼鎖Proteus仿真程序
[打印本頁]
作者:
yh15735986884
時間:
2020-6-28 22:00
標題:
51單片機做電子密碼鎖Proteus仿真程序
51單片機做電子密碼,第一次發(fā)帖都在附件里了,不會上傳圖片
51hei圖片20200628215730.png
(75.12 KB, 下載次數(shù): 28)
下載附件
2020-6-28 21:58 上傳
單片機源程序如下:
#include<AT89x51.h>
#include"intrins.h"
#include"key.h"
#include"xsh.h"
#include"24c02.h"
#define ulong unsigned long
bit BJCB=0;//報警標志
XG=0,//修改密碼標志位
BJ=0,//報警標志位
SJ=0;//鎖鍵盤標志位
// xg=0;//修改密碼標志位
uchar PSWD0_0[16]={0};//密碼輸入緩存存儲單元
//uchar code PSWD0_1[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};//用戶初始密碼存儲單元
//uchar PSWD1_0[16]={0};//讀出密碼緩存存儲單元
uchar PSWD1_1[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};////管理員初始密碼存儲單元
sbit OUT=P3^5;//輸出端口
sbit L1=P0^2;//上電指示
sbit L2=P0^1;//開鎖指示
sbit L3=P0^0;//報警指示
uint mg=0,//密碼個數(shù)
KSC=0,//開鎖次數(shù)
BJC=0,//報警次數(shù)
TCNTY=0,//用戶按鍵定時次數(shù)累加
TCNTG=0,//管理員輸入密碼定時次數(shù)
yhsh,//用戶輸入標志位
glsh,//管理員輸標志位
shw;//密碼輸完標志位
void yhmimaxig();//密碼修改程序
void glmimaxig();//管理員修改程序
void bjyin(ulong t)
{
ulong c;
uint n;
for(c=0;c<t;c++)
{
for(n=0;n<50;n++); //延時
BEEP=~BEEP; //取反輸出到喇叭的信號
}
}
void delay_10ms(void)
{
uint i = 1000;
while(i--);
}
//////////////定時中斷服務(wù)函數(shù)//////////////////////////////////////
void timer0() interrupt 1
{
uint i;
TH0=(65536-50000)/256; //對TH0 TL0賦值50MS定時
TL0=(65536-50000)%256; //重裝計數(shù)初值
if(yhsh==1)
{
TCNTY++;//用戶定時計數(shù)
if(shw==1)
{
TR0=0;
TCNTY=0;
}
if(TCNTY==400)
{
TR0=0;//關(guān)閉T0定時器
TCNTY=0;
mg=0;//密碼個數(shù)清零
L1=1;
for(i=0;i<2;i++)//聲光報警電路
{
L3=0;
bjyin(1000);
L3=1;
delay(1000);
}
L1=0;
}
}
else if(glsh==1)
{
TCNTG++;//管理員定時計數(shù)
if(shw==1)
{
TR0=0;
TCNTG=0;
}
if(TCNTG==400)
{
TR0=0;//關(guān)閉T0定時器
TCNTG=0;
mg=0;//密碼個數(shù)清零
L1=1;
for(i=0;i<2;i++)//聲光報警電路
{
L3=0;
bjyin(1000);
L3=1;
delay(1000);
}
L1=0;
}
}
}
void main()
{
uint i;
TMOD=0x01; //定時器工作在方式1
ET0=1;
EA=1;
TH0=(65536-50000)/256; //對TH0 TL0賦值
TL0=(65536-50000)%256; //使定時器0.05秒中斷一次
//Read_page24c02(0x00,PSWD1_1,16);//向24c02里讀用戶初始密碼
//i2cWrite24LC16B(0,0X20);
/////////////第一次向24c02里寫入初始管理員密碼、用戶密碼、開鎖次數(shù)/////////////////////
for(i=0;i<16;i++) //用一次寫一個向24c02里寫
{
i2cWrite24LC16B(PSWD1_1[i],i);
delay_10ms;
}
for(i=0;i<16;i++) //用一次寫一個向24c02里寫
{
i2cWrite24LC16B(PSWD1_1[i],0x10+i);
delay_10ms;
} //proteus仿真時用,燒程序時,第一次用,第二次不用。
KSC=i2cRead24LC16B(0X20);
loop: L1=0;//上電紅燈亮
L2=1;//開鎖成功后綠燈亮
L3=1;//輸錯時黃燈亮報警
OUT=0;//開信號關(guān)閉
display_0(KSC);//開鎖前顯示
///////////密碼輸入/////////////////
if(SJ==0)//鎖鍵盤標志位為0
{
do
{
flag=0;//鍵盤標志位
key();
if(flag==1&&num==12) //判斷是否為管理員功能鍵按下
{
goto gl;
}
if(flag==1&&num<=9)
{
PSWD0_0[mg]=num;
mg++;//密碼個數(shù)
}
if(flag==1&&num==14&&mg>=1)//輸入錯誤刪除
{
mg=mg-1;
}
if(mg==1) //有密碼鍵按下開定時器限時
{
TR0=1;
yhsh=1;
}
}
while(num!=15);
if(mg!=16)
{
for(i=mg;i<16;i++)
{
PSWD0_0[i]=0;
}
}
/////////////////密碼比較電路////////////////////////////
if(flag==1&&num==15)
{ flag=0;
yhsh=0;
shw=1;
num=0;
for(i=0;i<16;i++) //從24c02里讀出16個密碼
{
PSWD1_1[i]=i2cRead24LC16B(i);
delay_10ms;
}
for(i=0;i<16;i++)
{
if(PSWD1_1[i]!=PSWD0_0[i])
{
BJCB=1;
break;
}
else
BJCB=0;
}
}
if(BJCB!=0)
{
BJC++;
if(BJC!=3)
{
BJCB=0; //第一次和第二次報警
delay(500);
mg=0;//密碼個數(shù)清零
L1=1;
for(i=0;i<3;i++)//聲光報警電路
{
L3=0;
display_3();
bjyin(1000);
L3=1;
delay(1000);
}
goto loop;
}
else if(BJC==3)
{
BJC=0;
BJCB=0;
display_5();//三次輸入密碼失敗,自鎖
SJ=1;//鎖鍵盤標志位
mg=0;//密碼個數(shù)清零
L1=1;
for(i=0;i<2;i++)//聲光報警電路
{
L3=0;
bjyin(1000);
L3=1;
delay(1000);
}
goto loop;
}
}
else
if(BJCB==0)
{
KSC++;
display_1(KSC);
i2cWrite24LC16B(KSC,0X20);
if(KSC==100)
{
SJ=1;
}
L2=0;
L1=1;
OUT=1;
mg=0;//密碼個數(shù)清零
loop1:do //鍵盤掃描等待功能鍵按下
{
flag=0;
key();
if(flag)
{
flag=0;
switch(num)
{
case 13:
{
display_2();
do
{
flag=0;//鍵盤標志位
key();
if(flag==1&&num<=9)
{
PSWD0_0[mg]=num;
mg++;//密碼個數(shù)
}
if(flag==1&&num==14&&mg>=1)//輸入錯誤刪除
{
mg=mg-1;
}
if(mg==16)
{
do //鍵盤掃描等待功能鍵按下
{
flag=0;
key();
}
while(num!=15);
}
}
while(num!=15);
if(mg!=16&&num==15)
{
for(i=mg;i<16;i++)
{
PSWD0_0[i]=0;
}
}
if(flag==1&&num==15)
{
flag=0;
mg=0;
for(i=0;i<16;i++) //用一次寫一個向24c02里寫
{
i2cWrite24LC16B(PSWD0_0[i],i);
delay_10ms;
}
display_1(KSC);
do //鍵盤掃描等待功能鍵按下
{
flag=0;
key();
}
while(num!=11); //按下返回鍵,鎖鎖返回
{
goto loop;
}
}
};break;
case 11: {
goto loop;
//break;
}
}
}
}
while(flag!=0);//如果設(shè)置密碼鍵按下
goto loop1;
// i2cWrite24c02_page(0x00,PSWD1_1,mg);
}
}
else
{
do
{
flag=0;
key();
}
while(num!=12);//判斷是否為管理員功能鍵按下
gl:do//管理員輸入密碼
{
flag=0;
key();
if(flag==1&&num<=9)
{
PSWD0_0[mg]=num;
mg++;//密碼個數(shù)
}
if(flag==1&&num==14&&mg>=1)//刪除鍵按下
{
mg=mg-1;
}
if(mg==1)
{
TR0=1;
}//開定時器TO限5秒開鎖
}
while(num!=15);
if(mg!=16&&num==15)
{
for(i=mg;i<16;i++)
{
PSWD0_0[i]=0;
}
}
//////////管理員密碼比較///////////////////////
//Read_page24c02(0x10,PSWD0_1,16)
for(i=0;i<16;i++) //從24c02里讀出16個密碼
{
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
0029、密碼鎖.zip
(109.7 KB, 下載次數(shù): 14)
2020-6-28 21:59 上傳
點擊文件名下載附件
原理圖和源程序
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1