找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 793|回复: 3
打印 上一主题 下一主题
收起左侧

大佬帮看看,怎么把这三个程序无误的合在一起

[复制链接]
跳转到指定楼层
楼主
ID:751064 发表于 2020-5-13 18:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
电磁阀控制程序
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;
}
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 4#
ID:328014 发表于 2020-5-14 19:08 | 只看该作者
由于论坛有版规 不允许直接解题给答案 我发个教程吧: 单片机程序合并教程:http://www.51hei.com/bbs/dpj-157117-1.html
回复

使用道具 举报

沙发
ID:584814 发表于 2020-5-14 13:51 | 只看该作者
再用心学习一周自己就能做到这三个程序无误的合在一起,没人回答因为别人不知道你是啥意思
回复

使用道具 举报

板凳
ID:690363 发表于 2020-5-14 17:16 | 只看该作者
这是典型的懒人啊,程序肯定是找来的,想拼凑到一起用,这也算了,可你连这个东西是要怎么控制流程都懒得说明,图也懒得给,让大神们想帮也帮不了啊,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表