📄 main.c
字号:
#include"at89x52.h"
#include "stdlib.h"
#include "math.h"
//
#define J_ON P2_1=1
#define J_OFF P2_1=0
#define AV_ON P2_2=1
#define AV_OFF P2_2=0
#define G_ON P2_3=1
#define G_OFF P2_3=0
extern unsigned char idata recive[16];
extern unsigned char idata send[32];
extern unsigned char LocalAddr;
extern void SendBuff(float integer,unsigned char dec,unsigned char index);
//
unsigned int TlcCount;
unsigned int Count=0;
bit first=0;
bit j10a=0;
//KeyDisplay.c
//extern void delay(unsigned int value);
//extern unsigned char KeyDown(); extern unsigned char KeyUP();
//extern unsigned char KeyPoint();
//tlc2543.c
extern unsigned int Tlc2543RW(unsigned char addr);
extern float count_give(unsigned int ad,unsigned int scale);
// initialize.c
extern void c51_initialize();
extern void timer0_initialize();
//port
extern void DisplayDrv(unsigned index,unsigned num);
extern void ShowOff(unsigned char index,unsigned char num);
extern void WriteBuff(float intager,unsigned char base,unsigned char dec);
//keydisplay.c
extern unsigned char KeyDown();
extern unsigned char KeyUp();
extern unsigned char KeyPoint();
extern void delay(unsigned int value);
//process.c
extern bit bdata sac; extern bit bdata sdc;extern bit bdata jdc;extern bit bdata jac;
extern bit bdata down;extern bit bdata up; extern bit bdata fpow;extern bit bdata pow;
extern bit bdata s220;extern bit bdata j40a;extern bit bdata vcr;extern bit bdata zt;
extern bit bdata dvd;
extern void student_ACpow(bit pc_c51);extern void HDC_pow(bit pc_c51);
extern void student_pow(bit pc_c51); extern void student_220v(bit pc_c51);
extern void teacher_dc(bit pc_c51); extern void teacher_ac(bit pc_c51);
extern void flow_pow(bit pc_c51); extern void system_pow(bit pc_c51);
extern void LowPower_down(bit pc_c51);extern void LowPower_up(bit pc_c51);
extern void vcd(bit pc_c51); extern void vrc(bit pc_c51);
extern void zhantai(bit pc_c51); extern void teacher_40a(bit pc_c51);
extern void ProtectTDA(); extern void ProtectTAA();
extern void pc(bit pc_c51); extern void gate(bit pc_c51);
extern void PressCom(unsigned char* str);
extern void Relay(unsigned char m);
extern unsigned char j_573,av_573,g_573;
//
extern void CommBand(unsigned char band);
void SetMem();
//
void key();
void ProTlc();
void ProTlc();
void IntChange(unsigned int value);
//
//
//程序从这里开始
void main(void)
{
///////////////////////////
////////////////////////////
c51_initialize();
//SetMem();
timer0_initialize();
EA=0;
LocalAddr=0;
//CommBand(24);
EA=1;
pow=1;
while(1)
{
if(recive[0]=='r'&&recive[1]=='t')
{
if(pow)
{
system_pow(1);
recive[0]=0;
recive[1]=0;
}
}
if(recive[0]!=0)
{
PressCom(recive);
recive[0]=0;
recive[1]=0;
}
//间隔固定时间段采样
while(TlcCount==0x1fff)
{
ProTlc();
TlcCount=0;
}
//键盘扫描
TlcCount++;
if(KeyDown()==1)
{
key();
}
}
}
/*************key()***********************************
按键处理
******************************************************/
void key()
{
unsigned char KeyValue;
KeyValue=KeyPoint();//得到健值
delay(10);
// 再一次读取健值
if(KeyValue!=KeyPoint())
{
KeyValue=0x00;//错误值
return;
}
KeyValue=~KeyValue;
{
//等待
BAOJ=1;
while(KeyUp()==0);
BAOJ=0;
switch (KeyValue)
{
case 0x84://J.DC
teacher_dc(0);
break;
case 0x81://J.AC
teacher_ac(0);
break;
case 0x14://F.POW
flow_pow(0);
break;
case 0x21://POW
//system_pow(0);
student_pow(0);
break;
case 0x11://S.DC
// student_pow(0);
break;
case 0x12://S.220
// student_220v(0);
break;
case 0x18://40A
teacher_40a(0);
break;
case 0x24://VRC
vrc(0);
break;
case 0x28://ZT
zhantai(0);
break;
case 0x22://DVD
vcd(0);
break;
case 0x42://笔记本
pc(0);
break;
case 0x41://笔记本
gate(0);
break;
case 0x88:
LowPower_down(0);
break;
case 0x48:
LowPower_up(0);
break;
default:
break;
}
}
}
/*-----------------------------------
-------------------------------------*/
void ProTlc()
{
unsigned char i;
float fvalue[5];//采样十进制数临时保变量
unsigned int TlcValue[7];
//写地址0等待转换
EA=0;
ES=0;
Tlc2543RW(0);
//得到7次采样值
for(i=0;i<7;i++)
{
TlcValue[i]=Tlc2543RW(i+1);//i+1----地址0到7,7无效
}
EA=1;
//转换成十进制浮点数
//直流电压16倍(0-40V) tlc2543-A0
fvalue[0]=count_give(TlcValue[0],16);
//学生220伏160倍(0-400伏) tlc2543-A1
fvalue[1]=count_give(TlcValue[1],160);
//风机 tlc2543-A2
fvalue[2]=count_give(TlcValue[2],640);
if(jac)
{
//教师交流电流1倍(0-10) tlc2543-A4
fvalue[3]=count_give(TlcValue[4],4);
if(fvalue[3]>8)
{
ProtectTAA();
}
}
else if(jdc)
{
//教师直流电流(0-10) tcl2543-A3
fvalue[3]=count_give(TlcValue[3],4);
if(fvalue[3]>6)
{
ProtectTDA();
}
}
else if(j40a)
{
//教师40A大电流(0--50) tlc2543-A6
fvalue[3]=count_give(TlcValue[6],20);
if(fvalue[3]>40)
{
teacher_40a(0);
ShowOff(4,3);
BAOJ=1;
delay(4000);
BAOJ=0;
}
if(fvalue[3]>=10&&!j10a)
{
j10a=1;
TL0=0x0;
TH0=0x0;
TR0=1;
}
}
else
{
;
}
//教师交流电压(0-40伏) tlc2543-A5
fvalue[4]=count_give(TlcValue[5],16);
/**************************************
采样值写入显示缓冲区
***************************************/
{
if(pow)
{
WriteBuff(fvalue[1],1,0);
DisplayDrv(1,3);
SendBuff(fvalue[1],1,0);
}
else
{
ShowOff(1,3);
}
//教师直流电压
if(jdc)
{
WriteBuff(fvalue[0],3,1);
DisplayDrv(3,3);
//
SendBuff(fvalue[0],1,2);
}
else
{
ShowOff(3,3);
}
//教师交流电压
if(jac)
{
WriteBuff(fvalue[4],2,1);
DisplayDrv(2,3);
SendBuff(fvalue[4],1,1);
}
else
{
ShowOff(2,3);
}
//教师直流\交流\40安培大电流
if(jac||jdc||j40a)
{
WriteBuff(fvalue[3],4,1);
DisplayDrv(4,3);
SendBuff(fvalue[3],1,3);
}
else
{
ShowOff(4,3);
}
//风机转速
if(fpow)
{
WriteBuff(fvalue[2],5,0);
DisplayDrv(5,4);
SendBuff(fvalue[2],1,4);
}
else
{
ShowOff(5,4);
}
}
ES=1;
}
void time0() interrupt 1 using 0
{
Count++;
if(!first)
{
first=1;
BAOJ=1;
delay(400);
BAOJ=0;
}
//20秒关断大电流
if(Count>100)
{
j10a=0;
first=0;
Count=0;
TR0=0;
TH0=0;
TL0=0;
teacher_40a(0);
ShowOff(4,3);
{
BAOJ=1;
delay(300);
BAOJ=0;
delay(400);
BAOJ=1;
delay(600);
BAOJ=0;
delay(400);
BAOJ=1;
delay(300);
BAOJ=0;
delay(400);
BAOJ=1;
delay(1000);
BAOJ=0;
delay(400);
BAOJ=1;
delay(300);
BAOJ=0;
delay(400);
BAOJ=1;
delay(2000);
BAOJ=0;
delay(400);
BAOJ=1;
delay(3000);
BAOJ=0;
delay(400);
}
}
//大电流已经关闭
if(!j40a)
{
j10a=0;
first=0;
BAOJ=1;
delay(1000);
BAOJ=0;
Count=0;
TR0=0;
TH0=0;
TL0=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -