标题:
基于单片机的电磁屏蔽门Proteus仿真源程序 开关模拟红关门外传感器检测
[打印本页]
作者:
黑11
时间:
2022-1-22 10:36
标题:
基于单片机的电磁屏蔽门Proteus仿真源程序 开关模拟红关门外传感器检测
电磁屏蔽门是屏蔽设备最为关键的屏蔽部件。是工作人员和设备进出的主要通道。在确保屏蔽效能的前提下,它的可靠性、稳定性、实用性以及美观性将至关重要,本设计以单片机为核心,采用红外感应实现屏蔽门的关与开。仿真与原程序齐全。
1.png
(39.23 KB, 下载次数: 40)
下载附件
2022-1-22 16:48 上传
屏蔽门指示灯
亮 代表门已关上
灭 代表门已打开
单片机源程序如下:
#include "reg51.h"
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
sbit SW_2 = P2^0;
sbit IN_1 = P2^3; //引脚定义--电机驱动引脚 1
sbit IN_2 = P2^4; //引脚定义--电机驱动引脚 2
sbit SW_1 = P2^5;
sbit Touch = P2^6; //引脚定义--调节按键 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]; //数组定义--储存 温度
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0D8;
TL0 = 0x0F0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
//1ms延时函数//
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++);
}
//n ms延时函数//
void delaynms(int n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
//显示函数//
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;
}
/************************主函数**************************/
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;
}
}
}
复制代码
本人初学,仅供参考,存在错误和不足之处,请大家回帖多多指教,切勿照搬,文件下载:
Keil代码与Proteus仿真下载:
电磁屏蔽门.zip
(111.48 KB, 下载次数: 38)
2022-1-22 10:34 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1