求助,关于51单片机的自锁开关C程序。

求助,关于51单片机的自锁开关C程序。,第1张

你的意思是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、可在触摸屏软件上实现在线模拟,进行程序调试。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12166739.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存