久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
51單片機(jī)密碼鎖程序設(shè)計(jì)
[打印本頁(yè)]
作者:
+++++++++++
時(shí)間:
2020-5-30 10:46
標(biāo)題:
51單片機(jī)密碼鎖程序設(shè)計(jì)
這是簡(jiǎn)單密碼鎖設(shè)計(jì),設(shè)計(jì)的
04RI)$WTN8V_14Z2Y4_$QP9.png
(46.65 KB, 下載次數(shù): 37)
下載附件
2020-5-30 10:46 上傳
//定義IO口
sbit Beep=P3^6;
sbit LED1=P3^7;
//定義全局變量
int count=-1;
int count1=0;//用于記錄輸入密碼錯(cuò)誤的次數(shù)
int counter;//用于計(jì)數(shù)是定時(shí)器能夠定時(shí)1分鐘
int counter1=0;
int temp=99,signal=0;
//初始化密碼
int key_word[4]={99,99,99,99};
//用于接收按鍵接收的值
int get_word[4]={0,0,0,0};
char key_buf[]={0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77};//鍵模
//LED字模
char led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
//函數(shù)聲明
void set_key();
void show1(int);
void open_key();
void input_key();
void show2(int);
void show3();
void show4();
int get_key();
//延時(shí)函數(shù)
void delay(int x)
{
int j=0;
for(;x>0;x--)
for(j=0;j<125;j++);
}
//設(shè)定密碼功能
void set_key()
{
int i;
for(i=0;i<4;i++)
{
while(get_key()==-1)//等待按鍵按下
{
if(count!=0&&count!=-1)
{
show1(count);//顯示設(shè)置的密碼
}
}
if(signal==1)//將按鍵的值保存
{
key_word[i]=get_key();
count++;
show1(count);
signal=0;
temp=99;
}
while(temp==get_key())//一旦長(zhǎng)時(shí)間按按鍵,就一直顯示密碼
{
show1(count);
}
}
}
//輸入密碼
void input_key()
{
int i;
for(i=0;i<4;i++)
{
while(get_key()==-1)//等待按鍵按下
{
if(count!=0&&count!=-1)
{
show2(count);//顯示設(shè)置的密碼
}
}
if(signal==1)//將按鍵的值保存
{
get_word[i]=get_key();
count++;
show2(count);
signal=0;
//temp=99;
}
while(temp==get_key())//一旦長(zhǎng)時(shí)間按按鍵,就一直顯示密碼
{
show2(count);
}
}
}
//顯示輸入的密碼
void show2(int count)
{
if(count==0)//顯示1位數(shù)據(jù)
{
P1=0x0e;
P0=led[get_word[0]];
}
if(count==1)//顯示2位數(shù)據(jù)
{
P1=0x0e;
P0=led[get_word[0]];
delay(10);
P1=0x0d;
P0=led[get_word[1]];
delay(10);
}
if(count==2)//顯示3位數(shù)據(jù)
{
P1=0x0e;
P0=led[get_word[0]];
delay(10);
P1=0x0d;
P0=led[get_word[1]];
delay(10);
P1=0x0b;
P0=led[get_word[2]];
delay(10);
}
if(count==3)//顯示4位數(shù)據(jù)
{
P1=0x0e;
P0=led[get_word[0]];
delay(10);
P1=0x0d;
P0=led[get_word[1]];
delay(10);
P1=0x0b;
P0=led[get_word[2]];
delay(10);
P1=0x07;
P0=led[get_word[3]];
delay(10);
P0=0;
//count=-1;
signal=0;
}
}
//顯示設(shè)置的密碼
void show1(int count)
{
int i;
if(count==0)//顯示一位數(shù)據(jù)
{
P1=0x0e;
i=key_word[0];
P0=led[i];
}
if(count==1)//顯示兩位數(shù)據(jù)
{
P1=0x0e;
P0=led[key_word[0]];
delay(10);
P1=0x0d;
P0=led[key_word[1]];
delay(10);
}
if(count==2)//顯示三位數(shù)據(jù)
{
P1=0x0e;
P0=led[key_word[0]];
delay(10);
P1=0x0d;
P0=led[key_word[1]];
delay(10);
P1=0x0b;
P0=led[key_word[2]];
delay(10);
}
if(count==3)//顯示四位數(shù)據(jù)
{
P1=0x0e;
P0=led[key_word[0]];
delay(10);
P1=0x0d;
P0=led[key_word[1]];
delay(10);
P1=0x0b;
P0=led[key_word[2]];
delay(10);
P1=0x07;
P0=led[key_word[3]];
delay(10);
P0=0;
count=-1;
signal=0;
}
}
//主函數(shù)
void main()
{
int op;
LED1=0;
Beep=1;
while(1)
{
op=get_key();
switch(op)
{
case 13:
while(temp==get_key());//等待選擇功能按鍵釋放后再進(jìn)行設(shè)置密碼
count=-1;//在使用標(biāo)志位時(shí)將標(biāo)志位進(jìn)行初始化
signal=1;
set_key();
break;
case 14:
while(temp==get_key());
count=-1;//初始化標(biāo)志位
signal=1;
input_key();
while(get_key()!=15)//當(dāng)按下登陸鍵,輸入的密碼不再顯示
{
show2(count);
}
if(compare()==-1)
{
count1++;
while(get_key()!=14&&count1!=3)
{
show3();//密碼錯(cuò)誤,顯示ERR
}
P0=0;//按下輸入密碼鍵后,清屏
if(count1==3)
{
//開(kāi)啟定時(shí)器中斷
TMOD=0x01;
TH0=0x9E;//裝載初值25ms
TL0=0x58;
EA=1; //開(kāi)總中斷
ET0=1;//開(kāi)定時(shí)器0
TR0=1; //開(kāi)啟定時(shí)器0
while(counter1<60);//只有當(dāng)蜂鳴器響完一分鐘之后,才能退出循環(huán)
TR0=0;//關(guān)閉定時(shí)器
}
}
else
{
LED1=1;//當(dāng)輸入密碼正確時(shí),開(kāi)啟LED燈
while(get_key()!=12)//直到按下退出鍵,屏幕一直顯示on
{
show4();
}
LED1=0;//退出后關(guān)閉LED燈
P0=0;//清屏
}
break;
default:break;
}
}
}
//獲取鍵值
int get_key()
{
char key_scan[]={0xef,0xdf,0xbf,0x7f};
int i=0;
int j=0;
for(i=0;i<4;i++)//判斷
{
P2=key_scan[i];
if((P2&0x0f)!=0x0f)
{
for(j=0;j<16;j++)
{
if(key_buf[j]==P2)
{
if(temp!=key_buf[j])//一旦長(zhǎng)時(shí)間按鍵,將只會(huì)讀取一次按鍵的值
{
signal=1;
temp=j;
return j;
}
else signal=0;
}
}
}
}
return -1;
}
//輸入的密碼和設(shè)定的密碼比較
int compare()
{
int i;
for(i=0;i<4;i++)
{
if(get_word[i]!=key_word[i])
return -1;//輸入密碼不等于設(shè)定的密碼返回-1
}
return 1;//輸入的密碼等于設(shè)定密碼返回1
}
void show3()//顯示ERR
{
P1=0x0e;
P0=0x79;
delay(10);
P1=0x0d;
P0=0x77;
delay(10);
P1=0x0b;
delay(10);
}
void show4()//顯示on
{
P1=0x0e;
P0=0x5c;
delay(10);
P1=0x0d;
P0=0x54;
delay(10);
}
//定時(shí)器中斷函數(shù),定時(shí)1分鐘
call_police() interrupt 1
{
counter++;
if(counter==39)
{
counter=0;
Beep=~Beep;
counter1++;
if(counter1==60)//定時(shí)一分鐘
{
count1=0;
Beep=1;//關(guān)閉定時(shí)器
}
}
else
{
TH0=0x9E;
TL0=0x58;
}
}
復(fù)制代碼
比較簡(jiǎn)單
作者:
一條小團(tuán)團(tuán)
時(shí)間:
2020-6-9 16:28
為什么我的沒(méi)反應(yīng)?
作者:
木子就是派大昕
時(shí)間:
2020-6-12 19:35
邏輯應(yīng)該清晰一點(diǎn),功能都比較完善了,代碼結(jié)構(gòu)能清晰點(diǎn)就好了
作者:
木子就是派大昕
時(shí)間:
2020-6-12 19:46
其實(shí)用數(shù)碼管顯示讓整個(gè)代碼顯得很冗長(zhǎng),可以嘗試用下1602液晶
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
91精品午夜窝窝看片
|
久久国产精品精品国产色婷婷
|
91国语清晰打电话对白
|
久久久国产精品
|
天天天操操操
|
天天干在线播放
|
日本aⅴ中文字幕
|
欧美又大粗又爽又黄大片视频
|
成人在线精品
|
男女羞羞网站
|
小川阿佐美pgd-606在线
|
久久久久久久久99精品
|
国产精品伦理一区
|
欧美激情综合
|
国产1区2区
|
男人的天堂久久
|
亚洲第一成年免费网站
|
二区欧美
|
亚洲网站在线观看
|
欧美中国少妇xxx性高请视频
|
婷婷丁香在线视频
|
国产一级免费在线观看
|
欧美一二区
|
国产精品久久久久久久三级
|
九九一级片
|
国产成人在线视频免费观看
|
精品久久久久久
|
色av一区二区
|
天天插天天射天天干
|
国产亚洲人成a在线v网站
|
免费在线a视频
|
亚洲精品视频一区
|
粉嫩一区二区三区四区公司1
|
亚洲天堂男人的天堂
|
一区二区三区视频
|
免费国产视频在线观看
|
在线一区二区三区
|
精品国产99
|
cao视频
|
精品国产精品国产偷麻豆
|
国产精品久久国产精品99 gif
|