久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機+1602+矩陣按鍵 門禁系統Proteus仿真程序
[打印本頁]
作者:
陳潤源home
時間:
2019-6-28 11:02
標題:
單片機+1602+矩陣按鍵 門禁系統Proteus仿真程序
此程序是基于清翔電子開發板編寫的,已測試通過,此程序并目前只完成了密碼鎖功能,還沒有完成用戶房間號碼比對,發這個帖子初衷是為了給正在學習密碼鎖的同學們一個思路,代碼有詳細注釋,適合初學者借鑒,大神勿噴
瘋狂提示:用戶房間號的匹配使用138譯碼器
--------------------------------------------
| 第1列 第2列 第3列 第4列 |
|第1行 0 1 2 3 |
|第2行 4 5 6 7 | 初始密碼:123456
|第3行 8 9 10 11 |
|第4行 12 13 14 15 |
------------------------------------------
1.密碼只有6位 123456
2.按鍵10: 開鎖按鍵:
輸入6位密碼后按下開鎖按鍵,開始比對存儲的密碼,正確則打開電磁鎖
否則提示錯誤次數,輸錯3次鎖定鍵盤10S,并且報警,10S后才能重新輸入
3.按鍵11: 上鎖按鍵:
無論處于任何狀態,按下上鎖按鍵后,關閉電磁鎖,清除輸入的數值
4.按鍵12: 更改密碼:
合法用戶按下修改密碼按鍵顯示New Password提示用戶輸入新密碼
否則顯示No Rights !提示操作錯誤
5.按鍵13: 保存密碼:
合法用戶輸入新密碼后按下保存密碼,顯示 Saving...... 提示保存密碼中.....
然后顯示 save successful 提示保存成功
顯示 ^_^ ^_^ ^_^ 提示更改密碼成功
非法用戶則顯示No Rights ! 提示操作錯誤
6.按鍵14: 重新輸入:
清除之前輸入的密碼或門牌號
7.按鍵15: 呼叫按鍵:
直接輸入門牌號(3位)后按下呼叫按鈕,蜂鳴器發出叮咚門鈴聲提示用戶有訪客
此時訪客直接按下開鎖鍵,開鎖3S,3s后關閉
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
仿真.jpg
(175.21 KB, 下載次數: 96)
下載附件
2019-6-28 10:53 上傳
單片機源程序如下:
#include<reg51.h>
#include<string.h>
#include<intrins.h>
#include"key.c"
#include"24c04.c"
#include"1602.c"
#include"beep.c"
#define uchar unsigned char
#define uint unsigned int
#define LCDIO P0 //液晶數據端口 P0
uchar buffer[6]={0}; //密碼顯示緩存
uchar DSY_BUFFER[16]=" "; //開機顯示緩存
uchar Userpassword[6]={0}; //輸入顯示緩存
uchar code table2[]="123456"; //初始密碼
bit flag=0,aa,hujiao; //用戶蹲淵義定時溢出標志位
//hujiao:呼叫標志位
sbit led=P2^2; //電磁鎖控制端
//-----------------------------------------------------------------
// 蜂鳴器子程序
//-----------------------------------------------------------------
void Beep()
{
uchar i;for (i = 0; i < 100; i++)
{ delayms(1); BEEP = ~BEEP; }
BEEP = 0;
}
//-----------------------------------------------------------------
//密碼清除子程序
//-----------------------------------------------------------------
void clear_password( )
{ uchar i;
for(i=0;i<6;i++)
{
Userpassword[i]=' ';
}
for(i=0;i<16;i++)
{
DSY_BUFFER[i]=' ';
}
}
void init_all()
{
init();
init_lcd(); //1602初始化
Canshu_Init(); //報警初始化
Interrupt_Init(); //中斷初始化
}
//-----------------------------------------------------------------
// 主函數
//-----------------------------------------------------------------
void main()
{
uchar temp,i=0,j=0,k=0;
uchar IS_valid_user; //合法用戶
init_all();
delayms(5);
// aa=Sendstring(0xa0,1,table2,6); //往24c04寫密碼((第一次下載必須打開下載初始密碼)
delayms(5);
aa=Recstring(0xa0,1,buffer,6); //從24c04讀取密碼
delayms(10);
P1=0x0f;
while(1)
{
if(P1!=0x0f)
{
temp=Keys_Scan(); //獲取按鍵值
switch(temp)
{
case 0: case 1: case 2: case 3: case 4:
case 5: case 6: case 7: case 8: case 9:
if (i<=5) //密碼限制在6位以內
{
Userpassword[i]=temp;
DSY_BUFFER[i]=temp+0x30; // 顯示輸入的密碼
Display_String(DSY_BUFFER,0xc0);
delayms(100);
DSY_BUFFER[i]='*'; // 顯示 * 替換剛剛顯示的數字
Display_String(DSY_BUFFER,0xc0);
i++;
} hujiao=0;
break;
//按A鍵開鎖
case 10:
if(hujiao==1) //如果有客人來訪按下開鎖鍵則直接開門
{
flag=1;i=0;led=0; //點亮LED(開門)
clear_password(); //清除輸入的門牌號
Display_String("OPEN OK! ",0xc0);//顯示門已打開
IS_valid_user = 1;; //合法用戶標志位置1
delayms(2500);i=0;led=1; //開門時間為3S,3S后關閉
hujiao=0;flag=0;j=0; //關閉訪客標志位
clear_password();IS_valid_user=0; //清密碼顯示位
}hujiao=0;
for(k=0;k<6;k++)
{
if(buffer[k]==(Userpassword[k]+48)) //如果顯示緩存的數據與存儲密碼相同則開門
flag=1;
else
flag=0;
}
if (flag==1)
{ flag=0;i=0;led=0; //點亮LED(開門)
clear_password();
Display_String("OPEN OK! ",0xc0); //密碼正確,顯示打開
IS_valid_user = 1; j=0;
}
else
{
j++;led=1; //關閉LED
clear_password();
Display_String("error! Have try ",0xc0); //顯示密碼錯誤,請重新輸入
write_com(0xcf);
write_date(0x30+j);
delayms(1000); //錯誤次數加1
if(j!=3)Display_String(DSY_BUFFER,0xc0); //清屏
IS_valid_user=0;
if(j==3) //只有三次輸入機會
{
Display_String(" illegal user ",0xc0); //非法用戶,開始報警
write_com(0xcf);
write_date(0x30+j);error=0; //報警7S
delayms(5000);j=0;error=1;
Display_String(DSY_BUFFER,0xc0); //輸錯3次關閉鍵盤7S
}
} i=0;
break;
case 11: led=1; //按B鍵上鎖
clear_password();
Display_String(table,0x80); //顯示Your Password
Display_String(DSY_BUFFER,0xc0); //清屏
i=0; hujiao=0; //訪客標志位清零
IS_valid_user=0; //合法用戶標志位清零
break;
case 12: //按C鍵設置新密碼
if ( !IS_valid_user) //如果是合法用戶則提示輸入新密碼
{
i=0;
Display_String("No rights ! ",0xc0); //非法用戶按下則提示
delayms(1000); //操作錯誤
Display_String("Your Password...",0x80);
Display_String(" ",0xc0);
}
else
{
i=0;revise=1; //如果是合法用戶則提示輸入新密碼
Display_String("New Password: ",0x80);
Display_String(" ",0xc0);
}hujiao=0; break;
case 13: if ( !IS_valid_user) //按D鍵保存新密碼
{ i=0;
Display_String("No rights ! ",0xc0); //非法用戶按下則提示操作錯誤
delayms(1000);
Display_String("Your Password...",0x80);
Display_String("Lock OK! ",0xc0); //提示關鎖成功
}
else
{
i = 0; revise=0;
init();
delayms(5);
for(k=0;k<6;k++){ Userpassword[k]=Userpassword[k]+48;}
aa=Sendstring(0xa0,1,Userpassword,6); //存入新密碼
delayms(5);
aa=Recstring(0xa0,1,buffer,6); //讀出新密碼
delayms(5);
clear_password(); //清除密碼
Display_String(table,0x00);
Display_String(" Saving...... ",0xc0); //提示保存密碼中......
delayms(2000);
Display_String("save successful ",0xc0); //第一行 顯示保存成功
delayms(2000);
Display_String(" ^_^ ^_^ ^_^ ",0xc0); //提示用戶更改密碼成功
delayms(1000);
led=1; //等待8秒時間到關閉
clear_password(); //清密碼
Display_String(table,0x80); //第0行 顯示Your Password
Display_String(DSY_BUFFER,0xc0); //第一行 顯示空
i=0;
IS_valid_user=0;
}hujiao=0; break;
case 14:i=0;hujiao=0; //按E鍵消除所有輸入
clear_password();
Display_String(" ",0xc0);
break;
case 15: if(i==3) //呼叫,門牌號3位
{
hujiao=1;i=0;TR0 = 1;temp=0;
clear_password();
// Display_String(DSY_BUFFER,0xc0);
delayms(100);
}
else
{
j++;led=1; //關閉LED
clear_password();
Display_String("error! Have try ",0xc0); //顯示密碼錯誤,請重新輸入
write_com(0xcf);
write_date(0x30+j);
delayms(1000);
IS_valid_user=0;
if(j!=3)Display_String(DSY_BUFFER,0xc0); //清屏
IS_valid_user=0;
if(j==3) //只有三次輸入機會
{
Display_String(" illegal user ",0xc0); //非法用戶,開始報警
write_com(0xcf);
write_date(0x30+j);error=0; //報警7S
delayms(5000);j=0;error=1;
Display_String(DSY_BUFFER,0xc0); //輸錯3次關閉鍵盤7S
}
}
break;
}
if(revise!=1)Display_String("Your Password...",0x80);
if(hujiao==0)Beep();delayms(100); P1=0xf0;
while(P1!=0xf0);
while(P1==0xf0);
}
}
}
復制代碼
所有資料51hei提供下載:
門禁V1.0.7z
(44.41 KB, 下載次數: 180)
2019-6-28 11:01 上傳
點擊文件名下載附件
仿真+ C、bin文件
下載積分: 黑幣 -5
作者:
陳潤源home
時間:
2019-6-28 11:04
做實物時記得在 24c04時鐘、數據端口加 4.7K~10K 的上拉電阻
作者:
小柯基斯基
時間:
2020-6-19 16:37
你好,樓主我想請教一個問題。按鍵10中的”輸錯密碼三次鎖定10s,并且報警,10秒后才能重新輸入“。
如果改成鎖定30秒 30秒后才能輸入。應該要怎么改 在哪個位置改。
作者:
1351199239
時間:
2021-5-8 18:39
Proteus要7.5版本才能打開
作者:
sbhsc666
時間:
2023-6-15 17:17
做實物時記得在 24c04時鐘、數據端口加 4.7K~10K 的上拉電阻
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美一区二区三区一在线观看
|
自拍偷拍欧美
|
国产激情网
|
亚洲区一
|
自拍 亚洲 欧美 老师 丝袜
|
日韩一区和二区
|
91婷婷韩国欧美一区二区
|
一区在线观看视频
|
毛片国产
|
在线日韩欧美
|
日韩在线视频一区
|
天天操夜夜拍
|
久久久久久久久久久久久91
|
紧缚调教一区二区三区视频
|
无码日韩精品一区二区免费
|
亚洲欧美日本在线
|
亚洲狠狠
|
国产精品a一区二区三区网址
|
久久综合一区
|
日韩成人在线视频
|
美女三区
|
精品视频一区二区三区
|
免费午夜剧场
|
精品一区二区三区四区五区
|
婷婷福利视频导航
|
久久久夜夜夜
|
精品成人av
|
欧美午夜精品久久久久免费视
|
久久大陆
|
全部免费毛片在线播放网站
|
国产精品99久久久久久动医院
|
精品av
|
欧美精品一区二区三区蜜桃视频
|
99精品欧美一区二区蜜桃免费
|
国产91亚洲精品
|
免费一区二区三区
|
婷婷丁香激情
|
亚洲黄色在线免费观看
|
中文字幕1区2区3区 亚洲国产成人精品女人久久久
|
久色
|
国产黄色在线观看
|