#include//#include#define uint unsigned int
#define uchar unsigned char
#define data1602 p0
#define led p2
/*******引腳定義*******/
//按鍵的控制引腳
sbit s1 = p3^7;
sbit s2 = p3^6;
sbit s3 = p3^5;
sbit s4 = p3^4;
sbit s5 = p3^3;
sbit s6 = p3^2;
//lcd1602的控制引腳
sbit rs = p1^0;
sbit rw = p1^1;
sbit e = p1^2;
sbit bf = data1602^7; //bf表示data1602的最高位,判斷是忙還是閒
sbit alam = p1^5;//蜂鳴器引腳
//sbit key = p3^3;//開鎖
bit isinitpass = 1;//是否在初始化密碼
bit pass=0; //密碼正確標誌
bit isreset = 0; //是否在重設密碼
uchar countnum = 0; //選擇數字位數
uchar countpass = 1;//輸入密碼位數
uchar errorcont = 0; //錯誤次數計數
uchar timenum=0; //計時間次數
uchar truetime='5'; // 鎖定時間
//液晶顯示資料陣列
uchar code initlock1 = ;
uchar code initlock2 = ;
uchar code setnew = ;
uchar code input = ; //input
uchar code start_line1 = ;
uchar code start_line2 = ;
uchar code superpassword = ;
uchar code correct = ; //輸入正確
uchar code error = ; //輸入錯誤
uchar code codepass = ;
uchar code lockopen = ; //open
uchar code reset = ;
uchar code oldpassword = ; //輸入舊密碼
uchar code setok = ;
uchar code null = ;
uchar code resetok = ;
uchar code initword = ;
uchar code errortry = ;
uchar code again = ;
uchar code wait = ;
uchar code table=;//流水燈
uchar initpassword[6]=; //初始化密碼暫存陣列
uchar currentpassword[6]=;//輸入密碼暫存陣列
uchar adminpassword[6]=;//管理員密碼
uchar passnum[10] = ; //存放所有數字
/*******延時函式*******/
void delay(uint z)//z毫秒
/*******空函式*******/
/*void nop(void) //空操作
*//*******忙檢測函式*******/
bit lcd_busy()
/*******寫命令函式*******/
void lcd_write_cmd(uchar cmd)//cmd為需要寫的命令
/*******寫資料函式*******/
void lcd_write_data(uchar dat)//dat為需要寫的資料
/*******it0中斷初始化函式*******/
void it_init()
/*******定時器t0中斷初始化函式*******/
void time_init()
/*******lcd初始化函式*******/
void lcd_init()
/*******lcd寫顯示位址函式*******/
void lcd_write_address(uchar x,uchar y)
/*******lcd顯示函式*******/
void lcd_display(uchar x,uchar y,uchar buf) //x:列 y:行,buf:顯示的字元
/*******一聲提示音,表示有效輸入*******/
void onealam()
/*******兩聲提示音,表示操作成功*******/
void twoalam()
}/*******三聲提示音,表示錯誤*******/
void threealam()
}/*******流水燈函式*******/
void led_display()
led = 0x00;
delay(1000);
led = 0xff;
}/*******初始化介面函式*******/
void init_display()
/*******按鍵控制輸入密碼函式*******/
void pushbtn_password()
delay(300);
} if(s3 == 0) //第一次檢測按鍵被按下
delay(250);
} if(s4 == 0)
if(isinitpass)
lcd_display(6+countpass,1,initpassword[countpass-1]);
else
lcd_display(9+countpass,1,currentpassword[countpass-1]);
lcd_write_cmd(0x10);
delay(300);
} if(s5 == 0)
}} lcd_write_cmd(0x0c); //游標不閃爍
}/*******最初設定密碼函式*******/
void init_password()
/*******判斷是否輸入正確函式*******/
void judge()
else if((currentpassword[0]==adminpassword[0])&&(currentpassword[1]==adminpassword[1])&&(currentpassword[2]==adminpassword[2])&&(currentpassword[3]==adminpassword[3])&&(currentpassword[4]==adminpassword[4])&&(currentpassword[5]==adminpassword[5]))
else
errorcont++; //錯誤次數+1
if(jg==1)
else if(jg==2)
else if(jg==3)
else if(jg==4)
else }
/*******顯示輸入密碼函式*******/
void input_password()
}tr0 = 0; //關閉定時器t0
truetime = '5';
} for(i=0;i<16;i++)
lcd_display(i,0,start_line1[i]);
for(i=0;i<16;i++)
lcd_display(i,1,start_line2[i]);
pushbtn_password();
judge();
}while(pass==0); }
/*******main函式*******/
void main()
}void resetpassword() interrupt 0
}tr0 = 0; //關閉定時器t0
truetime = '5';
}*/if(errorcont==3)
for(i=0;i<16;i++)
lcd_display(i,0,oldpassword[i]);
for(i=0;i<16;i++)
lcd_display(i,1,start_line2[i]);
pushbtn_password();
judge();
}while(pass==0&&errorcont<3);
delay(1000);
if(pass == 1)
for(i=0;i<16;i++)
lcd_display(i,0,start_line1[i]);
for(i=0;i<16;i++)
lcd_display(i,1,start_line2[i]);
isinitpass = 0;
isreset = 0;
}void timecount() interrupt 1
基於51微控制器的密碼鎖
本次的專案是基於51微控制器的密碼鎖,適合用來作為課程設計 主要實現了 密碼鎖功能,通過矩陣按鍵輸入密碼,輸入範圍為0 f,共有四位 同時,也可以使用更改按鍵更改密碼,在更改時需要輸入原密碼來進入更改模式,四位密碼顯示h標識,成功修改後,紅綠指示燈會同時閃爍 在輸入密碼正確後,綠色指示燈點亮,舵機啟...
微控制器實用密碼鎖
unsigned char num,i,j unsigned char passwordtemp 16 最大輸入16個 unsigned char inputtimes 密碼輸入錯誤次數 unsigned char passwordlength,plen 輸入密碼長度,實際密碼長度 bit flag...
51微控制器與C51
微控制器又稱單片微控制器,是在一塊晶元中整合了cpu 處理器 ram 資料儲存器 rom 程式儲存器 定時器 計數器和多種功能的i o 輸入 輸出 介面等一台計算機所需要的基本功能部件,從而可以完成複雜的運算 邏輯控制 通訊等功能。51微控制器是對所有相容intel 8031指令系統的微控制器的統稱...