📄 main.c
字号:
#include <reg767.h>
#include "mydefine.h"
#define UP_RELAY P1_7
#define DOWN_RELAY P1_6
#define LIGHT_RELAY INT1
#define BUZZER X1
#define UP_LIMIT _CMP2
#define DOWN_LIMIT _CIN2B
extern unsigned char Command;
extern unsigned int Time;
extern unsigned char Current_ad;
extern unsigned char Light_Ray_ad;
unsigned char Work_Status=DOOR_STOP;
//***********************************************************************
// delay
//***********************************************************************
void delay(void)
{
unsigned int i;
for(i=0;i<10000;i++);
}
//**********************************************************************
// feed watchdog
//**********************************************************************
void Feed_Wwatchdog(void)
{
WDRST = 0x1e;
WDRST = 0xe1;
}
//**********************************************************************
// init
//**********************************************************************
void init(void)
{
SCON =0x50; /*设置串口发送模式1*/
PCON =0x00;
TMOD =0x21;
TH1 =0xf3; /*波特率为1250BIT/S*/
TL1 =0xf3;
TL0 =0xb0;
TH0 =0x3c;
TR1 =1; /*打开定时器1*/
TR0 =1;
IEN0 = 0x92;
PT0AD=0x18; //设置AD转换接口为输入方式
P0M1=0x8e; //1111 1110
P0M2=0x01; //0000 0001
P1M1 = 0x20;//0010 0000
P1M2 = 0xdc;//1101 1100
P2M1 = 0x00;//0000 0000
P2M2 = 0x03;//0000 0011
ENADC=1;
delay();
WDCON = 0x16;
}
//**********************************************************************
// Do_With_Command
//**********************************************************************
void Do_With_Command(void)
{
//_______________________Door_Contral________________________
switch(Work_Status)
{
case DOOR_STOP:
if(Command&&UP)
{
if(UP_LIMIT!=0)Work_Status=DOOR_UP;
Command=0;
};
if(Command&&DOWN)
{
if(DOWN_LIMIT!=0)Work_Status=DOOR_DOWN;
Command=0;
};
break;
case DOOR_UP:
if(Current_ad>CURRENT_LIMIT)Work_Status=DOOR_STOP;
if(UP_LIMIT==0)
{
Work_Status=DOOR_STOP;
if(Light_Ray_ad>LIGHT_LIMIT)
{
Time=0; //开灯
};
};
if(Command&&DOWN)
{
Work_Status=DOOR_STOP;
Command=0;
};
if(Command&&UP)
{
Command=0;
};
break;
case DOOR_DOWN:
if(Current_ad>CURRENT_LIMIT)Work_Status=DOOR_STOP;
if(DOWN_LIMIT==0)
{
Work_Status=DOOR_STOP;
if(Light_Ray_ad>LIGHT_LIMIT)
{
Time=0; //开灯
};
};
if(Command&&UP)
{
Work_Status=DOOR_STOP;
Command=0;
};
if(Command&&DOWN)
{
Command=0;
};
break;
default: Work_Status=DOOR_STOP;
};
//_______________________Door Command_out_____________________________
switch(Work_Status)
{
case DOOR_STOP:
UP_RELAY =1;
DOWN_RELAY=1;
break;
case DOOR_UP:
UP_RELAY =0;
DOWN_RELAY=1;
break;
case DOOR_DOWN:
UP_RELAY =1;
DOWN_RELAY=0;
break;
};
//_______________________Light_Contral________________________
if((Command&&LIGHT_ON))
{
Time=0;
Command=0;
};
if(Command&&LIGHT_OFF)
{
Time=LIGHT_DELAY;
Command=0;
};
//_______________________Light_Contral out________________________
if(Time<LIGHT_DELAY)
LIGHT_RELAY=0;
else
LIGHT_RELAY=1;
}
//***************************************************************************
// main
//***************************************************************************
main()
{
init();
for(;;)
{
Feed_Wwatchdog();
Do_With_Command();
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -