📄 main.c
字号:
/* for monitor controll */
/* open flag*/// key1
/*open door key2
stop door key3
close door*/// key4
#include <monitor.h>
/*for system delay*/
void delay(uchar);
/*for tpic6b595*/
void tsend(uchar);
/*for system init*/
void system_init(void);
//include
void watchdog(void);
void timer_init(void);
void para_init(void);
/* time out*/
void time_out(void);
/* for receive message**/
void RF_key1_message(void);
void RF_key2_message(void);
void RF_key3_message(void);
void RF_key4_message(void);
void MAN_key1_message(void);
void MAN_key2_message(void);
void MAN_key3_message(void);
void MAN_key4_message(void);
/* for monitor controll*/
void monitor_positive(void);
void monitor_rollback(void);
void monitor_stop(void);
/* for measure place message*/
void measure_place_message(void);
/* for led indacate*/
void led_for_status(void);
/*********************************************/
void delay(uchar temp)
{
uchar I;
while(temp-->0) {
for(I=0;I<125;I++){;}
}
}/* temp=1 delay 1ms*/
/*tpic6b595 send*************/
void tsend(uchar buffer){
uchar I;
tclk=0;
tdata=0;
for(I=0;I<=7;I++) {
if(buffer&0x80) tdata=1;
else tdata=0;
tclk=1;
;/*nop*/
tclk=0;
buffer=buffer<<1;
}
tdata=0;
}
/********************///for monitor
void monitor_positive(void)
{ uchar temp;
temp=0x01;
tsend(temp);
}//end
void monitor_rollback(void)
{ uchar temp;
temp=0x02;
tsend(temp);
}//end
void monitor_stop(void)
{
uchar temp;
temp=0x00;
tsend(temp);
}//end
/********end for monitor controll**********/
/*******for initlize system******/
void watchdog(void)
{ WDI=!WDI;}
void timer_init(void)
{ TR0=0;
TMOD=0x11;/*time0 in model 1,time1 in model 1************/
TH0=0x3C;
TL0=0xAF; /*50ms************************/
ET0=1; /*open time0 interrupt**********//*open time0 interrupt**********/
TR1=0;
TH1=0x3C;
TL1=0xAF; /*50ms************************/
ET1=1; /*open t1*/
TR1=1;
}
void para_init(void)
{ time_out_second=0;
d50ms=0;
second=0;
delay_1s=0;
w_key1_flag=0;
w_key2_flag=0;
w_key3_flag=0;
w_key4_flag=0;
m_key1_flag=0;
m_key2_flag=0;//open
m_key3_flag=0;
m_key4_flag=0;//close
switch_1_flag=0;
switch_2_flag=0;
switch_3_flag=0;
switch_4_flag=0;
switch_5_flag=0;
//for led
led1=1;
led2=1;
led3=1;
led4=1;
//for timer
TR0=0;
man_second=0;
}
void RF_para_init(void)
{time_out_second=0;
d50ms=0;
second=0;
w_key1_flag=0;
w_key2_flag=0;
w_key3_flag=0;
w_key4_flag=0;
TR0=0;
RF_p_flag=0;
RF_np_flag=0;
RF_status=0;
RF_urgent_second=0;
}
void MAN_para_init(void)
{m_key1_flag=0;
m_key2_flag=0;//open
m_key3_flag=0;
m_key4_flag=0;//close
//for timer
man_second=0;
MAN_p_flag=0;
MAN_np_flag=0;
MAN_status=0;
MAN_FLAG=0;
MAN_urgent_second=0;
}//end man para initlized
//for system
void system_init(void)
{ EA=0;
watchdog();
timer_init();
para_init();
EA=1;
}
/***************END systme initlized********/
/**************begin time out*************8*/
void time_out(void)
{ if(time_out_second>=60)
{time_out_second=0;
TR0=0;
para_init();
}
}
/*******end for time out*******/
void RF_key1_message(void)//fro 启动键
{ if(w_key1==0) {TR0=1;
delay(10);
if(w_key1==0) w_key1_flag=1;
while(w_key1==0);}
}
void RF_key2_message(void)//开门键
{ if(w_key2==0) {
delay(10);
if(w_key2==0) { w_key2_flag=1;
second=0;
time_out_second=0;}
while(w_key2==0);}
}
void RF_key3_message(void)//停止键
{ if(w_key3==0) {
delay(10);
if(w_key3==0) { w_key3_flag=1;
time_out_second=0;
second=0;}
while(w_key3==0);}
}
void RF_key4_message(void)//关门键
{ if(w_key4==0) {
delay(10);
if(w_key4==0) { w_key4_flag=1;
time_out_second=0;
second=0;}
while(w_key4==0);}
}
/*void MAN_key1_message(void)//人按
{ if(m_key1==0) m_key1_flag=1;
else m_key1_flag=0;
}*/
void MAN_key2_message(void)//人按 开门键
{ if(m_key2==0) {delay(10);
if(m_key2==0) m_key2_flag=1;
}
else {delay(10);
if(m_key2==1) m_key2_flag=0;
}
}
/*void MAN_key3_message(void)//人按 停止键
{ if(m_key3==0) m_key3_flag=1;
else m_key3_flag=0;
}*/
void MAN_key4_message(void)// 人按 关门键
{ if(m_key4==0) {delay(10);
if(m_key4==0) m_key4_flag=1;
}
else {delay(10);
if(m_key4==1) m_key4_flag=0;
}
}
//end for receive message
/*************end time out******************/
void measure_place_message(void)
{ if(switch_1==1){delay(10);
if(switch_1==1) switch_1_flag=0;//for 正向限定位置
}
else {delay(10);
if(switch_1==0) switch_1_flag=1;
}
if(switch_2==1){delay(10);
if(switch_2==1) switch_2_flag=0;//for 反响位限定置
}
else {delay(10);
if(switch_2==0)switch_2_flag=1;
}
if(switch_3==1) {delay(10);
if(switch_3==1) switch_3_flag=0;//for 紧急位限定置
}
else {delay(10);
if(switch_3==0)switch_3_flag=1;
}
if(switch_4==1) {delay(10);
if(switch_4==1) switch_4_flag=0;//for 紧急位限定置
}
else {delay(10);
if(switch_4==0)switch_4_flag=1;
}
if(switch_5==1){delay(10);
if(switch_5==1) switch_5_flag=0;//for 紧急位限定置
}
else {delay(10);
if(switch_5==0)switch_5_flag=1;
}
}
/***********end measure place message**********/
void led_for_status(void)
{
}
/********end led indacate for status*******/
/* main function*/
void main(void) {
system_init();
monitor_stop();
RF_status=0;
MAN_status=0;
RF_p_flag=0;
RF_np_flag=0;
MAN_p_flag=0;
MAN_np_flag=0;
MAN_urgent_flag=0;
//RF_urgent_flag=0;
delay(200);
while(1) { watchdog();
if(m_key1==1){
MAN_para_init();
time_out();
/*************measure*******/
measure_place_message();
if(switch_1_flag==1&&switch_2_flag==0&&RF_p_flag==0){
RF_p_flag=1;
RF_np_flag=0;
monitor_stop();
RF_status=2;}//haved opened
if(switch_2_flag==1&&switch_1_flag==0&&RF_np_flag==0){
RF_np_flag=1;
RF_p_flag=0;
monitor_stop();
para_init();
RF_status=3;}//have closed
if((switch_3_flag==1||switch_4_flag==1||switch_5_flag==1)&&RF_urgent_flag==0)
{ RF_p_flag=0;
RF_np_flag=0;
RF_urgent_flag=1;
monitor_stop();
RF_status=3;
led1=1;led2=1;
led3=1;led4=0;}
/******RF message********/
RF_key1_message();//on
if(w_key1_flag==1){ led4=0;
if(second>=2){
switch(RF_status){
case 0: RF_key2_message();//open
RF_key4_message();//close
if(w_key2_flag==1&&w_key4_flag==0)
{w_key2_flag=0;
RF_status=1;
monitor_positive();
led1=0;led2=1;
led3=1;}
if(w_key4_flag==1&&w_key2_flag==0)
{w_key4_flag=0;
RF_status=1;
monitor_rollback();
led1=1;led2=0;
led3=1;}
break;
case 1:RF_key3_message();//stop
if(w_key3_flag==1) {w_key3_flag=0;
RF_status=0;
monitor_stop();
RF_p_flag=0;
RF_np_flag=0;
led1=1;led2=1;
led3=1;}
break;
case 2: RF_key4_message();//close
if(w_key4_flag==1) {w_key4_flag=0;
RF_status=1;
monitor_rollback();
led1=1;led2=0;
led3=1;}
break;
case 3: RF_key2_message();//open
if(w_key2_flag==1) {w_key2_flag=0;
RF_status=1;
monitor_positive();
led1=0;led2=1;
led3=1;}
break;
default:break;}//end switch
}//end if d1s>=1
}//end if
else {led1=1;led2=1;
led3=1;led4=1;
TR0=0;
TH0=0X3C;TL0=0XAF;}
/*********end RF functions********/
} //end conrtroll by RF
else {RF_para_init();led4=1;
/********man message***/
/*measure-----------------*/
measure_place_message();
if(switch_1_flag==1&&switch_2_flag==0&&MAN_p_flag==0)
{MAN_p_flag=1;
MAN_np_flag=0;
MAN_FLAG=0;
monitor_stop();
MAN_status=2;}//haved opened
if(switch_2_flag==1&&switch_1_flag==0&&MAN_np_flag==0){
MAN_p_flag=0;
MAN_np_flag=1;
MAN_FLAG=0;
monitor_stop();
para_init();
MAN_status=1;}//have closed
if((switch_3_flag==1||switch_4_flag==1||switch_5_flag==1)&&MAN_urgent_flag==0)
{ MAN_urgent_flag=1;
monitor_stop();
MAN_p_flag=0;
MAN_np_flag=0;
MAN_status=1;
led1=1;led2=1;
led3=0;led4=1;}
/*------------------man message-----------------*/
switch(MAN_status){
case 0:
MAN_key2_message();//open
MAN_key4_message();//close
if(m_key2_flag==1&&m_key4_flag==0){
if(man_second>=1) {monitor_positive();man_second=0;}
led1=0;led2=1;
led3=0;led4=1;}
else if(m_key2_flag==0&&m_key4_flag==1){
if(man_second>=1) {monitor_rollback();man_second=0;}
led1=1;led2=0;
led3=0;led4=1;}
else { if(man_second>=1){monitor_stop();man_second=0;}
led1=1;led2=1;
led3=0;led4=1;}
break;
case 1:MAN_key2_message();
if(m_key2_flag==1&&m_key4_flag==0){ MAN_FLAG=1;
if(man_second>=1){ monitor_positive();man_second=0;}
led1=0;led2=1;
led3=0;led4=1;}
if(m_key2_flag==0&&m_key4_flag==0&&MAN_FLAG==1){
MAN_FLAG=0;
monitor_stop();
MAN_status=0;
MAN_p_flag=0;
MAN_np_flag=0;
man_second=0;
led1=1;led2=1;
led3=0;led4=1;}
break;
case 2:MAN_key4_message();
if(m_key2_flag==0&&m_key4_flag==1){ MAN_FLAG=1;
if(man_second>=1){ monitor_rollback();man_second=0;}
led1=1;led2=0;
led3=0;led4=1;}
if(m_key2_flag==0&&m_key4_flag==0&&MAN_FLAG==1){ MAN_FLAG=0;
monitor_stop();
MAN_status=0;
MAN_p_flag=0;
MAN_np_flag=0;
man_second=0;
led1=1;led2=1;
led3=0;led4=1;}
break;
default :break;
}//end switch
/************end man controll*****/
}//end man controll
led_for_status();
}
}
/***************declare for time interrupt*********/
void time0() interrupt 1 {
TR0=0;
TH0=0x3c;
TL0=0xAF;
d50ms=d50ms+1;
if(d50ms>=20)
{ time_out_second=time_out_second+1;
d50ms=0;}
TR0=1;
}
//for delay for system
void time1() interrupt 3 {
TR1=0;
TH1=0x3c;
TL1=0xAF;
delay_1s=delay_1s+1;
man_second=man_second+1;
if(man_second>=20) man_second=3;
if(delay_1s>=20)
{ second=second+1;
if(second>=20) second=10;
if(RF_urgent_flag==1){ RF_urgent_second=RF_urgent_second+1;
if(RF_urgent_second>=3)
{RF_urgent_second=0;
RF_urgent_flag=0;}
}//end man urgent flag
if(MAN_urgent_flag==1){ MAN_urgent_second=MAN_urgent_second+1;
if(MAN_urgent_second>=2)
{MAN_urgent_second=0;
MAN_urgent_flag=0;}
}//end man urgent flag
delay_1s=0;}
TR1=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -