电磁阀控制程序 sbit a=P1^0;//下开关 sbit b=P1^1;//上升 sbit c=P1^2;//下降 sbit d=P1^3;//上线位 sbit e=P1^4;//下限位 void main() { a=1;// 上开关 常开 b=1;// 上升 常开 c=1;// 下降 常开 d=1;// 上限位开关 常开 e=1;// 下限位开关 常开 while(1) //循环 { if(a==0) // 判定上开关闭合 执行语句 { a=1; //断开开关信号 依旧执行 下降 直到碰到下限位开关 c=0; // 2 启动下降 } if(e==0) // 4碰到下限位开关启动 { e=1; // 下限位信号保持 依旧执行 上升 c=1; // 2断开下降电磁阀 b=0; // 1一直启动上升电磁阀 直到碰到上限位开关 } // if(d==0) // 3碰到上限位开关 { P1=0xff; // 断开所有 } } } 限位开关控制程序 sbit k3=P2^2; //停止按钮
sbit k5=P2^4; //右限位开关
sbit k6=P2^5; //左限位开关 if(k5==0)
{
delay(1000);
if(k5==0)
{
while(k3!=0||k6!=0) {
P1=0x0a;
delay(SPEED);
P1=0x0e;
delay(SPEED);
P1=0x0d;
delay(SPEED);
if(k3==0||k6==0)
break;
} }
}
if(k3==0) //检测按键K3是否按下
{
delay(1000); //消除抖动一般大约10ms
if(k3==0) //再次判断按键是否按下
{ P1=0xff; //电磁阀停止
}
}
if(k6==0) //检测按键K6是否按下
{
delay(1000); //消除抖动 一般大约10ms if(k6==0) //再次判断按键是否按下
{
while(k3!=0||k5!=0) //当k3不等于0或k5不等于0时
{ P1=0x0a; delay(SPEED); P1=0x0e; delay(SPEED); P1=0x0d; delay(SPEED); if(k3==0||k5==0)
break; //如果k3=0或k5=0,跳出循环
}
}
} 真空压力传感器控制程序#include<reg51.h> #defineuint unsigned int #defineuchar unsigned char ucharcode table[] ={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xf6,0xee, 0x3e,0x9c,0x7a,0x9e,0x8e}; //七段共阴数码管编码表 sbitSTART=P3^0; sbitEOC=P3^1; sbitOE=P3^2; sbitONOFF=P3^3; //控制放气门开或关 voiddelay(uint m) //LED显示延时子程序 { while(m--); } delay1(uintc) //循环间隔延时C毫秒子程序 { uchar a,b; for( ;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } voidfun1(uint i) //AD转换及数据处理子程序 { uint P; extern uint PP; //定义全局变量PP START=1; START=0; while(i>0) //fun1只执行i次 { if(i>0) { OE=1; //转换结束输出使能 P=P0; //AD转换结果赋给P P=P*1.0/255*207; //完成75~150mA到0~207kPa的转换 OE=0; //停止输出 P2=0xfe; //个位位选 P1=table[P%10]; //个位段选 delay(500); //个位显示延时约1ms P2=0xfd; //十位位选 P1=table[P/10%10]; //十位段选 delay(500); //十位显示延时约1ms P2=0xfb; //百位位选 P1=table[P/100%10]; //百位段选 delay(500); //百位显示延时约1ms if(P>176)ONOFF=1; //打开放气阀 if(P<64)ONOFF=0; //关闭放气阀 i=i-1; delay1(100); //每次转换后延时100ms(0.1s) START=1; //启动下一次转换 START=0; } } } voidmain() //主程序 { ONOFF=0; //初始时放气阀关闭 START=0; //初始时不进行AD转换 OE=0; while(1) //死循环 { fun1(1); //调用一次转换子程序 PP=P; //转换处理结果(压力值)给PP if(PP>176||PP<64) //判断压力是否超限 { fun1(100); //压力超限则调用转换子程序100次,用时约0.1*100=10s PP=P; } } }
|