




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、#include<reg52.h>#define uchar unsigned char #define uint unsigned int sbit lcden=P12;sbit lcdrs=P10;sbit lcdrw=P11;sbit p17=P17; /開門指示:指示燈和蜂鳴器uchar table18='N','A','M','E',':' /定義數(shù)碼管的第一行"name: "uchar table28='C','O','D'
2、,'E',':' /定義數(shù)碼管的第二行"lode: "uchar name10='0','1','2','3' uchar cod20='0','0','0','0','1','1','1','1','2','2','2','2','3','3','3
3、','3' /定義四個用戶,并設(shè)置對應(yīng)的用戶和密碼, /其中用戶0定義為超級用戶0,用戶1、用戶2和用戶3為普通用戶uint in_name; /保存輸入的用戶名uint error_num; /輸入密碼錯誤的次數(shù)uchar in_code14; /保存第一次輸入的密碼uchar in_code24; /保存第二次輸入的密碼uchar code sup11='S','U','P','E','R',' ','U','S','E',
4、'R','!' /輸入用戶為超級用戶uchar code nor12='N','O','R','M','A','L',' ','U','S','E','R','!' /輸入用戶為普通用戶uchar code err6='E','R','R','O','R','!' /輸入用戶名或
5、密碼錯誤uchar wait8='W','A','I','T','I','N','G','!' /等待uchar aga11='I','N','P','U','T',' ','A','G','A','I','N' /再次輸入密碼uchar ame9='A','M'
6、,'E','N','D','I','N','G','!' /正在修改密碼uchar fun6='a','b','c','d','e','f' /ABCDEF功能鍵 /=延時函數(shù)=/void delay(uint x) uint a,b; for(a=x;a>0;a-) for(b=110;b>0;b-);/=1602寫指令=/void write_com(uchar com)
7、lcdrs=0; P0=com; delay(10); lcden=1; delay(10); lcden=0;/=1602寫數(shù)據(jù)=/void write_data(uchar dat) lcdrs=1; P0=dat; delay(10); lcden=1; delay(10); lcden=0;/=1602在指定的位置顯示一個字符=/void disp_char(uchar x,uchar y,uchar dat) uint i; uchar addr; if(y=1) addr=0x80+x; else addr=0xc0+x; write_com(addr); for(i=0;i<
8、;2;i+); write_data(dat); for(i=0;i<2;i+);/=1602數(shù)碼管初始化函數(shù)=/void display() lcden=0; lcdrw=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80);/=4*4鍵盤掃描函數(shù)=/uint keyscan() uchar temp; uint key=16; /key=16表示沒有按下任何鍵 P2=0xfe; /第一行被置為低電平,開始掃描第一行 temp=P2; temp=temp&0x
9、f0; if(temp!=0xf0) delay(1); temp=P2; temp=temp&0xf0; if(temp!=0xf0) temp=P2; switch(temp) case(0xee): key=0; break; case(0xde): key=1; break; case(0xbe): key=2; break; case(0x7e): key=3; break; while(temp!=0xf0) /等待按鍵釋放 temp=P2; temp=temp&0xf0; / P2=0xfd; /第二行被置為低電平,開始掃描第二行 temp=P2; temp=te
10、mp&0xf0; if(temp!=0xf0) delay(1); temp=P2; temp=temp&0xf0; if(temp!=0xf0) temp=P2; switch(temp) case(0xed): key=4; break; case(0xdd): key=5; break; case(0xbd): key=6; break; case(0x7d): key=7; break; while(temp!=0xf0) /等待按鍵釋放 temp=P2; temp=temp&0xf0; / P2=0xfb; /第三行被置為低電平,開始掃描第三行 temp=P2
11、; temp=temp&0xf0; if(temp!=0xf0) delay(1); temp=P2; temp=temp&0xf0; if(temp!=0xf0) temp=P2; switch(temp) case(0xeb): key=8; break; case(0xdb): key=9; break; case(0xbb): key=10; break; case(0x7b): key=11; break; while(temp!=0xf0) /等待按鍵釋放 temp=P2; temp=temp&0xf0; / P2=0xf7; /第四行被置為低電平,開始掃描
12、第四行 temp=P2; temp=temp&0xf0; if(temp!=0xf0) delay(1); temp=P2; temp=temp&0xf0; if(temp!=0xf0) temp=P2; switch(temp) case(0xe7): key=12; break; case(0xd7): key=13; break; case(0xb7): key=14; break; case(0x77): key=15; break; while(temp!=0xf0) /等待按鍵釋放 temp=P2; temp=temp&0xf0; return(key);
13、/*/-B鍵的功能,刪除用戶-/void delete_user() ;/-D鍵的功能,添加用戶-/void add_user(); */-E鍵的功能,修改密碼-/void amend_code() uint i,j,k=16; display();for(i=0;i<5;i+) disp_char(i,1,table1i); /第一行顯示NAME:及對應(yīng)的用戶名disp_char(5,1,namein_name); for(i=0;i<5;i+) disp_char(i,2,table2i); /第二行顯示CODE:AMENDING!for(i=0;i<9;i+) disp
14、_char(i+5,2,amei); for(j=0;j<4;j+) k=keyscan();while(k=16) k=keyscan();codin_name*4+i=funk-10; /=F鍵的功能,開門,蜂鳴器間斷響=/void open_door() uint i,j; for(i=0;i<6;i+) for(j=0;j<10000;j+) if(j/5000)%2=0) p17=1; else p17=0; p17=0;/=超級用戶相關(guān)操作=/void super_user() uint k=16; uint flag=0; while(flag=0) k=key
15、scan(); while(!(k=10|k=11|k=13|k=14|k=15) /當(dāng)A、B、D、E、F均未被按下時,繼續(xù)掃描 k=keyscan(); if(k=10) / 當(dāng)A鍵被按下時,返回 flag=1; if(k=11) / 當(dāng)B鍵被按下時,刪除用戶 flag=1;/ delete_user(); if(k=13) / 當(dāng)D鍵被按下時,添加用戶 flag=1;/ add_user(); if(k=14) / 當(dāng)E鍵被按下時,修改密碼 flag=1; amend_code(); if(k=15) / 當(dāng)F鍵被按下時,開門 flag=1; open_door(); delay(6000
16、); /=普通用戶相關(guān)操作:改密、開門=/void normal_user() uint k=16; uint flag=0; while(flag=0) k=keyscan(); while(!(k=14|k=15) /當(dāng)沒有按下E、F鍵時,繼續(xù)掃描 k=keyscan(); if(k=14); /對應(yīng)于E鍵 flag=1; /普通用戶完成一項操作 amend_code(); /修改當(dāng)前用戶的密碼 if(k=15) flag=1; /普通用戶完成一項操作 open_door(); /F鍵的功能,開門 delay(6000);/=第二次輸入密碼函數(shù)=/ void input_code2() u
17、int i,j,flag2=0; uint k2=16; error_num=0; while(flag2=0&&error_num<3) for(i=0;i<4;i+) /輸入4位數(shù)密碼,保存在in_code2中 k2=keyscan(); while(k2=16) k2=keyscan(); in_code2i=funk2-10; display(); for(j=0;j<5;j+) disp_char(j,1,table1j); /第一行顯示NAME:及對應(yīng)的用戶名 disp_char(5,1,namein_name); for(j=0;j<5;j
18、+) disp_char(j,2,table2j); /第二行先后顯示CODE:*,CODE:*,CODE:*,CODE:* for(j=0;j<i+1;j+) disp_char(5+j,2,'*'); delay(10); delay(10);/-檢驗輸入的密碼是否與第一次輸入的密碼一致-/ if(in_code20=in_code10&&in_code21=in_code11&&in_code22=in_code12&&in_code23=in_code13) flag2=1; /輸入密碼正確,退出while循環(huán) p1
19、7=1;/指示燈亮,蜂鳴器響,表示密碼正確 delay(400); p17=0; else flag2=0; /輸入密碼錯誤重新輸入 error_num+; display(); for(j=0;j<5;j+) /第一行顯示NAME:及對應(yīng)的用戶名 disp_char(j,1,table1j); disp_char(5,1,namein_name); for(j=0;j<5;j+) /第二行顯示CODE:ERROR!2 disp_char(j,2,table2j); for(j=0;j<6;j+) disp_char(j+5,2,errj); disp_char(11,2,&
20、#39;2'); delay(10); /=第一次輸入密碼函數(shù)=/ void input_code1() uint i,j,n,flag1=0,k1=16; error_num=0; while(flag1=0&&error_num<3) for(i=0;i<4;i+) /輸入4位數(shù)密碼,保存在in_code1中 k1=16; k1=keyscan(); while(k1=16) k1=keyscan(); in_code1i=funk1-10; display(); for(j=0;j<5;j+) disp_char(j,1,table1j); /第
21、一行顯示NAME:及對應(yīng)的用戶名 disp_char(5,1,namein_name); for(j=0;j<5;j+) disp_char(j,2,table2j); /第二行先后顯示CODE:*,CODE:*,CODE:*,CODE:* for(n=0;n<i+1;n+) disp_char(5+n,2,'*'); delay(10); delay(600); /-檢驗輸入的密碼是否正確-/ if(in_code10=codin_name*4+0&&in_code11=codin_name*4+1&&in_code12=codin
22、_name*4+2&&in_code13=codin_name*4+3) flag1=1; /輸入密碼正確,退出wlile循環(huán),等待第二次輸入密碼 display(); for(j=0;j<5;j+) disp_char(j,1,table1j); /第一行顯示NAME:及對應(yīng)的用戶名 disp_char(5,1,namein_name); for(j=0;j<5;j+) disp_char(j,2,table2j); /第二行顯示CODE:INPUT AGAIN for(j=0;j<11;j+) disp_char(j+5,2,agaj); /INPUT A
23、GAIN delay(10); p17=0; /指示燈亮,蜂鳴器響,表示密碼正確 delay(400); p17=1; else flag1=0; /輸入密碼錯誤重新輸入 error_num+; display(); for(j=0;j<5;j+) /第一行顯示NAME:及對應(yīng)的用戶名 disp_char(j,1,table1j); disp_char(5,1,namein_name); for(j=0;j<5;j+) /第二行顯示CODE:ERROR!1 disp_char(j,2,table2j); for(j=0;j<6;j+) disp_char(j+5,2,errj
24、); disp_char(11,2,'1'); delay(100); /=輸入用戶名函數(shù)=/void input_name() uint j,flag0=0,error_num=0; uint k0=16; while(flag0=0) k0=keyscan();while(k0=16) /k0=16表示未輸入用戶名 k0=keyscan();/-/ if(k0>=0&&k0<4) /輸入為用戶0、用戶1、用戶2、用戶3 flag0=1; /flag=1表示輸入一個正確的用戶 in_name=k0; /記下所輸入的正確用戶的序號 display()
25、; for(j=0;j<5;j+)/第一行顯示NAME:及輸入的用戶 disp_char(j,1,table1j); disp_char(5,1,k0); for(j=0;j<5;j+) /第二行顯示CODE: disp_char(j,2,table2j); delay(10); p17=0; /指示燈亮,蜂鳴器響,表示用戶名正確 delay(400); p17=1; /-/ if(k0>=4&&k0<=15) /輸入的用戶錯誤 flag0=0; error_num+; display(); for(j=0;j<5;j+) /第一行顯示NAME:ERROR! disp_char(j,1,table1j); disp_char(5,1,funk0-10); for(j=0;j<6;j+) disp_char(j+7,1,errj); for(j=0;j<5;j
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 烘焙小區(qū)活動方案
- 烘焙插花活動方案
- 煙草公司端午節(jié)活動方案
- 禪城工廠飯?zhí)霉芾磙k法
- 外聘人員薪酬管理辦法
- 資質(zhì)認定管理辦法講義
- 督導(dǎo)督辦工作管理辦法
- 如何健全辦學(xué)管理辦法
- 員額退出機制管理辦法
- 藥品責(zé)任追究管理辦法
- 【MOOC】人像攝影-中國傳媒大學(xué) 中國大學(xué)慕課MOOC答案
- 中小學(xué)家長會期中期末家長會253
- 派出所應(yīng)對校園突發(fā)事件應(yīng)急預(yù)案
- 燃氣管道防火防爆安全方案
- 網(wǎng)絡(luò)安全漏洞挖掘與報告
- 埋地消防管滲漏整改工程施工方案
- 裝飾裝修施工人員安全知識培訓(xùn)考試試卷及答案
- 2023年上海市普通高中學(xué)業(yè)水平合格性考試地理試題及答案
- 醫(yī)聯(lián)體協(xié)議書(2024版)
- 宿舍消防安全培訓(xùn)課件
- 11 《愛蓮說》對比閱讀-2024-2025中考語文文言文閱讀專項訓(xùn)練(含答案)
評論
0/150
提交評論