基于51單片機的多功能電子密碼鎖(仿真圖+完整程序)_第1頁
基于51單片機的多功能電子密碼鎖(仿真圖+完整程序)_第2頁
基于51單片機的多功能電子密碼鎖(仿真圖+完整程序)_第3頁
基于51單片機的多功能電子密碼鎖(仿真圖+完整程序)_第4頁
基于51單片機的多功能電子密碼鎖(仿真圖+完整程序)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、主要功能:當輸入密碼時,只顯示“*”,當密碼位數(shù)輸入完畢按下確認鍵時,對輸入的密碼與設(shè)定的密碼進行比較,若密碼正確,則門開,此處用綠色LED發(fā)光二極管亮一秒鐘做為提示,;若密碼不正確,禁止按鍵輸入3秒,同時綠色發(fā)光二極管亮;若在3秒之內(nèi)仍有按鍵按下,則禁止按鍵輸入3秒被重新禁止。#include #define uint unsigned int#define uchar unsigned char#define KEY P3 /鍵盤輸入端口#define No_key 20 /無按鍵時的返回值#define lcddata P2 /1602的數(shù)據(jù)輸入端口sbit lcden= P12;sbi

2、t lcdrs= P10;sbit lcdrw= P11;sbit light= P13;sbit light1= P14;uchar j ; /用來統(tǒng)計輸入 個數(shù)的全局變量uchar aa; /用來在定時器中計數(shù)的 全局變量 uchar code table= Hello!;uchar code table1= OK! ;uchar code table2=Enter please: ;uchar code key_table16 = 1,2,3,10, 4,5,6,11, 7,8,9,12, 0,13,14,15 ;uchar password=2,0,1,0,9,3 ; /設(shè)定初始密碼u

3、char save6; /保存輸入的數(shù)據(jù)uchar conflag ; /確認標志uchar lockflag; /鎖鍵盤標志uchar startflag; /開始標志 void delay(uint z); /延時子函數(shù)void wright_com(uchar com); /寫指令函數(shù)void wright_data(uchar date) ; /寫數(shù)據(jù)函數(shù)void init(); /初始化void display_OK(); / 顯示OKvoid delete(); /刪除輸入的最后一個數(shù)uchar keyscan() ; /帶返回值的鍵盤掃描程序void enter_code(uch

4、ar t); /輸入密碼函數(shù),把輸入的數(shù)據(jù)存入數(shù)組中并在屏幕上顯示相應的東西,void confirm(); /確認密碼對不對,把輸入的數(shù)據(jù)與密碼逐一對比,完全一樣剛正確,void succeed_an(); /輸入密碼成功時的 響應,void fail_an(); /輸入密碼 失敗時 響應 void lockkey(); /鎖鍵盤三秒void alarm(); /發(fā)出警報聲void reset(); /復位函數(shù)void display_enter(); /顯示輸入void main(void) uchar temp; init(); while(1) if(lockflag) temp=ke

5、yscan(); / 鎖鍵期間也要進行鍵盤掃描 if(temp!=No_key) /重新記時三秒 aa=0; /重新在定時器中計數(shù) else temp=keyscan(); /反復掃描輸入,等待隨時輸入 if(temp!=No_key) /有按鍵按下才進行下面的操作 if(temp=10) reset(); startflag=1; /開始標志置位 if(startflag) enter_code(temp); /每掃描一次鍵盤就要進行一次處理,保存輸入的數(shù)值 if(temp=13) /按下確認鍵盤就要進行密碼確認 confirm(); /進行確認判斷 if(conflag) /密碼確認為正確

6、 succeed_an(); /密碼正確,作出相應的反應 else fail_an(); /密碼錯誤,作相應反應 if(temp=14) delete(); /作刪除操作 /* 顯示enter*/void display_enter() uchar num; wright_com(0x80);for(num=0;num13;num+) wright_data(table2num); /* 顯示OK*/void display_OK() uchar num;wright_com(0x80);for(num=0;num13;num+) wright_data(table1num); /* 刪除最后

7、一個*/void delete()wright_com(0x80+0x40+j); /確定刪除對象wright_data( ); /顯示空格即為刪除save-j=0; /刪除后數(shù)據(jù)清零wright_com(0x80+0x40+j); /為下次輸入數(shù)據(jù)時寫好位置,必須是在最后一個后面/* 對各種變量進行復位*/void reset()uchar num;display_enter();wright_com(0x80+0x40); /擦除屏幕上的顯示for(num=0;num=0&t10) if(j=0) wright_com(0x80+0x40) ; /第一輸入時要先寫入地址指令,否則無法顯示

8、wright_data(*) ; else wright_data(*) ;/不是第一個輸入則不用再寫地址 savej+=t; /保存輸入的數(shù)據(jù) /*校對密碼以確定是不是正確的*/void confirm()uchar k;for(k=0;k=60) /三秒到了 aa=0; /清零可以方便下次再使用 light1=1; /關(guān)閉警報 lockflag=0; /標志清零解除鍵鎖,方便下次使用 /*初始化*/void init() uchar num; /*定時器初始化*/ TMOD=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;

9、/開啟總中斷TR0=1;/把定時器關(guān)閉/*1602初始化*/lcdrw=0; /這個必須要置 零,否則無法正常顯示 lcden=0;wright_com(0x38) ; /初始化 wright_com(0x0c) ; /打開光標 0x0c不顯示光標 0x0e光標不閃,0x0f光標閃wright_com(0x01) ; /清顯示wright_com(0x80) ;for(num=0;num0;x-) for(y=110;y0;y-) ;/*4x4矩陣鍵盤掃描函數(shù)*/uchar keyscan() uchar temp,num=No_key; /num的初值要為無鍵盤按下時的返回值/*掃描第一行*

10、/ KEY=0xfe; temp=KEY; temp=temp&0xf0; /讀出高四位 while(temp!=0xf0) delay(5); /延時消抖 temp=KEY; temp=temp&0xf0; while(temp!=0xf0) /確認確實有按鍵按下 temp=KEY; switch(temp) /根據(jù)這八個電平可以確定是哪個按鍵按下 case 0xee:num=1; break; case 0xde:num=2; break; case 0xbe:num=3; break; case 0x7e:num=10; break; while(temp!=0xf0) /等待松手 te

11、mp=KEY; temp=temp&0xf0; /*掃描第二行*/ KEY=0xfd; temp=KEY; temp=temp&0xf0; while(temp!=0xf0) delay(5); temp=KEY; temp=temp&0xf0; while(temp!=0xf0) temp=KEY; switch(temp) case 0xed:num=4; break; case 0xdd:num=5; break; case 0xbd:num=6; break; case 0x7d:num=11; break; while(temp!=0xf0) temp=KEY; temp=temp&

12、0xf0; /*掃描第三行*/ KEY=0xfb; temp=KEY; temp=temp&0xf0; while(temp!=0xf0) delay(5); temp=KEY; temp=temp&0xf0; while(temp!=0xf0) temp=KEY; switch(temp) case 0xeb:num=7; break; case 0xdb:num=8 ; break; case 0xbb:num=9; break; case 0x7b:num=12; break; while(temp!=0xf0) temp=KEY; temp=temp&0xf0; /*掃描第四行*/ KEY=0xf7; temp=KEY; temp=temp&0xf0; while(temp!=0xf0) delay(5); temp=KEY; temp=temp&0xf0; w

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論