登录
首页 单片机论坛
回帖 发帖
正文

主题:请教编程

点击:1417 回复:12

想编个小程序,但是做到这里就不会了  请教高手指点
1 当我按下第一个按钮p1^1时对应输出一个脉冲同时我在按下第二个按钮p1^2时应该输出两个脉冲,如果我按下复位按钮p1^3的时候怎样才能复位第二个按钮返回到第一个按钮让他输出一个脉冲,请高手指教 画出程序给我看看   dshplc@163.com
11-04-13 20:01
画个波形图出来,表明你的逻辑关系。
11-04-13 22:37
做标志位就可以啊。
11-04-14 08:36

引用 dshplc 在 2011/4/13 20:01:22 发言【内容省略】

#include
sbit p11=P1^1;//对P14输出一个脉冲
sbit p12=P1^2;//对P14输出两个脉冲
sbit p13=P1^3;//复位
sbit p14=P1^4;//输出脉冲位
delayms(unsigned int x2)//us*2 max~65535
{
    while(x2) x2--;
}
one()
{
 p14=0;
  delayms(50);
  p14=1;
 delayms(50);
}
two()
{
  char xx=2;
 while(xx--)
  {
     one();
  }
}
main()
{
 
 bit x1=0;
 bit x2=0;
 P1=0XFF;
 while(1)
   
    {
     if((0==p11)&(0==x1)) {one();x1=1;} else if(1==p11) x1=0;
     if((0==p12)&(0==x2)) {two();x2=1;} else if(1==p12) x2=0;
     if(0==p13) {p11=p12=p13=p14=1;}
    }
}
p11、p12、p13输入需做延时去抖动,如果你的输入开关是电子式的可以不用!
p13复位最好用中断!因为程序里有延时不一定能及时复位!
小小的程序竟然被我改了几次才运行通过,还需多多努力啊!表情
最后修改:2011/4/14 14:56:45
11-04-14 09:27
程序我试了一下  不好用啊、首先第一个脉冲是对的  第二个脉冲就不对了只输出一个脉冲,还有复位不好用
按下去的时候不能输出第一个脉冲
11-04-15 20:42
附件为程序工程文件,在keil V4下编译;
void PLC_Task(void)
{
/* X0按下:Y0输出1个脉冲
X1按下:Y0输出2个脉冲
X2按下:紧急停止,复位功能
D[0]是输出脉冲数;
D[1]是定时器设定时间
*/
D[1]=10;//10=1秒,如果要脉冲间隔3秒,设定30;
if((X0==1||X1==1) && M0==0 && M1==0) //X0或者X1按下输出脉冲
{
M0=1; //脉冲输出起动
if(X0==1)D[0]=1; //X0按下输出1个脉冲
if(X1==1)D[0]=2; //X0按下输出2个脉冲
}
if(X0==0 && X1==0 && M0==1){M0=0;M1=1;} //X0或者X1按下松开后起动输出脉冲  
//起动脉冲
if((M1==1 || M2==1) && Y0==0 && T_100MS_Bit[0]==0)
{
T100MS_Set(0,D[1]); //打开定时器0,定时值为D[1]值
SET(Y0); //Y0为低,输出脉冲
C_T(0, D[0]); //计数器0计数一次,设定值为D[0];
}
   if(T_100MS_Bit[0]==1) //定时器0时间到
{
M1=0;
T100MS_Rst(0); //复位定时器0
RST(Y0); //脉冲为高,停止;
M2=0; //二次脉冲起动复位
if(C_Bit[0]==1)     //判断输出脉冲是否等于设定数量  ,
{C_T_Rst(0);} //脉冲输出达设定量,清计数器,清起动标志
else T100MS_Set(1,D[1]);//脉冲没有到,打开定时器1,设定二次脉冲间隔时间
}
   if(T_100MS_Bit[1]==1)   //二次脉冲间隔时间到
{
T100MS_Rst(1);   //复位定时器1
M2=1;   //二次脉二次脉冲驱动标志
}
//紧急停止,按下脉冲停止,复位定时器、计数器与各标志
if(X2==1)
{
M0=0;M1=0;M2=0;RST(Y0); //复位起动标志与脉冲停止
T100MS_Rst(0); //复位定时器0
T100MS_Rst(1); //复位定时器1
C_T_Rst(0);
}
}
附件
附件
附件:
[本地下载]
最后修改:2011/4/18 9:33:35
11-04-17 19:48
如果需要脉冲0.01间隔,可用10毫秒定时器;把下面3个代替T100MS定时器;
T_10MS_Bit[0]
T10MS_Set(0,10);
T10MS_Rst(0);
详细使用参考:
简单使用C语言写梯形图控制V11
http://m.gkong.com/bbs/281055.ashx
11-04-17 19:54
你用的语言方式跟我学的不一样啊   我只能看懂一点   ,唉  我还要努力啊
11-04-18 17:49
呵呵 ,难道我用的是外星语。。。
11-04-18 21:20
呵呵!
11-04-19 15:52

上一页下一页

工控新闻

更多新闻资讯