根據設定好的密碼,采用二個按鍵實現密碼的輸入功能,當密碼輸入正確之后,鎖就打開,如果輸入的三次的密碼不正確,就鎖定按鍵3秒鐘,同時發現報警聲,直到沒有按鍵按下3種后,才打開按鍵鎖定功能;否則在3秒鐘內仍有按鍵按下,就重新鎖定按鍵3秒時間并報警。
單片機源程序如下:
- #include <reg52.h>
- unsigned char code ps[]={1,2,3,4,5};
- unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
- unsigned char pslen=9;
- unsigned char templen;
- unsigned char digit;
- unsigned char funcount;
- unsigned char digitcount;
- unsigned char psbuf[9];
- bit cmpflag;
- bit hibitflag;
- bit errorflag;
- bit rightflag;
- unsigned int second3;
- unsigned int aa;
- unsigned int bb;
- bit alarmflag;
- bit exchangeflag;
- unsigned int cc;
- unsigned int dd;
- bit okflag;
- unsigned char oka;
- unsigned char okb;
- void main(void)
- {
- unsigned char i,j;
- P2=dispcode[digitcount];
- TMOD=0x01;
- TH0=(65536-500)/256;
- TL0=(65536-500)%256;
- TR0=1;
- ET0=1;
- EA=1;
- while(1)
- {
- if(cmpflag==0)
- {
- if(P3^6==0) //function key
- {
- for(i=10;i>0;i--)
- for(j=248;j>0;j--);
- if(P3^6==0)
- {
- if(hibitflag==0)
- {
- funcount++;
- if(funcount==pslen+2)
- {
- funcount=0;
- cmpflag=1;
- }
- P1=dispcode[funcount];
- }
- else
- {
- second3=0;
- }
- while(P3^6==0);
- }
- }
- if(P3^7==0) //digit key
- {
- for(i=10;i>0;i--)
- for(j=248;j>0;j--);
- if(P3^7==0)
- {
- if(hibitflag==0)
- {
- digitcount++;
- if(digitcount==10)
- {
- digitcount=0;
- }
- P2=dispcode[digitcount];
- if(funcount==1)
- {
- pslen=digitcount;
- templen=pslen;
- }
- else if(funcount>1)
- {
- psbuf[funcount-2]=digitcount;
- }
- }
- else
- {
- second3=0;
- }
- while(P3^7==0);
- }
- }
- }
- else
- {
- cmpflag=0;
- for(i=0;i<pslen;i++)
- {
- if(ps[i]!=psbuf[i])
- {
- hibitflag=1;
- i=pslen;
- errorflag=1;
- rightflag=0;
- cmpflag=0;
- second3=0;
- goto
- }
- }
- cc=0;
- errorflag=0;
- rightflag=1;
- hibitflag=0;
- cmpflag=0;
- }
- }
- }
- void t0(void) interrupt 1 using 0
- {
- TH0=(65536-500)/256;
- TL0=(65536-500)%256;
- if((errorflag==1) && (rightflag==0))
- {
- bb++;
- if(bb==800)
- {
- bb=0;
- alarmflag=~alarmflag;
- }
- if(alarmflag==1)
- {
- P0^0=~P0^0;
- }
- aa++;
- if(aa==800)
- {
- aa=0;
- P0^1=~P0^1;
- }
- second3++;
- if(second3==6400)
- {
- second3=0;
- hibitflag=0;
- errorflag=0;
- rightflag=0;
- cmpflag=0;
- P0^1=1;
- alarmflag=0;
- bb=0;
- aa=0;
- }
- }
- if((errorflag==0) && (rightflag==1))
- {
- P0_1=0;
- cc++;
- if(cc<1000)
- {
- okflag=1;
- }
- else if(cc<2000)
- {
- okflag=0;
- }
- else
- {
- errorflag=0;
- rightflag=0;
- hibitflag=0;
- cmpflag=0;
- P0^1=1;
- cc=0;
- oka=0;
- okb=0;
- okflag=0;
- P0^0=1;
- }
- if(okflag==1)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
新建文件夾.zip
(15.74 KB, 下載次數: 8)
2017-11-14 16:00 上傳
點擊文件名下載附件
源文件 下載積分: 黑幣 -5
|