欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
全智能密碼鎖程序
[打印本頁]
作者:
das
時間:
2015-4-5 00:46
標題:
全智能密碼鎖程序
//-----------------------------------------------
//-----------------密碼鎖程序--------------------
//-----------------芯片STC89C52RC--晶振11.0592M--
//***********************************************
#include <reg52.h>
#include "AT24C01.C"
#include "LCD1602.C"
//---------------------------
#define uchar unsigned char
#define uint unsigned int
static uchar c=0;
//---------------------------
sbit K0=P0^0;//0
sbit K1=P0^1;//1
sbit K2=P0^2;//2
sbit K3=P0^3;//確認密碼
sbit K4=P0^4;//修改密碼
//---------------------------
sbit LE_LED=P3^4;
sbit LED_LDEOKK=P1^3;
sbit LED_LEDOK=P1^4;
sbit LED_OPEN=P1^5;
sbit beep=P3^3;
//---------------------------
uchar tablee [3]; //鍵值存儲器
uchar tablee2[4]; //常規密碼存儲器
//------------------------------
void delayx(uint i)
{
uint w;
for(w=0;w<i;w++);
}
//------------------------------
void beepo()
{
beep=0;
delayx(5000);
beep=1;
}
//------------------------------數據鍵盤掃描并返回鍵值
shuju_jianpan()
{
uchar a=15;
uchar KEY; //
if(!K0) //0
{
delayx(500);
while(K0==0);
beepo();
a=0;
}
//----------------------
if(!K1) //1
{
delayx(500);
while(K1==0);
beepo();
a=1;
}
//----------------------
if(!K2) //2
{
delayx(500);
while(K2==0);
beepo();
a=2;
}
switch (a)
{
case 0: KEY=0; break;
case 1: KEY=1; break;
case 2: KEY=2; break;
case 15:KEY=15;break;
}
return (KEY);
}
//***********************************************************//
//***********************************************************//
void main()
{
uchar b;
uchar u=0;
uchar e=30;
uchar f=31;
uchar y=32;
uchar nem0=0,nem1=0,nem2=0;
uchar nem3=0,nem4=0,nem5=0;
uchar r=0;
uchar j;
uchar q=0;
uchar h=0;
LE_LED=0;
LCD1602_0(15,0); //顯示PleasePassword
//---------------------------------------------------------
//-----------------------------------------置入初始出廠密碼
if(q==0)
{
init(); //24c01初始化
W_AT24C01(e,2); //寫入初始密碼“111”數據到AT24C01存儲器中保存
delayx(500);
//------------------
init();
W_AT24C01(f,2);
delayx(500);
//------------------
init();
W_AT24C01(y,2);
delayx(500);
q=1;
}
//--------------------------------------------------------------------
tablee2[3]=0;
//--------------------------------------------------------------------
while(1)
{
b=shuju_jianpan(); //數據鍵盤掃描
if(b!=15) //如果b不等于15說明有鍵按下
{
tablee2[c++]=b; //密碼存儲器
LCD1602_0(15,c);
if(c==4)c=0;
b=15;
} //通過計算一下將密碼確認復雜化,這樣可以解決密碼重復按下后確認為錯誤碼密碼,
//如當設置密碼為222時,當按下2222或更多22222的密碼后,可以保證這些是錯誤密碼。
h=((tablee2[2]*5)+(tablee2[1]*3)+tablee2[0]+tablee2[3]);
//========================================
if(!K3) //確認輸入鍵 P0.3
{
c=0; //消除密碼累加的現象
delayx(500);
while(K3==0);
beepo();
//----------------開始密碼比較------------
init();//AT24C01初始化
nem0=R_AT24C01(e);
init();
nem1=R_AT24C01(f);
init();
nem2=R_AT24C01(y);
delayx(500); //延遲一下
//----------------------------------------
if(nem0==tablee2[0]&&nem1==tablee2[1]&&nem2==tablee2[2]&&h==((tablee2[2]*5)+(tablee2[1]*3)+tablee2[0]+0))
{
LED_OPEN=0; //開鎖
beep=0;
delayx(20000);
beep=1; //長嗚一聲音表示確認密碼正確并開鎖
tablee2[0]=0;
tablee2[1]=0;
tablee2[2]=0; //將密碼重置一下
LED_OPEN=1; //關鎖
delayx(600);
LCD1602_2(); //welcomeBack
delayx(60000);
delayx(60000);
delayx(60000);
LCD1602_1(15); //顯示PleasePassword
}
else
{
beepo();
delayx(5000);
beepo();
delayx(5000);
beepo();
delayx(5000); //短響3聲音表示密碼錯誤
r++;
tablee2[3]=0; //清除一下該存儲器中的錯誤數據避免下次持續報錯
LCD1602_1(0); //顯示PleasePassword
}
if(r==4) //如果錯誤3次密碼則報警2分鐘
{
for(j=0;j<30;j++)
{
beepo();
delayx(5000);
}
r=0;
}
}
//====================================================================
if(!K4) //修改密碼鍵 P0.4
{
delayx(500);
while(K4==0);
beepo();
//------------------------
while(u<3)
{
b=shuju_jianpan();//數據鍵盤掃描 --先輸入舊密碼確認主人身份
if(b!=15) //如果b不等于15說明有鍵按下
{
u++;
tablee2[c++]=b; //常規密碼存儲器
LCD1602_0(15,c);
if(c==4)c=0;
b=15;
}
}
u=0;
h=((tablee2[2]*5)+(tablee2[1]*3)+tablee2[0]+tablee2[3]);
//----------------開始密碼比較----------------------------
init();//AT24C01初始化
nem3=R_AT24C01(e);
init();
nem4=R_AT24C01(f);
init();
nem5=R_AT24C01(y);
delayx(500); //延遲一下
//---------------------------------------------------------
if(nem0==tablee2[0]&&nem1==tablee2[1]&&nem2==tablee2[2]&&h==((tablee2[2]*5)+(tablee2[1]*3)+tablee2[0]+0))
{
c=0;
beep=0;
delayx(20000);
beep=1; //長嗚一聲音表示開始修改密碼
LED_LEDOK=0; //燈亮表示密碼正確
delayx(20000);
LED_LEDOK=1; //燈亮表示密碼正確
LCD1602_1(0); //顯示PleasePassword
//---------------------------------------------------------
while(c<3) //密碼長度必須為3位
{
b=shuju_jianpan(); //數據鍵盤掃描
if(b!=15)
{
tablee2[c++]=b;
LCD1602_0(15,c);
b=15;
}
}
c=0;
//---------------------------------------------------------
while(K3==1);
LCD1602_2(); //welcomeBack
delayx(500);
while(K3==0);
delayx(500);
while(K3==0);
init(); //24c01初始化
W_AT24C01(e,tablee2[0]); //寫入數據到AT24C01存儲器中保存
delayx(500);
//------------------
init();
W_AT24C01(f,tablee2[1]);
delayx(500);
//------------------
init();
W_AT24C01(y,tablee2[2]);
delayx(500);
//------------------
LED_LDEOKK=0; //燈亮表示密碼正確
beep=0;
delayx(10000);
beep=1; //長嗚一聲音表示確認已輸入數據
LED_LDEOKK=1;
u=0;
delayx(50000);
beep=0;
delayx(50000);
beep=1; //長嗚一聲音表修改密碼OK
LCD1602_0(15,0); //顯示PleasePassword
}
} //修改密碼的if語句
} //總的while(1)語句
}
//======================================================
//---IIC AT24C01存儲器讀寫操作程序-----------
#include <reg52.h>
#define uchar unsigned char
sbit SDA=P3^6;
sbit SCL=P3^7;
///------------------------------------------
void delay()
{ ; ; }
///////////////////////
void start()//起始信號
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}
///////////////////////
void stop()//終止信號
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}
//////////////////////////////////////////////////
//////////////////////////////////////////////////
void respons()//應答信號,等待或者發送一個應答信號
{
uchar i;
SCL=1;
delay();
while((SDA==1)&&(i<250))i++;
SCL=0;
delay();
}
/*************************************************/
void init()//初始化
{
SDA=1;
SCL=1;
}
//////////////////////////////////////////////////
void write_byte(uchar date)//寫一字節
{
uchar i;
SCL=0;
for(i=0;i<8;i++)
{
date=date<<1;
SDA=CY;
SCL=1;
delay();
SCL=0;
delay();
}
}
//------------------------------------------------
uchar read_byte()//讀數據(也就是接收從器件傳來的數據)
{
uchar i,k;
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;
SCL=0;
delay();
}
return k;
}
//////////////////////////////////////////////////
//=============AT24C01寫操作=====================//
void W_AT24C01(uchar address,uchar date)//寫數據
{
start();
write_byte(0xa0); //器件地址
respons();
write_byte(address);//器件內存地址 address
respons();
write_byte(date);//數據 date
respons();
stop();
}
//////////////////////////////////////////////////
//==============AT24C01讀操作====================//
uchar R_AT24C01(uchar address)
{
uchar date;
start();
write_byte(0xa0);//寫器件地址和寫指令0XA0=10100000B最后一個零表示寫,低電平有效
respons();
write_byte(address);////器件內存地址address
respons();
start();
write_byte(0xa1);//寫器件地址和讀指令0XA1=10100001B,最后一個1表示讀,高電平有效
respons();
date=read_byte();
stop();
return date;
}
//======================================================
//------------------LCD1602顯示程序(模塊)--------------------
#include <reg52.h>
#define uchar unsigned char
///////////////LCD1602/////////////
sbit RS=P0^5;
sbit RW=P0^6;
sbit YE=P0^7;
/////////////////////////////////////////////////////////////
uchar code table1[] ={" Welcome Back"};
uchar code table2[] ={" PleasePassword"};
uchar code table3[] ={"****"};
uchar code table4[] ={" "};
/////////////////////////////////////////////////////////////
void delayy(unsigned int us)
{
while(us--);
}
/////////////////////////////////////////////////////////////
void delay2()
{
RS=0;
RW=0;
YE=0;
delayy(5);
YE=1;
}
//------------------------------------------
void LCD1602_START()
{
//////////////////////////////////////LCD屏初始化
P2=0x01; //清屏
delay2();
P2=0x38; //顯示設定兩行
delay2();
P2=0x0f; //打開顯示和光標
delay2();
P2=0x06; //光標右移
delay2();
P2=0x80; //光標回到第一行的開頭
delay2();
}
/******************************LCD1602液晶顯示****************************/
void LCD1602_0(uchar dd0,uchar jj0)//dd是整數
{
uchar i,nem;
LCD1602_START();
/////////////////////////////////////////////////////////////
for(nem=0;nem<dd0;nem++)//溫度英文字PleasePassword顯示
{
P2=table2[nem];
RS=1;
RW=0;
YE=0;
delay2();
}
////////////////////////////////////////////////////////////
delay2();
P2=0xc0; //換行顯示***0xc0指令是光標回到第二行的開頭
for(i=0;i<jj0;i++)
{
delay2();
P2=table3[i];
RS=1;
RW=0;
YE=0;
}
}
//==========================================================================
void LCD1602_1(uchar dd1)//dd是整數
{
uchar i,nem;
LCD1602_START();
for(nem=0;nem<dd1;nem++)//溫度英文字PleasePassword顯示
{
P2=table2[nem];
RS=1;
RW=0;
YE=0;
delay2();
}
/////////////////////////////////////////////////
delay2();
P2=0xc0; //換行顯示***0xc0指令是光標回到第二行的開頭
for(i=0;i<16;i++)
{
delay2();
P2=table4[i];
RS=1;
RW=0;
YE=0;
}
}
//==========================================================================
void LCD1602_2()//dd是整數
{
uchar i,nem;
LCD1602_START();
for(nem=0;nem<15;nem++)//溫度英文字welcomeback顯示
{
P2=table1[nem];
RS=1;
RW=0;
YE=0;
delay2();
}
/////////////////////////////////////////////////
delay2();
P2=0xc0; //換行顯示***0xc0指令是光標回到第二行的開頭
for(i=0;i<16;i++)
{
delay2();
P2=table4[i];
RS=1;
RW=0;
YE=0;
}
}
復制代碼
作者:
南天白云
時間:
2015-5-15 10:14
下載來試試可以用嗎?謝謝!
作者:
liuguoquann
時間:
2015-6-8 16:19
全智能的?挺厲害的呀。
作者:
hanxufu
時間:
2015-7-10 12:21
原理圖呢
作者:
ludaijin
時間:
2015-9-5 14:05
太強了,太強了,太強了,太強了,
作者:
ludaijin
時間:
2015-9-5 14:07
太強了,太強了,太強了,太強了,
作者:
flash
時間:
2015-10-17 16:22
這個看著就覺額6
作者:
your752134
時間:
2016-3-19 21:46
高手
作者:
bb1237
時間:
2019-11-12 14:22
高手!!!。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1