|
單片機(jī)的智能門禁仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (25.02 KB, 下載次數(shù): 49)
下載附件
2021-3-29 14:53 上傳
51hei圖片20210329102836.png (193.52 KB, 下載次數(shù): 68)
下載附件
2021-3-29 10:28 上傳
單片機(jī)源程序如下:
- #include "reg52.h"
- #include "intrins.h"
- #include <stdio.h>
- sbit j=P0^4;
- sbit men=P0^0;
- void Timer0Init();
- void Timer1Init();
- void shumaguan();
- void shijianxianshi();
- void mimaxianshi();
- void anjian();
- void panduan();
- void xiugaianjian();
- void xiugai();
- unsigned char code abile[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
- unsigned char zhongjian[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
- unsigned char mima[]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0};
- int i,shi=6,fen=59,miao,n,a,c,b,g;
- void main()
- {
- Timer0Init();
- Timer1Init();
- while(1)
- {
- shumaguan();
- if(men==0) {ET1=1;EA=1;}
- if(b==3) {b=0;a=0;mimaxianshi();}
- if(shi>=7||shi>=21)
- {shijianxianshi();men=0;}
- else
- {if(a==0)mimaxianshi();if(b==0)anjian();if(b==1){ET1=0;a=0;mimaxianshi();b=2;}if(b==2)xiugaianjian();panduan();}
- }
- }
- void panduan()
- {
- if(b==0&&a==8&&zhongjian[0]==mima[0]&&zhongjian[1]==mima[1]&&zhongjian[2]==mima[2]&&zhongjian[3]==mima[3]&&zhongjian[4]==mima[4]&&zhongjian[5]==mima[5]&&zhongjian[6]==mima[6]&&zhongjian[7]==mima[7]&&zhongjian[0]==mima[0])
- {
- men=0;xiugai();
- }
- if(b==0&&a==8)
- {
- if(zhongjian[0]!=mima[0]||zhongjian[1]!=mima[1]||zhongjian[2]!=mima[2]||zhongjian[3]!=mima[3]||zhongjian[4]!=mima[4]||zhongjian[5]!=mima[5]||zhongjian[6]!=mima[6]||zhongjian[7]!=mima[7]||zhongjian[0]!=mima[0])
- {
- j=0;
- }
- }
- }
- void xiugai()
- {
- P3=0xbf;
- if(P3!=0XBF)
- {
- switch(P3)
- {
- case(0xbe):zhongjian[a]=abile[2];a++;mima[c]=abile[2];c++;break; //2
- case(0xbd):zhongjian[a]=abile[6];a++;mima[c]=abile[6];c++;break; //6
- case(0xbb):break; //wu
- case(0xb7):b++;break; //xiu
- }
- while(P3!=0XbF)
- {
- P3=0XBF;
- }
- }
- }
- void xiugaianjian()
- {
- P3=0xef;
- if(P3!=0XEF)
- {
- switch(P3)
- {
- case(0xee):zhongjian[a]=abile[0];a++;mima[c]=abile[0];c++;break; //0
- case(0xed):zhongjian[a]=abile[4];a++;mima[c]=abile[4];c++;break; //4
- case(0xeb):zhongjian[a]=abile[8];a++;mima[c]=abile[8];c++;break; //8
- }
- while(P3!=0XEF)
- {
- P3=0XEF;
- }
- }
- P3=0xdf;
- if(P3!=0XDF)
- {
- switch(P3)
- {
- case(0xde):zhongjian[a]=abile[1];a++;mima[c]=abile[1];c++;break; //1
- case(0xdd):zhongjian[a]=abile[5];a++;mima[c]=abile[5];c++;break; //5
- case(0xdb):zhongjian[a]=abile[9];a++;mima[c]=abile[9];c++;break; //9
- case(0xd7):a--;zhongjian[a]=abile[10];break; //qing
- }
- while(P3!=0XdF)
- {
- P3=0XDF;
- }
- }
- P3=0xbf;
- if(P3!=0XBF)
- {
- switch(P3)
- {
- case(0xbe):zhongjian[a]=abile[2];a++;mima[c]=abile[2];c++;break; //2
- case(0xbd):zhongjian[a]=abile[6];a++;mima[c]=abile[6];c++;break; //6
- case(0xbb):break; //wu
- case(0xb7):b++;break; //xiu
- }
- while(P3!=0XbF)
- {
- P3=0XBF;
- }
- }
- P3=0x7f;
- if(P3!=0X7F)
- {
- switch(P3)
- {
- case(0x7e):zhongjian[a]=abile[3];a++;mima[c]=abile[3];c++;break; //3
- case(0x7d):zhongjian[a]=abile[7];a++;mima[c]=abile[7];c++;break; //7
- case(0x7b):break; //wu
- case(0x77):break; //chu
- }
- while(P3!=0X7F)
- {
- P3=0X7F;
- }
- }
- }
- void anjian()
- {
- P3=0xef;
- if(P3!=0XEF)
- {
- switch(P3)
- {
- case(0xee):zhongjian[a]=abile[0];a++;break; //0
- case(0xed):zhongjian[a]=abile[4];a++;break; //4
- case(0xeb):zhongjian[a]=abile[8];a++;break; //8
- }
- while(P3!=0XEF)
- {
- P3=0XEF;
- }
- }
- P3=0xdf;
- if(P3!=0XDF)
- {
- switch(P3)
- {
- case(0xde):zhongjian[a]=abile[1];a++;break; //1
- case(0xdd):zhongjian[a]=abile[5];a++;break; //5
- case(0xdb):zhongjian[a]=abile[9];a++;break; //9
- case(0xd7):a--;zhongjian[a]=abile[10];break; //qing
- }
- while(P3!=0XdF)
- {
- P3=0XDF;
- }
- }
- P3=0xbf;
- if(P3!=0XBF)
- {
- switch(P3)
- {
- case(0xbe):zhongjian[a]=abile[2];a++;break; //2
- case(0xbd):zhongjian[a]=abile[6];a++;break; //6
- case(0xbb):break; //wu
- case(0xb7):break; //xiu
- }
- while(P3!=0XbF)
- {
- P3=0XBF;
- }
- }
- P3=0x7f;
- if(P3!=0X7F)
- {
- switch(P3)
- {
- case(0x7e):zhongjian[a]=abile[3];a++;break; //3
- case(0x7d):zhongjian[a]=abile[7];a++;break; //7
- case(0x7b):break; //wu
- case(0x77):a=0;j=1;men=1;break;
- }
- while(P3!=0X7F)
- {
- P3=0X7F;
- }
- }
- }
- void mimaxianshi()
- {
- zhongjian[0]=abile[10];
- zhongjian[1]=abile[10];
- zhongjian[2]=0xbf;
- zhongjian[3]=abile[10];
- zhongjian[4]=abile[10];
- zhongjian[5]=0xbf;
- zhongjian[6]=abile[10];
- zhongjian[7]=abile[10];
- }
- void shijianxianshi()
- {
- zhongjian[0]=abile[shi/10];
- zhongjian[1]=abile[shi%10];
- zhongjian[2]=0xbf;
- zhongjian[3]=abile[fen/10];
- zhongjian[4]=abile[fen%10];
- zhongjian[5]=0xbf;
- zhongjian[6]=abile[miao/10];
- zhongjian[7]=abile[miao%10];
- }
- void Timer0Init() //5毫秒@11.0592MHz
- {
- TMOD &= 0xF0; //設(shè)置定時(shí)器模式
- TL0 = 0x00; //設(shè)置定時(shí)初值
- TH0 = 0x28; //設(shè)置定時(shí)初值
- TF0 = 0; //清除TF0標(biāo)志
- TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
- EA=1;ET0=1;
- }
- void Timer0() interrupt 1
- {
- n++;
- if(n>200)
- {
- miao++;
- n=0;
- }
- if(miao>59)
- {
- fen++;
- miao=0;
- }
- if(fen>59)
- {
- shi++;
- fen=0;
- }
- if(shi>23)
- {
- shi=0;
- }
- }
- void Timer1Init() //2毫秒@11.0592MHz
- {
- TMOD &= 0x0F; //設(shè)置定時(shí)器模式
- TL1 = 0x9A; //設(shè)置定時(shí)初值
- TH1 = 0xA9; //設(shè)置定時(shí)初值
- TF1 = 0; //清除TF1標(biāo)志
- TR1 = 1; //定時(shí)器1開始計(jì)時(shí)
- }
- void Timer1() interrupt 3
- {
- g++;
- if(g>2000) {ET1=0;men=1;g=0;a=0;}
- }
- void shumaguan()
- {
- P2=0x00;
- P1=0xff;
- P2=1<<i;
- P1=zhongjian[i];
- i++;
- if(i>7)
- i=0;
- }
復(fù)制代碼
51hei圖片20.png (92.31 KB, 下載次數(shù): 58)
下載附件
2021-3-29 10:31 上傳
基于單片機(jī)的智能門禁設(shè)計(jì).zip
(76.54 KB, 下載次數(shù): 64)
2021-3-29 10:31 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|