📄 test1.c
字号:
/
#include "c:\c51\STC54.h"
#define inc P17
#define dec P14
#define set P32
#define fall P33
#define velo_out P34
#define ing 'D'
#define velo 'A'
#define water 'C'
#define oil 'B'
#define lamp 'L'
#define all 'S'
bit auto_,run,key_mark,err,comm_work,next,rec_mark,set_var,edit,half,set_t,
ti_mark,velo_mark;
unsigned char count1,dip[5],addrl,status,dip_mark,count,set_time[3],number,meter_t;
unsigned int lamp_number,peri0,peri1;
union
{
char a[2];
int ax;
}period;
union
{
char a[3];
unsigned int ax;
}buff;
union
{
int ax;
char a[2];
}period0;
union
{
int ax;
char a[2];
}period1;
void key_fun();
void next_work();
void cacl_period();
void stop_work();
extern control_relay(char);
extern test_lamp(char,char);
void time0() interrupt 1
{
if (status==velo && ++count>0x10)
{
count=0;
SBUF='X';
}
}
/******* 串行口中断接受上级机命令 **********************/
void receive() interrupt 4 using 1
{
unchar n;
static int m;
if (TI)
{
TI=0;
ti_mark=1;
}
else if (RI)
{
RI=0;
n=SBUF;
if (n==0xd)
{
rec_mark=1;
buff.ax=m;
m=0;
}
else if (n>0x40 && n<0x5b)
{
if (n==velo)
{
count=0;
}
else if (n=='S')
{
CCAPM0=0;
CCAPM1=0;
lamp_number=0;
test_lamp(&lamp_number,1);
control_relay(0);
}
else if(n=='K')
SBUF='K';
status=n;
m=0;
}
else if (n>0x2f && n<0x3a)
{
m=m*10+(n & 0xf);
}
}
}
void pca() interrupt 6
{
if (CCF0)
{
CCF0=0;
period0.ax=period0.ax+peri0;
CCAP0L=period0.a[1];
CCAP0H=period0.a[0];
}
if (CCF1)
{
CCF1=0;
period1.ax=period1.ax+peri1;
CCAP1L=period1.a[1];
CCAP1H=period1.a[0];
}
}
main()
{
TMOD=0x21;
SCON=0x50;
TH1=0xf3;
TCON=0x55;
SBUF='A';
IE=0xd2;
CCON=0x40;
test_lamp(&lamp_number,1);
control_relay(0);
/******** 主程序 ***************/
for (;;)
{
if (!inc || !dec || !set || !fall)
{
if (!key_mark)
{
delay(1);
if (!inc || !dec || !set || !fall) key_fun();
}
}
else key_mark=0;
if (rec_mark)
{
rec_mark=0;
next_work();
}
if (velo_out!=velo_mark)
{
velo_mark=velo_out;
count=0;
}
}
}
void next_work()
{
unsigned long l;
if (status==ing)
{
if (buff.ax==0)/
{
CCAPM1=0;
}
else
{
CCAPM1=0x4d;
cacl_period();
}
}
else if (status==velo)
{
if (buff.ax==0)
{
CCAPM0=0;
}
else
{
CCAPM0=0x4d;
cacl_period();
}
}
else if (status==water)
{
control_relay(buff.a[1]);
/*if (buff.ax==0)
/*{
temp_meter=0;
}
else
/*{
l=(buff.ax-51);
buff.ax=l*1024/1250;
P0=buff.a[1];
if (buff.a[0] & 2) D_A_H=1;
else D_A_H=0;
if (buff.a[0] & 1) D_A_L=1;
else D_A_L=0;
temp_meter=1;
oil_meter=0;
}*/
}
else if (status==oil)
{
control_relay(buff.a[1]);
/*if (buff.ax==0)
/*{
oil_meter=0;
}
else
/*{
l=(buff.ax-51);
buff.ax=l*1024/1250;
P0=buff.a[1];
if (buff.a[0] & 2) D_A_H=1;
else D_A_H=0;
if (buff.a[0] & 1) D_A_L=1;
else D_A_L=0;
oil_meter=1;
temp_meter=0;
}*/
}
else if (status==lamp || status==all)
{
if (buff.ax==0) lamp_number=0;
else if (buff.ax<16)
{
lamp_number=1<<(buff.ax-1);
}
else lamp_number=0x0000;
if (buff.ax==17) lamp_number=0xffff;
test_lamp(&lamp_number,2);
}
}
/******** 键功能函数 ************/
void key_fun()
{
char n;
key_mark=1;
/******** SET *********/
if (!set)
{
while (!ti_mark);
ti_mark=0;
SBUF='B';
}
/****** + ********/
else if (!inc)
{
while (!ti_mark);
ti_mark=0;
SBUF='U';
}
/****** - *******/
else if (!dec)
{
while (!ti_mark);
ti_mark=0;
SBUF='D';
}
/*************************/
else if (!fall)
{
while (!ti_mark);
ti_mark=0;
SBUF='F';
}
}
void cacl_period()
{
unint ax;
ax=5000000/buff.ax;
if (status==velo)
{
peri0=ax;
}
else peri1=ax;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -