設(shè)計(jì)一樓層單元門(mén)禁系統(tǒng),能實(shí)現(xiàn)樓層住戶密碼開(kāi)鎖或其它身份識(shí)別開(kāi)鎖,能顯示操作狀態(tài),阻止陌生人進(jìn)入,能輸出報(bào)警。設(shè)計(jì)完整的電路原理圖和編寫(xiě)相關(guān)程序。 用MCS-51系列單片機(jī)或其它CPU作為控制器設(shè)計(jì)完整的控制系統(tǒng),包括以下內(nèi)容: 用LCD1602顯示或其它點(diǎn)陣液晶或用LED顯示; 實(shí)現(xiàn)磁卡、IC卡、射頻卡或其它方式任意1種輸入; 有密碼輸入按鍵; 有聲音及報(bào)警輸出; 當(dāng)斷電時(shí)能維持24小時(shí)正常工作。 外部220V電源(開(kāi)關(guān)電源)供電; 用PROTEUS仿真其中一個(gè)功能。
單片機(jī)源程序如下:
- #include "reg52.h"
- #include "LCD1602.h"
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char k;
- uchar pic;
- uchar k;
- uchar X;
- uchar keycount;
- //uchar keyprocesstime;
- uint Key_Time;
- uchar flashtime;
- uint PLcount;
- uchar table11[4]={0};
- uchar table1count;
- bit keyflag;
- bit gonengflag;
- bit pic3flag;
- bit pic4flag;
- bit pic5flag;
- bit pic11flag;
- bit pic55flag;
- uint pic3count;
- uint pic4count;
- uint pic5count;
- sbit JDQ = P2^3;
- sbit BEEP = P2^4;
- sbit LED = P2^5;
- void delay(uint n) //延時(shí)程序
- {
- uchar i,j;
- for(i=n;i>0;i--)
- for(j=112;j>0;j--);
- }
- void Display(void)
- {
- uchar i;
- switch(pic)
- {
- case 1: //顯示正常界面,時(shí)間
- LCDDispString(0,1," TANLIJUAN ");
- LCDDispString(0,2,"Please input num");
-
- break;
- case 2: //顯示第一段波形調(diào)整界面
- LCDDispString(0,1,"Please Input ");//顯示字符串
- LCDDispString(0,2,"num ");
- break;
- case 3: //顯示第二段波形調(diào)整界面
- LCDDispString(0,1," Please wait ");
- LCDDispString(0,2," ........... ");
- pic3flag = 1;
- break;
- case 4: //顯示第三段波形調(diào)整界面
- LCDDispString(0,1," Sorry ");
- LCDDispString(0,2," num error ");
- pic4flag = 1;
- break;
- case 5: //顯示第四段波形調(diào)整界面
- LCDDispString(0,1," Right ");
- LCDDispString(0,2," You are welcome ");
- pic5flag = 1;
- break;
- }
- }
- /****************************************************/
- /* 4*4鍵盤(pán)讀取程序 */
- /****************************************************/
- uchar GetKey ( )//鍵盤(pán)掃描函數(shù),用于識(shí)別哪一個(gè)鍵按下,并讀取鍵值
- {
- uchar X,Y,Z;
- P1 = 0xf0; //先對(duì)P1置數(shù) 行掃描
- if(P1!=0xf0) //判斷是否有鍵按下
- {
- delay(50); //延時(shí),軟件去干擾
- if(P1!=0xf0) //確認(rèn)按鍵按下X = P1;
- {
- X=P1&0xf0; //保存行掃描時(shí)有鍵按下時(shí)狀態(tài)
- P1=0x0f; //列掃描
- Y=P1&0x0f; //保存列掃描時(shí)有鍵按下時(shí)狀態(tài)
- Z=X|Y; //取出鍵值
- switch ( Z ) //判斷鍵值(那一個(gè)鍵按下)
- {
- case 0x7e: k=1; break;
- case 0xbe: k=2; break;
- case 0xde: k=3; break;
- case 0x7d: k=4; break;
- case 0xbd: k=5; break;
- case 0xdd: k=6; break;
- //case 0xed: k=8; break;
- case 0x7b: k=7; break;
- case 0xbb: k=8; break;
- case 0xdb: k=9; break;
- //case 0xeb: k=12; break;
- case 0x77: k=0; break;
- case 0xee: k=13; break;//DEL
- case 0xb7: k=14; break;//CALL
- case 0xd7: k=15; break;//CANCEL
- case 0xe7: k=16; break;//ENTER
- }
- if(k<=9)
- {
- keyflag = 1;
- }
- else
- {
- gonengflag = 1;
- }
- }
- }
- }
- void Keyprocess(void) //鍵盤(pán)處理
- {
- switch (pic) //判斷鍵值(那一個(gè)鍵按下)
- {
- case 1: //開(kāi)機(jī)界面
- switch(k)
- {
- case 14:
- pic = 2;
- Display();
- keycount = 0;
- break;
- }
- break;
- case 2://第一段波形設(shè)置界面
- if((keyflag==1)&(table1count<4))
- {
- LCDDispNum(8+table1count,2,k);
- table11[table1count] = k;
- table1count++;
- }
- switch(k)
- {
- case 13://刪除
- table1count--;
- if(table1count>=0)
- {
- LCDDispChar(8+table1count,2,0x04);
- }
- break;
- case 15:
- pic = 1;
- Display();
- keycount = 0;
- table1count = 0;
- break;
-
- case 16:
- if(1<=table11[0]<=4)
- {
- if(table11[1]==0)
- {
- if(1<=table11[2]<=4)
- {
- pic = 3;
- pic3flag = 1;
- Display();
- keycount = 0;
- table1count = 0;
- }
- else
- {
- pic = 4;
- pic4flag = 1;
- Display();
- keycount = 0;
- table1count = 0;
- BEEP = 1;
- LED = 1;
- }
- }
- else
- {
- pic = 4;
- pic4flag = 1;
- Display();
- keycount = 0;
- table1count = 0;
- BEEP = 1;
- LED = 1;
- }
- }
- else
- {
- pic = 4;
- pic4flag = 1;
- Display();
- keycount = 0;
- table1count = 0;
- BEEP = 1;
- LED = 1;
- }
- //JDQ = 1;
- break;
- }
- break;
- case 3:
- switch(k)
- {
- case 14:
- pic = 2;
- Display();
- keycount = 0;
- break;
- case 15:
- pic = 1;
- Display();
- keycount = 0;
- table1count = 0;
- break;
- }
- break;
- case 4:
- switch(k)
- {
- case 14:
- pic = 2;
- Display();
- keycount = 0;
- break;
- case 15:
- pic = 1;
- Display();
- keycount = 0;
- table1count = 0;
- break;
- }
- break;
- case 5:
- switch(k)
- {
- case 14:
- pic = 2;
- Display();
- keycount = 0;
- break;
- case 15:
- pic = 1;
- Display();
- keycount = 0;
- table1count = 0;
- break;
- }
- break;
- }
- }
- //
- void main(void)
- {
- pic = 1;
- LCDInit();//lcd初始化
- TMOD = 0x11;
- TH1 = 0xf8;
- TL1 = 0xcc;
- P0 = 0xff;
- TR1 = 1;
- ET1 = 1;
- EA=1;
- JDQ = 0;
- BEEP = 0;
- LED = 0;
- Display();
- while(1)
- {
- //Display();
- if(keyflag|gonengflag)
- {
- Keyprocess();
- keyflag = 0;
- gonengflag = 0;
- }
- if(pic11flag==1)
- {
- pic11flag = 0;
- pic = 1;
- Display();
- }
- if(pic55flag==1)
- {
- pic55flag = 0;
- pic = 5;
- Display();
- }
- if(pic3flag==1)
- {
- delay(5000);
- pic = 5;
- Display();
- }
- }
- }
- void T1_time (void) interrupt 3 using 2
- {
- TH1 = 0xf8;
- TL1 = 0xcc;
- Key_Time++;
- if(Key_Time == 250)
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
門(mén)禁設(shè)計(jì)系統(tǒng).rar
(101.64 KB, 下載次數(shù): 62)
2019-4-18 15:03 上傳
點(diǎn)擊文件名下載附件
門(mén)禁系統(tǒng)設(shè)計(jì)
|