|
之前测试时出现信号勿动的问题,并且灯太多,不容易判断。又重新改了一下板子和程序。程序如下:
#include <reg51.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit s1=P1^0; //合闸信号(常开)
sbit s2=P1^1; //分闸信号(常闭)
sbit s3=P1^2; //合闸信号(常开)
sbit s4=P1^3; //分闸信号(常闭)
sbit s5=P1^4; //合闸信号(常开)
sbit s6=P1^5; //分闸信号(常闭)
sbit s7=P1^6; //储能信号(常开)
sbit s8=P1^7; //储能信号(常开)
sbit k1=P2^0; //分闸测试按钮
sbit k2=P2^1; //合闸测试按钮
sbit k3=P2^2; //储能测试按钮
sbit led1=P0^0; //分闸测试合格,灯亮;绿色,不合格闪烁,且红灯亮
sbit led2=P0^1; //合闸测试合格,灯亮;黄色,不合格闪烁,且红灯亮
sbit led3=P0^2; //储能测试合格,灯亮;蓝色,不合格闪烁,且红灯亮
sbit led4=P0^3; //信号错误指示灯
void delayms(uint);//延时定义
void f1();//定义F-D分闸信号
void h1();//定义F-D合闸信号
void c1();//定义F-D储能信号
void bj1();//定义警示灯闪烁
void bj2();//定义警示灯闪烁
void bj3();//定义警示灯闪烁
/**************************************
*延时程序
**************************************/
void delayms(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/**************************************
*分闸信号异常报警
**************************************/
void bj1()//分闸信号异常报警
{
while(1)
{
led4=0;
led1=0;
delayms(200);
led4=1;
led1=1;
delayms(200);
}
}
/**************************************
*合闸信号异常报警
**************************************/
void bj2()//合闸信号异常报警
{
while(1)
{
led4=0;
led2=0;
delayms(200);
led4=1;
led2=1;
delayms(200);
}
}
/**************************************
*储能信号异常报警
**************************************/
void bj3()//储能信号异常报警
{
while(1)
{
led4=0;
led3=0;
delayms(200);
led4=1;
led3=1;
delayms(200);
}
}
/**************************************
*SOG分闸信号判断
**************************************/
void f1()
{
if(k1==0)
{
if(s1==1&&s2==0&&s3==1&&s4==0&&s5==1&&s6==0&&s7==1&&s8==1)
{
led1=0;
}
else
{
bj1();
}
}
while(!k1);
}
/**************************************
*SOG合闸信号判断
**************************************/
void h1()
{
if(k2==0)
{
if(s1==0&&s2==1&&s3==0&&s4==1&&s5==0&&s6==1&&s7==0&&s8==0)
{
led2=0;
}
else
{
bj2();
}
}
while(!k2);
}
/**************************************
*SOG储能信号判断
**************************************/
void c1()
{
if(k3==0)
{
if(s1==0&&s2==1&&s3==0&&s4==1&&s5==0&&s6==1&&s7==1&&s8==1)
{
led3=0;
}
else
{
bj3();
}
}
while(!k3);
}
/**************************************
*主程序
**************************************/
void main()
{
while(1)
{
f1();
h1();
c1();
}
}
|
|