这是完整的程式!
#include <AT89X51.H>
void dm12(int x, bit d);
//========================== //x8=上限位 x9=中限位 x10=下限位
sbit x10=P3^0; //x5=上下模式
sbit x4=P3^4;sbit x8=P3^5; //x1=手动/自动
sbit x5=P3^6;sbit x1=P3^7; //x4=起动
//========================== //x2 x3=手动上下降
sbit y1=P0^0;sbit y2=P0^1; //y1=红灯
sbit y3=P0^2;sbit y4=P0^3; //y2=补气
sbit y5=P0^4;sbit y6=P0^5; //y3=上升
sbit y7=P0^6;sbit y8=P0^7; //y4=下降
//=========================== //y5=缓冲
sbit x9=P3^1;sbit x3=P2^0; //y6=计数
sbit x2=P2^1; //y7y8=时间com端
//=============================
static int tmp,tmp1,pci=0;
static char tx=0;
bit m1,m2=0;
bit m3=0;
//==============================
void dip(void)
{
IE=0x83;IT0=0;
TMOD=0x11;
TH0=TL0=0x0;
TR0=1;
m3=0;
}
//================================
void jt() interrupt 0 //急停中断
//================================
{
tx=0x0;y3=y1=0;
y4=y5=1;m2=1;
if(!m3)m3=1;
while(x8);
y3=y1=1;
tx=0x0;
}
//===============================
void RT()
{
y7=0; y8=1;
dm12(4,0);
tmp=(((~P1>>4)*10)+((~P1)&0x0f))*15;
y8=0; y7=1;
dm12(4,0);
tmp1=(((~P1>>4)*10)+((~P1)&0x0f))*15;
// tmp1=(~P1)*15;
}
//*****************************************
main()
{
dip();
while(x1)
{
if(m2){
tx=0x0;m2=0;
y3=y4=y5=1;}
switch(tx) {
//****************************************
case 0x0:
if((!x4)&x1&x9&x10){
y4=0;y3=y5=1;y2=1;m1=0;RT();
tx=0x01;}
else m1=1;if(m3) m3=0; break;
//**************************************
case 0x01:
if(!x9){
y5=y4=0;y3=1;
tx=0x02;} break;
//*************************************
case 0x02:
if(x5)
tx=0x04;//上深摸试
else tx=0x3; /*下降摸试*/ break;
//************************************
case 0x03:
if(!x10||0x9){
y4=1;y5=0;y3=1;//停止
m1=0;
dm12(tmp,1);
tx=0x09;
} break;
//************************************
case 0x4:
if(!x10){
y4=0;y5=0;y3=1;//缓冲
dm12(tmp1,0);
y4=1;y5=1;y3=0;//下 降
tx=0x05;
} break;
//***********************************
case 0x9:
y4=y5=0;y3=1;
dm12(tmp1,0);
y4=1;y5=1;y3=0;//下 降
tx=0x05; break;
//**********************************
case 0x05:
if(x5)
tx=0x06;//上升摸试
else tx=0x7;/*下降摸试*/ break;
//***********************************
case 0x06:
if(!x10){
y3=1;y4=1;y5=1;
dm12(tmp,0); //中停
y3=0;y5=y4=1;
tx=0x07;
} break;
//************************************
case 0x07:
y3=0;y5=y4=1;//上升
tx=0x08; break;
//************************************
case 0x08:
if(!x8)
{y3=y4=y5=1;RT();
y6=0;dm12(8,1);y6=1;
tx=0x0;} break;
//**********************************
default: tx=0x0;
m1=0;
break;
}}
//%%%%%%%%%%%%%%%%%%%%%%%%%%
while(!x1)
{
if(y5)
m1=1;
y4=~(x3&(~x2));
y3=~(x2&(~x3));
y5=y4;
} }
//%%%%%%%%%%%%%%%%%%%%%%%%
void dm12(int x, bit d)
{
pci=0x0;
if(!m3){
if(!d){
while(pci!=x)
if(m3)
break;
}
if(d){
y2=1;
while(pci!=x){
if(pci==10)
y2=1;if(m3)
break;}
}
}m3=0;
}
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
void buq() interrupt 1
{
static char b;
if(b==170)
b=0;
if((b==0)&m1)
y2=0;
if(b==100){
y2=1;m1=0;}
b++;
pci++;
// TMOD=0x11;
TH0=TL0=0x0;
TR0=1;
TF0=0;
}
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&