圖片如下
捕獲.PNG (51.23 KB, 下載次數(shù): 67)
下載附件
仿真圖
2019-5-5 10:59 上傳
主要是用LCD12864來顯示
也是為了幫助大家
單片機源程序如下:
- #include<reg51.h>
- #include<12864.h>
- #include<keypad.h>
- #include<24C01.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit LED1=P1^5;
- sbit LED2=P1^6;
- sbit INIT=P2^2;
- sbit SOUND=P1^7;
- uchar idata key[6]={0,0,0,0,0,0};
- uchar idata iic[6]={0,1,2,3,4,5};
- void press(uchar *s)
- {
- uchar dat;
- //**************************************************
- P3=0xf0; //保存第一位密碼
- while(P3==0xf0);
- dat=key_scan();
- if((dat!=0x0a)&&(dat!=0x0b))
- { *s=dat;
- Left();
- star_12864(star,0x05,16);
- }
- s++;
- //**************************************************
- P3=0xf0; //保存第二位密碼
- while(P3==0xf0);
- dat=key_scan();
- if((dat!=0x0a)&&(dat!=0x0b))
- { *s=dat;
- Left();
- star_12864(star,0x05,24);
- }
- s++;
- //**************************************************
- P3=0xf0; //保存第三位密碼
- while(P3==0xf0);
- dat=key_scan();
- if((dat!=0x0a)&&(dat!=0x0b))
- { *s=dat;
- Left();
- star_12864(star,0x05,32);
- }
- s++;
- //**************************************************
- P3=0xf0; //保存第四位密碼
- while(P3==0xf0);
- dat=key_scan();
- if((dat!=0x0a)&&(dat!=0x0b))
- { *s=dat;
- Left();
- star_12864(star,0x05,40);
- }
- s++;
- //**************************************************
- P3=0xf0; //保存第五位密碼
- while(P3==0xf0);
- dat=key_scan();
- if((dat!=0x0a)&&(dat!=0x0b))
- { *s=dat;
- Left();
- star_12864(star,0x05,48);
- }
- s++;
- //**************************************************
- P3=0xf0; //保存第六位密碼
- while(P3==0xf0);
- dat=key_scan();
- if((dat!=0x0a)&&(dat!=0x0b))
- { *s=dat;
- Left();
- star_12864(star,0x05,56);
- }
- //**************************************************
- do{P3=0xf0; //鍵入Enter鍵盤繼續(xù)執(zhí)行下面語句,否則等待
- while(P3==0xf0);
- dat=key_scan();
- }while(dat!=0x0b);
- }
- void Delay10ms(void) //延時10ms
- {
- uint i,j,k;
- for(i=5;i>0;i--)
- for(j=4;j>0;j--)
- for(k=248;k>0;k--);
- }
- void main()
- {
- uchar dat;
- uchar i=0,j=0,k;
- uchar x;
- LED1=1;
- LED2=1;
- SOUND=0;
- INIT=1;
- if(INIT==0) //密碼初始化
- {
- x=SendB(iic,0x50,6);
- Delay10ms();
- } //首先從IIC器件中讀出密碼以供下面輸入密碼進行比較
- x=ReadB(iic,0x50,6);
- Init_12864();
- for(i=0;i<150;i++){Delay10ms();}
- //**********************************若密碼不正確,循環(huán)執(zhí)行do{}while()********************************************
- do{
- LED1=1;
- System(); //顯示:"請輸入密碼"字幕
- press(key);
- if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5])) //密碼比較,若密碼正確責進入系統(tǒng),若密碼不正確則顯示密碼錯誤,重新輸入密碼
- {
- true();
- do
- {
- P3=0xf0; //鍵入1或2繼續(xù)執(zhí)行下面語句,否則等待
- while(P3==0xf0);
- dat=key_scan();
- }while(dat!=0x01&&dat!=0x02);
- if(dat==1) //開鎖
- {
- LED1=0;
- unlock();
- for(i=0;i<100;i++){Delay10ms();}
- continue;
- }
- if(dat==2) //修改密碼
- {
- do{
- System();
- press(key);
- again();
- press(iic);
- if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5]))
- {
- succeed(); //修改密碼成功
- for(i=0;i<100;i++){Delay10ms();}
- Delay10ms();
- x=SendB(iic,0x50,6);
- Delay10ms();
- x=ReadB(iic,0x50,6);break;
- }
- else //修改密碼不成功,重新修改
- {
- repeat();
- for(i=0;i<100;i++){Delay10ms();}
- }
- }while(1);
- }
-
- }
- else //密碼不正確,重新輸入密碼
- {
- j++;
- if(j==3)
- {
- for(i=0;i<8;i++)
- {
- LED2=0;
- for(k=0;k<5;k++){Delay10ms();}
- LED2=1;
- for(k=0;k<5;k++){Delay10ms();}
- }
- j=0;
- }
- error();
- for(i=0;i<50;i++){Delay10ms();}
- }
- }while(1);
-
-
-
- }
復制代碼
捕獲2.PNG (9.17 KB, 下載次數(shù): 81)
下載附件
文件
2019-5-5 11:00 上傳
全部資料51hei下載地址:
基于24C02和12864顯示的電子密碼鎖設計.rar
(104.89 KB, 下載次數(shù): 240)
2019-5-5 11:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|