電磁閥控制程序 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) //循環(huán) { if(a==0) // 判定上開關閉合 執(zhí)行語句 { a=1; //斷開開關信號 依舊執(zhí)行 下降 直到碰到下限位開關 c=0; // 2 啟動下降 } if(e==0) // 4碰到下限位開關啟動 { e=1; // 下限位信號保持 依舊執(zhí)行 上升 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,跳出循環(huán)
}
}
} 真空壓力傳感器控制程序#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}; //七段共陰數(shù)碼管編碼表 sbitSTART=P3^0; sbitEOC=P3^1; sbitOE=P3^2; sbitONOFF=P3^3; //控制放氣門開或關 voiddelay(uint m) //LED顯示延時子程序 { while(m--); } delay1(uintc) //循環(huán)間隔延時C毫秒子程序 { uchar a,b; for( ;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } voidfun1(uint i) //AD轉換及數(shù)據(jù)處理子程序 { uint P; extern uint PP; //定義全局變量PP START=1; START=0; while(i>0) //fun1只執(zhí)行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) //死循環(huán) { fun1(1); //調用一次轉換子程序 PP=P; //轉換處理結果(壓力值)給PP if(PP>176||PP<64) //判斷壓力是否超限 { fun1(100); //壓力超限則調用轉換子程序100次,用時約0.1*100=10s PP=P; } } }
|