|
密碼鎖
0.png (30.66 KB, 下載次數(shù): 317)
下載附件
2016-1-13 22:41 上傳
1.png (33.19 KB, 下載次數(shù): 287)
下載附件
2016-1-13 22:41 上傳
51單片機(jī)密碼鎖全部代碼和仿真下載:
電子密碼鎖仿真有代碼.zip
(3.92 MB, 下載次數(shù): 446)
2015-5-23 18:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
部分源碼預(yù)覽:
- #include <reg52.h>
- #include "delay_ms.h"
- #include "矩陣鍵盤.h"
- #include "i2c.h"
- #include "1602.h"
- #include "delay_ms.h"
- #include "mima.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define A 0x0a //輸入密碼
- #define B 0x0b //修改密碼
- #define D 0x0d //關(guān)鎖
- #define enter 0x0c //確認(rèn)
- #define backspace 0x0f //退格鍵
- sbit baojing = P3^7; //蜂鳴器接口
- sbit lock = P3^3;//鎖信號(hào)
- sbit set = P3^2;
- uchar idata mima_5[6] = {1,2,3,4,5,6}; //初始密碼
- uchar flag_change;
- uchar aa;//存放密碼錯(cuò)誤的次數(shù),夠三次報(bào)警
- uchar bb;
- uchar flag_t0;
- void baoj1()//報(bào)警函數(shù)
- {
- int i;
- for(i = 0;i < 5; i++)
- {
- baojing = 1;
- delay_ms(5);
- baojing = 0;
- delay_ms(5);
- }
- }
- void baoj()
- {
- uchar i;
- for(i = 0; i < 10; i++)
- baoj1();
- }
- /*密碼處理函數(shù)*/
- void mimachuli()
- {
- uchar key,i;
- uchar idata mima_1[6]={' ',' ',' ',' ',' ',' '};//存放密碼緩沖區(qū)
- uchar idata mima_2[6]={' ',' ',' ',' ',' ',' '};
- uchar idata mima_3[6]={' ',' ',' ',' ',' ',' '};
- key = step_choose();
- if(key == A)//A被按下,接收輸入密碼,處理
- {
- read_n_add(mima_1,0x00,6);
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_com(0x0f);//顯示光標(biāo)
- lcd_pos(0,0);
- write_n_char(" press password ");
-
- if(input_mima(mima_2)) //處理輸入密碼
- {
- if(mimaduibi(mima_2,mima_1)) //密碼正確
- {
- lcd_pos(0,0);
- write_com(0x0c);
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char(" password right ");
- aa = 0; //清除密碼錯(cuò)誤次數(shù)
- lock = 0; //開鎖
- baojing = 1; //響一下
- delay_ms(1000);
- baojing = 0;
- TR0 = 1;
- flag_t0 = 1;
- while(key != D && flag_t0) //D沒按下一直開
- {
- key = keyscan();
- }
- TR0 = 0;
- lock = 1;//D按下了關(guān)鎖
- }
- else //密碼 不正確
- {
- lcd_pos(0,0);
- write_com(0x0c); //關(guān)光標(biāo)
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char(" password wrong");
- delay_ms(1000);
- aa++;
- if(aa == 4)
- {
- aa = 0;
- i = 20; //密碼不正確報(bào)警
- while(i--)
- baoj();
- }
- }
- }
- else //密碼沒有輸入正確或完成
- {
- lcd_pos(0,0);
- write_com(0x0c); //關(guān)光標(biāo)
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char(" password wrong");
- delay_ms(1000);
- aa++;
- if(aa == 4)
- {
- aa = 0;
- i = 20; //密碼不正確報(bào)警
- while(i--)
- baoj();
- }
- }
- }
- if(key == B)//B被按下,修改密碼
- {
- read_n_add(mima_1,0x00,6);
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_com(0x0f);//顯示光標(biāo)
- lcd_pos(0,0);
- write_n_char(" input password");
- write_com(0x0f);//顯示光標(biāo)
- if(input_mima(mima_2)) //處理輸入密碼
- {
- if(mimaduibi(mima_2,mima_1)) //密碼正確
- {
- lcd_pos(0,0);
- write_com(0x0c);
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char("password right ");
- aa = 0; //清除密碼錯(cuò)誤次數(shù)
- delay_ms(1500);
- flag_change = 1;
- while(flag_change) //下面開始修改密碼
- {
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_com(0x0f);//顯示光標(biāo)
- lcd_pos(0,0);
- write_n_char("In new password");
- delay_ms(1500);
- if(input_mima(mima_2)) //處理輸入密碼
- {
- lcd_pos(0,0);
- write_com(0x0c);
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char("Input new pass"); //確定新密碼
- lcd_pos(1,0);
- write_n_char("word again");
- delay_ms(2000);
- lcd_pos(0,0);
- write_com(0x0f);//顯示光標(biāo)
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char("In new password");
- if(input_mima(mima_3)) //處理輸入密碼
- {
- if(mimaduibi(mima_2,mima_3)) //密碼正確
- {
- lcd_pos(0,0);
- write_com(0x0c);
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char("password has");
- lcd_pos(1,0);
- write_n_char("change already");
- write_n_add(mima_3,0x00,6); //把修改的密碼存進(jìn)24C02
- delay_ms(2000);
- flag_change = 0;
- }
- else //密碼 不正確
- {
- lcd_pos(0,0);
- write_com(0x0c); //關(guān)光標(biāo)
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char("password wrong");
- delay_ms(1000);
- aa++;
- if(aa == 4)
- {
- aa = 0;
- i = 20; //3次輸入密碼不正確報(bào)警
- while(i--)
- baoj();
- }
- flag_change = 0;
- }
- }
- else //密碼沒有輸入正確或完成
- {
- lcd_pos(0,0);
- write_com(0x0c); //關(guān)光標(biāo)
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char(" password wrong");
- delay_ms(1000);
- aa++;
- if(aa == 4)
- {
- aa = 0;
- i = 20; //3次輸入密碼不正確報(bào)警
- while(i--)
- baoj();
- }
- }
-
- }
- else //密碼沒有輸入正確或完成
- {
- lcd_pos(0,0);
- write_com(0x0c); //關(guān)光標(biāo)
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char("password wrong");
- delay_ms(1000);
- flag_change = 0;
- aa++;
- if(aa == 4)
- {
- aa = 0;
- i = 20; //3次輸入密碼不正確報(bào)警
- while(i--)
- baoj();
- }
- }
-
- }
- }
- else //密碼 不正確
- {
- lcd_pos(0,0);
- write_com(0x0c); //關(guān)光標(biāo)
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char("password wrong");
- delay_ms(1000);
- aa++;
- if(aa == 4)
- {
- aa = 0;
- i = 20; //3次輸入密碼不正確報(bào)警
- while(i--)
- baoj();
- }
- }
- }
- else //密碼沒有輸入正確或完成
- {
- lcd_pos(0,0);
- write_com(0x0c); //關(guān)光標(biāo)
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char("password wrong");
- delay_ms(1000);
- aa++;
- if(aa == 4)
- {
- aa = 0;
- i = 20; //3次輸入密碼不正確報(bào)警
- while(i--)
- baoj();
- }
- }
- }
- }
- /*外部中斷函數(shù),恢復(fù)出廠設(shè)置,長按set鍵恢復(fù)*/
- void int0() interrupt 0
- {
- delay_ms(2000);
- if(!set)
- {
- lcd_pos(0,0);
- write_com(0x0c); //關(guān)光標(biāo)
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- i2cinit();//24C02總線初始化
- write_n_add(mima_5,0x00,6);
- write_n_char("password renew");
- lcd_pos(1,0);
- write_n_char("already");
- delay_ms(1000);
- lcd_pos(0,0);
- write_com(0x0c); //關(guān)光標(biāo)
- write_com(0x06);//寫一個(gè)字符后地址指針加 1
- write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
- write_n_char("Input password");
- lcd_pos(1,0);
- write_n_char("Press key A");
- }// 引起了三個(gè)警告
- }
- void timer0() interrupt 1 //定時(shí)器0中斷,50ms定時(shí)
- {
- TH0 = 0x4c;//50ms定時(shí)
- TL0 = 0x00;
- bb++;
- if(bb == 200)//10秒時(shí)間到
- {
- bb = 0;
- flag_t0 = 0;
- }
- }
- void main()
- {
- yjinit();//液晶初始化
- i2cinit();//24C02總線初始化
- baojing = 0;
- lock = 1; //關(guān)鎖
- TMOD = 0x01;//選擇定時(shí)器0方式1
- EA = 1;//打開總中斷
- ET0 = 1;//打開定時(shí)器0中斷
- EX0 = 1; //打開外部中斷0
- IT0 = 1;//下降沿觸發(fā)
- TR0 = 0;//關(guān)閉定時(shí)器
- TH0 = 0x4c;//50ms裝初值
- TL0 = 0x00;
- while(1)
- {
- mimachuli();
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|