你的意思是K1按下,D1输出低电平,再按一次K1,D1输出高电平?
这……这里的按键检测就不需要使用延时了,使用while不用怕会阻塞后面的程序执行。事实在公司写程序,在检测按键时我从来不用延时,当然也不是使用这种while等待按键松开的方式。有兴趣可以一起研究一下,呵呵
#include <reg51.h>#define KEY1 ( 1 << 0 )
#define KEY2 ( 1 << 1 )
#define KEY3 ( 1 << 2 )
#define KEY4 ( 1 << 3 )
#define KEY5 ( 1 << 4 )
#define KEY6 ( 1 << 5 )
sbit D1 = P0 ^ 0
sbit D2 = P0 ^ 1
sbit D3 = P0 ^ 2
sbit D4 = P0 ^ 3
sbit D5 = P0 ^ 4
sbit D6 = P0 ^ 5
void main( void )
{
while(1)
{
P1 = 0xff
if( !(P1&KEY1) )
{
D1 = ~D1
while( !(P1&KEY1) )
}
if( !(P1&KEY2) )
{
D2 = ~D2
while( !(P1&KEY2) )
}
if( !(P1&KEY3) )
{
D3 = ~D3
while( !(P1&KEY3) )
}
if( !(P1&KEY4) )
{
D4 = ~D4
while( !(P1&KEY4) )
}
if( !(P1&KEY5) )
{
D5 = ~D5
while( !(P1&KEY5) )
}
if( !(P1&KEY6) )
{
D6 = ~D6
while( !(P1&KEY6) )
}
}
}
在动作运行过程中,总避免不了实现启动、暂停等功能,而暂停设置就是整个过程停止在当前运动的状态,再恢复时,动作继续运行。
【控制要求】
按下启动开关(自锁开关),1、2、3号电机按顺序依次动作,电机1动作,延时1s后电机2动作,再延时1s,电机3动作,延时1s后当感应器X1有信号时,电机按照3、2、1的顺序依次停止动作,每个动作间隔1s。
暂停时,动作停止在当前状态,输出状态可以保留。
【动作分析】
按下启动开关,就是一个等待输入信号,添加等待输入X0,电机动作都是触发输出端,电机动作添加触发输出通,电机停止添加触发输出断,间隔时间都是用延时等待指令。
添加暂停开关,暂停开关有上升沿信号(自锁开关,通的瞬间)时,控制动作程序停止(程序所在环为停止状态),暂停开关有下降沿信号(自锁开关,断的瞬间),控制动作程序运行(程序所在环为运行状态)。此项设置在组合逻辑中实现。
【控制流程图】
按照动作分析,每一个动作就是一个指令,将总动作流程图一步一步画出来,每个指令用流程图的方式连接起来。
【修改别名】
在软件别名处,对动作需要用到的端口进行别名修改:
输入端别名修改:X0:启动开关,X1:感应器,X2:暂停开关。
输出端别名修改:Y0:电机1、Y1:电机2、Y2:电机3。
【程序编辑】
在时序环0中直接用启动开关来控制电机的通断。
注:在触摸屏上实现相应的开关按键,只需要将等待输入“X端”修改成辅助标志“M”就可以了(添加等待辅助指令)。
在组合逻辑编辑暂停程序,分为两组,一组是暂停有信号时的动作,另一组是暂停开关没信号时的动作。暂停开关X2有上升沿信号时(断到通的一瞬间),程序动作所在环-时序环0,停止动作;暂停开关X2有下降沿信号时(通到断的一瞬间),程序动作所在环-时序环0,继续运行。
【程序调试】
当所有的程序编辑完成之后,我们就可以将程序通过串口下发至PLC中,程序调试有几种方式。
1、可以在编程软件上进行程序调试,在菜单栏中的调试框中,打开“在线调试环”,选择下发程序的端口,即可在线调试。
2、可在触摸屏软件上实现在线模拟,进行程序调试。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)