標題:
基于單片機的電磁屏蔽門Proteus仿真源程序 開關(guān)模擬紅關(guān)門外傳感器檢測
[打印本頁]
作者:
黑11
時間:
2022-1-22 10:36
標題:
基于單片機的電磁屏蔽門Proteus仿真源程序 開關(guān)模擬紅關(guān)門外傳感器檢測
電磁屏蔽門是屏蔽設(shè)備最為關(guān)鍵的屏蔽部件。是工作人員和設(shè)備進出的主要通道。在確保屏蔽效能的前提下,它的可靠性、穩(wěn)定性、實用性以及美觀性將至關(guān)重要,本設(shè)計以單片機為核心,采用紅外感應(yīng)實現(xiàn)屏蔽門的關(guān)與開。仿真與原程序齊全。
1.png
(39.23 KB, 下載次數(shù): 40)
下載附件
2022-1-22 16:48 上傳
屏蔽門指示燈
亮 代表門已關(guān)上
滅 代表門已打開
單片機源程序如下:
#include "reg51.h"
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
sbit SW_2 = P2^0;
sbit IN_1 = P2^3; //引腳定義--電機驅(qū)動引腳 1
sbit IN_2 = P2^4; //引腳定義--電機驅(qū)動引腳 2
sbit SW_1 = P2^5;
sbit Touch = P2^6; //引腳定義--調(diào)節(jié)按鍵 4
sbit Beep = P2^7;
sbit LED_Red = P1^0;
sbit LED_Green = P1^1;
sbit LED_3 = P1^2;
sbit LED_4 = P1^3;
unsigned int Beep_Flag = 0;
unsigned int Timing_Beep = 0;
unsigned int Timing_Open = 0;
unsigned int Open_Flag = 0;
unsigned int Door_Close_Flag = 0;
unsigned int Timing_Door_Close = 0;
unsigned int Door_Open_Flag = 0;
unsigned int Timing_Door_Open = 0;
uchar Windows_1_Flag_Str[3]; //數(shù)組定義--儲存 溫度
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0D8;
TL0 = 0x0F0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
//1ms延時函數(shù)//
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++);
}
//n ms延時函數(shù)//
void delaynms(int n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
//顯示函數(shù)//
void Show()
{
if( SW_1 == 0 && Beep_Flag == 0 )
{
Beep_Flag = 1;
}
if( SW_1 == 1 && Beep_Flag == 2 )
{
Beep_Flag = 0;
}
}
void System_Init()
{
InitTimer0();
IN_1 = IN_2 = 0;
Beep = 0;
LED_Green = 0;
}
/************************主函數(shù)**************************/
void main()
{
System_Init();
while(1)
{
Show();
delaynms(20);
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0D8;
TL0 = 0x0F0;
if( SW_2 == 0 && Open_Flag == 0 )
{
Open_Flag = 1;
}
if( Open_Flag == 1 )
{
Timing_Open ++;
if( Timing_Open <= 1000 )
{
IN_1 = 0;
IN_2 = 1;
LED_Red = 0;
LED_Green = 1;
LED_3 = 0;
LED_4 = 1;
}
else
{
Timing_Open = 0;
Open_Flag = 2;
IN_1 = 0;
IN_2 = 0;
LED_Red = 1;
LED_Green = 0;
LED_3 = 1;
LED_4 = 1;
}
}
if( Open_Flag == 2 )
{
if( Touch == 1 )
{
if( SW_1 == 0 )
{
if( Beep_Flag == 1 && SW_1 == 0 )
{
Timing_Beep ++;
if( Timing_Beep <= 500 )
{
if( (Timing_Beep < 100) || (Timing_Beep > 200 && Timing_Beep < 300) || (Timing_Beep > 400 && Timing_Beep < 500) )
{
Beep = 1;
LED_Red = 0;
}
else
{
Beep = 0;
LED_Red = 1;
}
}
else
{
Timing_Beep = 0;
Beep_Flag = 2;
Beep = 0;
LED_Red = 1;
Door_Close_Flag = 1;
}
}
else
{
Beep = 0;
LED_Red = 1;
}
}
else
{
Timing_Beep = 0;
Beep_Flag = 0;
Beep = 0;
LED_Green = 1;
LED_Red = 1;
}
}
if( SW_1 == 0 )
{
if( Touch == 1 )
{
if( Door_Close_Flag == 2 )
Door_Close_Flag = 1;
if( Door_Close_Flag == 1 )
{
Timing_Door_Close ++;
if( Timing_Door_Close <= 1000 )
{
IN_1 = 1;
IN_2 = 0;
LED_3 = 1;
LED_4 = 0;
}
else
{
Open_Flag = 0;
IN_1 = 0;
IN_2 = 0;
LED_3 = LED_4 = 1;
Timing_Door_Close = 0;
Door_Close_Flag = 0;
LED_Green = 0;
}
}
}
else
{
if( Timing_Door_Close != 0 )
{
Timing_Door_Open ++;
if( Timing_Door_Open <= Timing_Door_Close )
{
IN_1 = 0;
IN_2 = 1;
LED_3 = 1;
LED_4 = 0;
}
else
{
Door_Close_Flag = 2;
Timing_Door_Open = 0;
Timing_Door_Close = 0;
IN_1 = 0;
IN_2 = 0;
LED_3 = LED_4 = 1;
}
}
}
}
else
{
Door_Close_Flag = 0;
Timing_Door_Open = 0;
Timing_Door_Close = 0;
IN_1 = 0;
IN_2 = 0;
LED_3 = LED_4 = 1;
}
}
}
復(fù)制代碼
本人初學(xué),僅供參考,存在錯誤和不足之處,請大家回帖多多指教,切勿照搬,文件下載:
Keil代碼與Proteus仿真下載:
電磁屏蔽門.zip
(111.48 KB, 下載次數(shù): 38)
2022-1-22 10:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1