基于單片機的門控系統電路原理圖如下:
制作出來的實物圖如下:
元件清單:
單片機*1
11.0592晶振*1
瓷片電容22*2
電阻10k*1
電解電容10μF*2
四腳按鍵*3
DC電源座(3.5mm)*1、
LED紅燈(3mm)*1
電阻1k*3
DIP16底座*1
ULN2003AN芯片*1
步進電機*1
紅外人體傳感器*1
LED紅燈(5mm)*1
LED綠燈(5mm)*1
排針*9
杜邦線*7
洞洞板*1
焊接跳線(不計)
焊錫絲(不計)
單片機源程序如下:
- #include
- #define uint unsigned int
- #define uchar unsigned char
- unsigned char code RUN1[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//正轉
- unsigned char code RUN2[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};//反轉
- sbit led1=P0^1; //綠色的
- sbit led2=P0^0; //紅色的
- sbit hongwai=P1^0;
- sbit kaibtn=P1^1;
- sbit guanbtn=P1^2;
- uint ji=0;
- uint miao=0;
- uint ji2=0;
- uint miao2=0;
- bit flag=1;
- bit flag2=0;
- /******延時函數****************/
- void delay(unsigned int t)
- {
- unsigned int k;
- while(t--)
- {
- for(k=0; k<60; k++)//用for的空循環延長程序的執行時間
- { }
- }
- }
- //步進電機驅動 正轉
- void zz()
- {
- unsigned char i;
-
- for (i=0; i<8; i++) //一個周期轉3.75*8=30度
- {
- P2 = RUN1[i]&0x1f; //取數據
- delay(2); //調節轉速
- }
- }
- //步進電機驅動 反轉
- void fz()
- {
- unsigned char i;
-
- for (i=0; i<8; i++) //一個周期轉3.75*8=30度
- {
- P2 = RUN2[i]&0x1f; //取數據
- delay(2); //調節轉速
- }
- }
- void dingshi1()
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- EA=1;
- ET0=0;
- TR0=0;
- ET1=0;
- TR1=0;
- }
- void main()
- {
- dingshi1();
-
- while(1)
- {
- if(kaibtn==0)
- {
- fz();
- }
- if(guanbtn==0)
- {
- zz();
- }
-
- if(flag==1)
- {
- if(hongwai==1||kaibtn==0) //檢測到有人的情況下 打開門
- {
-
- ET0=1;
- TR0=1;
- fz();
- led1=0;
- led2=1;
- }
- }
-
-
-
- if(flag2==1)
- {
- if(hongwai==0||guanbtn==0) //檢測到無人的情況下
- {
-
- ET1=1;
- TR1=1;
- zz();
- led1=1;
- led2=0;
- }
- }
-
-
- if(miao==5) //
- {
- miao=0;
- P2=0x00;
- ET0=0;
- TR0=0;
- flag=0;
- flag2=1;
- led1=1;
- led2=1;
- }
- if(miao2==30) //停止的時間調節的地方-具體時間可以自己實際操作計時計算
- {
- miao2=0;
- ET1=0;
- TR1=0;
- flag2=0;
- flag=1;
- led1=1;
- led2=1;
- }
-
-
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- ji++;
- if(ji==20)
- {
- ji=0;
- miao++;
- }
- }
- void timer1() interrupt 3
- {
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- ji2++;
- if(ji2==20)
- {
- ji2=0;
- miao2++;
- }
- }