久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于單片機電子密碼鎖
[打印本頁]
作者:
38337646
時間:
2024-6-22 15:18
標題:
基于單片機電子密碼鎖
密碼鎖的文件、仿真圖
單片機仿真圖(proteus)
Snipaste_2024-06-22_15-17-11.png
(64.96 KB, 下載次數: 12)
下載附件
2024-6-22 15:17 上傳
源碼展示:
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
#define key P1 //按鍵io口
sbit fen=P3^0; //蜂鳴器io口
sbit rs=P3^1; //LCD控制口
sbit rw=P3^2;
sbit e=P3^3;
sbit led=P3^4; //LED燈io口
//bit 位變量聲明:定義一個位變量的值
u8 keyz=17,j=0,biao1=0,a=10,b=10,c=10,d=10;
bit biao=0;
u16 zh;
u8 shu[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
u8 zi[]={"password:"};
u8 num[]={"0123456789ABCDEF"};
void delay(u16 i){
while(i--);
}
/*蜂鳴器*/
void Fen(u8 a,b) //蜂鳴器發聲函數
{
u8 i,j;
for(i=0;i<a;i++)
{
for(j=0;j<100;j++)
{fen=~fen;delay(b);}
}
}
/*LCD*/
void writecom(u8 com){ //LCD寫指令
rs=0;
rw=0;
e=0;
P0=com;
delay(5);
e=1;
e=0;
}
void writedat(u8 dat){ //LCD寫數據
rs=1;
rw=0;
e=0;
P0=dat;
delay(5);
e=1;
e=0;
}
void initlcd(){ //LCD初始化函數
writecom(0x38); //顯示模式設置
writecom(0x0c);
writecom(0x06);
}
void xian(){ //LCD顯示數字函數
writedat(num[keyz]);
if(a==10){a=keyz; } //對abcd,四位數的單獨賦值
else if(b==10){b=keyz;}
else if(c==10){c=keyz;}
else{d=keyz;}
if(j!=3){j++;}biao=0;
}
/*鍵盤*/
void Key(){u8 a=0; //矩形式鍵盤函數
if(key!=0x0f){delay(1000);
if(key!=0x0f){
key=0x0f;
switch(key){
case 0x07: keyz=0;biao=1;break;
case 0x0b: keyz=1;biao=1;break;
case 0x0d: keyz=2;biao=1;break;
case 0x0e: keyz=3;biao=1;break;
}
key=0xf0;
switch(key){
case 0x70: keyz=keyz;biao=1;break;
case 0xb0: keyz=keyz+4;biao=1;break;
case 0xd0: keyz=keyz+8;biao=1;break;
case 0xe0: keyz=keyz+12;biao=1;break;
}
}
while((a<50)&&(key!=0xf0)){a++;delay(10000);}
}
}
void shi(){u8 i; // 按鍵值判斷函數
if(biao&&keyz!=15){ //判斷標志位biao是否為1,為1則有按鍵操作并且按鍵的值不等于15
writecom(0x80+0x40+j); //數字顯示位置進行累加操作
if(j<0){j=0;} //數字顯示位置邊界
switch(keyz){ //switch判斷按鍵并執行對應操作
case 0:xian(); break;
case 1:xian(); break;
case 2:xian(); break;
case 3:xian(); break;
case 4:xian(); break;
case 5:xian(); break;
case 6:xian(); break;
case 7:xian(); break;
case 8:xian(); break;
case 9:xian(); break;
case 10:writedat(num[keyz]);
j++;biao=0;break;
case 11:writedat(num[keyz]);
j++;biao=0;break;
case 12:
biao1=0; //重置標志位biao1,上鎖
biao=0;break;
case 13:writecom(0x01); delay(1000); //全屏清除
for(i=0;i<sizeof(zi);i++){
writecom(0x80+i);
writedat(zi[i]); }
j=0;biao=0;break;
case 14: //對當前數字位刪除的操作
writedat(' ');
j--;
writecom(0x80+0x40+j);writedat(' ');
biao=0;break;
case 15: //確定按鍵
j++;biao=0;break;
}
}
if(keyz==15){ //判斷按鍵值如果等于15,便視為按下確定鍵
writecom(0x01);delay(1000);
zh=a*1000+b*100+c*10+d; //將ABCD,四位數合并并進行判斷是否為正確密碼
if(zh==1234){ //設密碼為1234
j=0;
biao1=1; //將biao1標志位置1便為密碼正確
keyz=17; //使按鍵值跳出最大值15便不會循壞顯示
}
else{
j=0;
biao1=0; //反之密碼錯誤
keyz=17;
Fen(20,200); //蜂鳴器報警
}
zh=0;a=10,b=10,c=10,d=10; //重置ABCD變量
for(i=0;i<sizeof(zi);i++){
writecom(0x80+i);
writedat(zi[i]); }
}
}
void main(){u8 i; led=1;
initlcd(); //LCD初始化函數
for(i=0;i<sizeof(zi);i++){
writecom(0x80+i);
writedat(zi[i]); }
while(1){
Key(); //定義鍵盤函數
shi(); //按鍵判斷函數,燈亮或報警
P2=shu[keyz]; //數碼管顯示當前輸入值
if(biao1==1){ led=0; //判斷標志位biao1 為1則密碼正確顯示ok
writecom(0x80+0x40+10);
writedat('O');
writecom(0x80+0x41+10);
writedat('K'); }
else if(biao1==0){led=1; //biao1為0則顯示密碼錯誤顯示no
writecom(0x80+0x40+10);
writedat('N');
writecom(0x80+0x41+10);
writedat('O');}
}
}
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产精品久久久
|
久草青青草
|
亚洲精品一区二三区不卡
|
蜜桃免费一区二区三区
|
亚洲日本三级
|
久久久久久久久久久久一区二区
|
91亚洲一区
|
成人精品一区二区
|
国产免费人成xvideos视频
|
天堂一区在线
|
久久久福利
|
精国产品一区二区三区四季综
|
久久机热
|
99精品热视频
|
国产一级免费视频
|
日日操夜夜操天天操
|
午夜专区
|
欧美福利
|
欧美精品一区二区三区在线播放
|
久久久久久久久久毛片
|
龙珠z在线观看
|
日韩精品免费视频
|
97超碰免费
|
韩日在线视频
|
国产精品国产精品国产专区不片
|
国产激情在线
|
狠狠色狠狠色综合系列
|
蜜桃av一区二区三区
|
国内精品久久久久久影视8 最新黄色在线观看
|
欧美涩涩网
|
www312aⅴ欧美在线看
|
高清一区二区三区
|
午夜影院
|
一区二区精品
|
日韩在线一区二区三区
|
久久久久久电影
|
一区二区三区国产精品
|
亚洲精品欧美一区二区三区
|
久久精品欧美电影
|
99亚洲视频
|
久久久国产一区二区三区
|