如果需要其它東西可以問我
單片機源程序如下:
- //P0_0用作蜂鳴器
- //用4×4組成0-9數字鍵、確認鍵F及修改鍵C。
- //用8位數碼管組成顯示電路提示信息,當輸入密碼時,只顯示“8.”,當密碼位數輸入完畢按下確認鍵時,
- //對輸入的密碼與設定的密碼進行比較,若密碼正確,用8位數碼管顯示“1HELLO”作為提示信息,
- //同時發出“叮咚”聲;若密碼不正確,用8位數碼管顯示“2ERROR”作為提示信息,同時發出“嘀、嘀”報警聲
- //在輸入密碼的過程中可以隨時對輸入的密碼進行修改。
- #include <at89x52.H>
- unsigned char wl[]={1,2,3,4,5,6};
- unsigned char code wl1[]={0xfe,0xfd,0xfb,0xf7,
- 0xef,0xdf,0xbf,0x7f};
- unsigned char code wl2[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f,
- 0x77,0x7c,0x39,0x5e,0x79,0x71,
- 0x00,0x40,0x73,0xff};
- unsigned char code wl8[]={0x00,0x00,0x77,0x3f,0x77,
- 0x77,0x79,0x5b};
- unsigned char code wl9[]={0x00,0x00,0x3f,0x38,0x38,
- 0x79,0x76,0x06};
- unsigned char wl3[8]={18,16,16,16,16,16,16,16};
- unsigned char wl4;
- unsigned char wl5;
- unsigned char wl6;
- unsigned char wl7;
- unsigned char zw;
- unsigned char zq;
- unsigned char wl7count;
- unsigned char wllen=6;
- unsigned char getwl[6];
- bit wl7overflag;
- bit errorflag;
- bit rightflag;
- unsigned int second3;
- unsigned int aa,bb;
- unsigned int cc;
- bit wl8flag;
- bit alarmflag;
- bit hibitflag;
- unsigned char wl8a,wl8b;
-
-
- void main(void)
- {
- unsigned char i,j;
-
- TMOD=0x01;
- TH0=(65536-300)/256;
- TL0=(65536-300)%256;
- TR0=1;
- ET0=1;
- EA=1;
-
- while(1)
- {
- P3=0xff;
- P3_4=0;
- wl6=P3;
- wl6=wl6 & 0x0f;
- if (wl6!=0x0f)
- {
- for(i=10;i>0;i--)
- for(j=248;j>0;j--);
- wl6=P3;
- wl6=wl6 & 0x0f;
- if (wl6!=0x0f)
- {
- wl6=P3;
- wl6=wl6 & 0x0f;
- switch(wl6)
- {
- case 0x0e:
- wl7=12;
- break;
- case 0x0d:
- wl7=13;
- break;
- case 0x0b:
- wl7=14;
- break;
- case 0x07:
- wl7=15;
- break;
- }
- wl6=P3;
- //P1_1=~P1_1;
- if((wl7>=0) && (wl7<10))
- {
- if(wl7count<6)
- {
- getwl[wl7count]=wl7;
- wl3[wl7count+2]=19;
- }
- wl7count++;
- if(wl7count==6)
- {
- wl7count=6;
-
- }
- else if(wl7count>6)
- {
- wl7count=6;
- wl7overflag=1;//wl7 overflow
- }
- }
- else if(wl7==12)//delete wl7
- {
- if(wl7count>0)
- {
- wl7count--;
- getwl[wl7count]=0;
- wl3[wl7count+2]=16;
- }
- else
- {
- wl7overflag=1;
- }
- }
- else if(wl7==15)//enter wl7
- {
- if(wl7count!=wllen)
- {
- errorflag=1;
- rightflag=0;
- second3=0;
- }
- else
- {
- for(i=0;i<wl7count;i++)
- {
- if(getwl[i]!=wl[i])
- {
- i=wl7count;
- errorflag=1;
- rightflag=0;
- second3=0;
- goto a;
- }
- }
- errorflag=0;
- rightflag=1;
- a: i=wl7count;
- }
- }
- wl6=wl6 & 0x0f;
- while(wl6!=0x0f)
- {
- wl6=P3;
- wl6=wl6 & 0x0f;
- }
- wl7overflag=0;//?????????
- }
- }
-
- P3=0xff;
- P3_5=0;
- wl6=P3;
- wl6=wl6 & 0x0f;
- if (wl6!=0x0f)
- {
- for(i=10;i>0;i--)
- for(j=248;j>0;j--);
- wl6=P3;
- wl6=wl6 & 0x0f;
- if (wl6!=0x0f)
- {
- wl6=P3;
- wl6=wl6 & 0x0f;
- switch(wl6)
- {
- case 0x0e:
- wl7=11;
- break;
- case 0x0d:
- wl7=3;
- break;
- case 0x0b:
- wl7=6;
- break;
- case 0x07:
- wl7=9;
- break;
- }
- wl6=P3;
- //P1_1=~P1_1;
- if((wl7>=0) && (wl7<10))
- {
- if(wl7count<6)
- {
- getwl[wl7count]=wl7;
- wl3[wl7count+2]=19;
- }
- wl7count++;
- if(wl7count==6)
- {
- wl7count=6;
- }
- else if(wl7count>6)
- {
- wl7count=6;
- wl7overflag=1;//wl7 overflow
- }
- }
- else if(wl7==12)//delete wl7
- {
- if(wl7count>0)
- {
- wl7count--;
- getwl[wl7count]=0;
- wl3[wl7count+2]=16;
- }
- else
- {
- wl7overflag=1;
- }
- }
- else if(wl7==15)//enter wl7
- {
- if(wl7count!=wllen)
- {
- errorflag=1;
- rightflag=0;
- second3=0;
- }
- else
- {
- for(i=0;i<wl7count;i++)
- {
- if(getwl[i]!=wl[i])
- {
- i=wl7count;
- errorflag=1;
- rightflag=0;
- second3=0;
- goto a4;
- }
- }
- errorflag=0;
- rightflag=1;
- a4: i=wl7count;
- }
- }
- wl6=wl6 & 0x0f;
- while(wl6!=0x0f)
- {
- wl6=P3;
- wl6=wl6 & 0x0f;
- }
- wl7overflag=0;//?????????
- }
- }
-
- P3=0xff;
- P3_6=0;
- wl6=P3;
- wl6=wl6 & 0x0f;
- if (wl6!=0x0f)
- {
- for(i=10;i>0;i--)
- for(j=248;j>0;j--);
- wl6=P3;
- wl6=wl6 & 0x0f;
- if (wl6!=0x0f)
- {
- wl6=P3;
- wl6=wl6 & 0x0f;
- switch(wl6)
- {
- case 0x0e:
- wl7=10;
- break;
- case 0x0d:
- wl7=2;
- break;
- case 0x0b:
- wl7=5;
- break;
- case 0x07:
- wl7=8;
- break;
- }
- wl6=P3;
- //P1_1=~P1_1;
- if((wl7>=0) && (wl7<10))
- {
- if(wl7count<6)
- {
- getwl[wl7count]=wl7;
- wl3[wl7count+2]=19;
- }
- wl7count++;
- if(wl7count==6)
- {
- wl7count=6;
- }
- else if(wl7count>6)
- {
- wl7count=6;
- wl7overflag=1;//wl7 overflow
- }
- }
- else if(wl7==12)//delete wl7
- {
- if(wl7count>0)
- {
- wl7count--;
- getwl[wl7count]=0;
- wl3[wl7count+2]=16;
- }
- else
- {
- wl7overflag=1;
- }
- }
- else if(wl7==15)//enter wl7
- {
- if(wl7count!=wllen)
- {
- errorflag=1;
- rightflag=0;
- second3=0;
- }
- else
- {
- for(i=0;i<wl7count;i++)
- {
- if(getwl[i]!=wl[i])
- {
- i=wl7count;
- errorflag=1;
- rightflag=0;
- second3=0;
- goto a3;
- }
- }
- errorflag=0;
- rightflag=1;
- a3: i=wl7count;
- }
- }
- wl6=wl6 & 0x0f;
- while(wl6!=0x0f)
- {
- wl6=P3;
- wl6=wl6 & 0x0f;
- }
- wl7overflag=0;//?????????
- }
- }
-
- P3=0xff;
- P3_7=0;
- wl6=P3;
- wl6=wl6 & 0x0f;
- if (wl6!=0x0f)
- {
- for(i=10;i>0;i--)
- for(j=248;j>0;j--);
- wl6=P3;
- wl6=wl6 & 0x0f;
- if (wl6!=0x0f)
- {
- wl6=P3;
- wl6=wl6 & 0x0f;
- switch(wl6)
- {
- case 0x0e:
- wl7=0;
- break;
- case 0x0d:
- wl7=1;
- break;
- case 0x0b:
- wl7=4;
- break;
- case 0x07:
- wl7=7;
- break;
- }
- wl6=P3;
- //P1_1=~P1_1;
- if((wl7>=0) && (wl7<10))
- {
- if(wl7count<6)
- {
- getwl[wl7count]=wl7;
- wl3[wl7count+2]=19;
- }
- wl7count++;
- if(wl7count==6)
- {
- wl7count=6;
- }
- else if(wl7count>6)
- {
- wl7count=6;
- wl7overflag=1;//wl7 overflow
- }
- }
- else if(wl7==12)//delete wl7
- {
- if(wl7count>0)
- {
- wl7count--;
- getwl[wl7count]=0;
- wl3[wl7count+2]=16;
- }
- else
- {
- wl7overflag=1;
- }
- }
- else if(wl7==15)//enter wl7
- {
- if(wl7count!=wllen)
- {
- errorflag=1;
- rightflag=0;
- second3=0;
- }
- else
- {
- for(i=0;i<wl7count;i++)
- {
- if(getwl[i]!=wl[i])
- {
- i=wl7count;
- errorflag=1;
- rightflag=0;
- second3=0;
- goto a2;
- }
- }
- errorflag=0;
- rightflag=1;
- a2: i=wl7count;
- }
- }
- wl6=wl6 & 0x0f;
- while(wl6!=0x0f)
- {
- wl6=P3;
- wl6=wl6 & 0x0f;
- }
- wl7overflag=0;//?????????
- }
- }
-
- }
- }
- void t0(void) interrupt 1 using 0
- {
- TH0=(65536-300)/256;
- TL0=(65536-300)%256;
-
- wl5++;
- if(wl5==8)
- {
- wl5=0;
- P1=wl2[wl3[wl4]];
- P2=wl1[wl4];
- wl4++;
- if(wl4==8)
- {
- wl4=0;
- }
- }
-
- if((errorflag==1) && (rightflag==0))
- {
- zw++;
- P1=wl8[zw];
- P2=wl1[zw];
- if(zw==8)
- {
- zw=0;
- }
- bb++;
- if(bb==800)
- {
- bb=0;
- alarmflag=~alarmflag;
- }
- if(alarmflag==1)//sound alarm signal
- {
- P0_0=~P0_0;
- }
-
- aa++;
- if(aa==800)//light alarm signal
- {
- aa=0;
- //P1_0=~P1_0;
- }
- second3++;
- if(second3==6400)
- {
- second3=0;
- errorflag=0;
- rightflag=0;
- alarmflag=0;
- bb=0;
- aa=0;
- }
- }
- else if((errorflag==0) && (rightflag==1))
- {
- zq++;
- P1=wl9[zq];
- P2=wl1[zq];
- if(zq==8)
- {
- zq=0;
-
- }
- cc++;
- if(cc<1000)
- {
- wl8flag=1;
- }
- else if(cc<2000)
- {
- wl8flag=0;
- }
- else
- {
- errorflag=0;
- rightflag=0;
- P0_0=1;
- cc=0;
- wl8a=0;
- wl8b=0;
- wl8flag=0;
- //P1_0=1;
- }
- if(wl8flag==1)
- {
- wl8a++;
- if(wl8a==2)
- {
- wl8a=0;
- P0_0=~P0_0;
- }
- }
- else
- {
- wl8b++;
- if(wl8b==3)
- {
- wl8b=0;
- P0_0=~P0_0;
- }
- }
- }
-
- if(wl7overflag==1)
- {
- P0_0=~P0_0;
- }
- }
復制代碼
電子密碼鎖程序.rar
(18.5 KB, 下載次數: 14)
2018-12-21 22:17 上傳
點擊文件名下載附件
源程序
|