使用脉冲移位指令,灯公共端接一起com,每个灯接一个输出通道即可。以前我用晋中单片机编写过这种跑马灯程序
梯形图,网络1.2是启停控制和程序的初始化,网络3是用移位指令控制q0.0到q0.7八个灯
方式 1 利用移位指令使 1 个亮灯以 0.5 秒是速度从左至右移动,到达最右侧后;再至右向左返回到最左侧,如此反复 3 次系统自动停止进行。I0.2=ON 移位开始,I0.2=OFF 清零。2)方式 2 利用移位指令使流水灯从
4、使用计数器的值来控制每个灯的亮灭。例如,当计数器的值为 1 时,点亮"Light1";当计数器的值为 2 时,点亮"Light2",以此类推,直到计数器的值为 8。5、在每次循环结束后,将计数器的值增加1。6、添加一个
Y0-Y7是分别控制1-8号指示灯 程序如图
怎么让八个流水灯从左到右逐个点亮至全亮又从右到左逐个逐个熄灭来回循环plc?
1、霓虹灯广告屏装置PLC 控制梯形图的设计与调试, 该广告屏共有8根灯管,24只流水灯,每4只灯为一组。霓虹灯广告屏装置PLC 2、控制要求:: Ⅰ341212345678Ⅳ56789 (1)该广告屏中间8根灯管亮灭的时序为:第1根亮→
l2输出。以此类推,当运行完一轮之后重置。不用时序可以使用标志位,定义16个内部触点。开机之后启动触点1,触点1开启l1,当触点1开启1秒之后,启动触点2,在启动触点2时复位触点1,触点2开启l2,然后以此类推。
根据控制要求,首先应置彩灯的初始状态为QB0=1,即左边第一盏灯亮;接着灯从左到右以0.5s的速度依次点亮。即要求字节QB0中的“1”用循环左移位指令每0.5s移动一位,因此须在ROL-B指令的EN端接一个0.5s的移位脉冲
如图所示,X0启动按钮,X1停止按钮,Y0到Y7为8盏灯。望采纳。。。
x0为启动按钮,x1为停止按钮。y0~y7为8盏灯。程序在按下启动按钮后,灯1先亮,1秒(T0延时)后灭,1秒后(T1延时)灯2亮,依次循环。当按下x1后,循环结束。按下x0后,m0得电为1并自保持,此时1秒计时器T0计时,
如图所示,当PLC上电运行,Y0到Y7这八个点,以1s每个的频率依次闪烁输出,并循环。望采纳。。。
如何用PLC梯形图做一个8盏灯轮流闪烁的流水灯 求:梯形图?
如图所示,2个图,x0启动,x1停止,y0到y7是8个灯。望采纳。。。
方式 1 利用移位指令使 1 个亮灯以 0.5 秒是速度从左至右移动,到达最右侧后;再至右向左返回到最左侧,如此反复 3 次系统自动停止进行。I0.2=ON 移位开始,I0.2=OFF 清零。2)方式 2 利用移位指令使流水灯从
如图所示,X0为启动按钮,X1为停止按钮,Y0到Y7为8盏灯。望采纳。。。
不用时序可以使用标志位,定义16个内部触点。开机之后启动触点1,触点1开启l1,当触点1开启1秒之后,启动触点2,在启动触点2时复位触点1,触点2开启l2,然后以此类推。
plc流水灯梯形图(要求1--8号灯依次亮后,再8--1号灯依次亮,能循环的亮)
P1=b;//P1口接8个LED灯 delay(200);b=_crol_ (b,1);} } void delay(unsigned int z){ unsigned int i;for(;z>0;z--) //延迟时间自己算吧 for(i=110;i>0;i--);} 用汇编写这个容易点 main: mo
一定都要添加进来,要不然实验就做不成功。接着,我们按照电路原理图,排布好元件,连好线,最后的电路如图所示。我们把实验代码插入单片机,然后点击界面左下角的开始按钮,就可以运行电路。如图所示,八个流水灯依次点亮。
DelayMS(150);for(s=8;s>1;s--){ P0=_crol_(P0,1); //P0 的值向左循环移动 DelayMS(150);} P0=0x00;DelayMS(150);p0=0xff;DelayMS(150);
假设P1接8 个LED,高电平时LED点亮,主程序如下:void main(void){ uchar i;while(1){ for(i=0;i<7;i++){ P1=1<>i;delay_ms(500);} } }
define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void){ uint i;uchar temp;while(1){ temp=0x01;for(i=0;i<8;i++) //8个流水灯逐个闪动 { P1=~temp;delay(100);
单片机八个流水灯左右依次点亮
如图所示,2个图,x0启动,x1停止,y0到y7是8个灯。 望采纳。。。。。。有 16 盏流水灯,要求在同一个程序中可选择来分别完成下面两个控制要求的实验。 方式 1 利用移位指令使 1 个亮灯以 0.5 秒是速度从左至右移动,到达最右侧后;再至右向左返回到最左侧,如此反复 3 次系统自动停止进行。I0.2=ON 移位开始,I0.2=OFF 清零。2)方式 2 利用移位指令使流水灯从左至右依次亮 1S;当流水灯全亮后,再从右至左依次灭, 如此反复 3 次系统自动停止运行。I0.3=ON 移位开始,I0.3=OFF 清零。
x0为启动按钮,x1为停止按钮。y0~y7为8盏灯。程序在按下启动按钮后,灯1先亮,1秒(T0延时)后灭,1秒后(T1延时)灯2亮,依次循环。当按下x1后,循环结束。 按下x0后,m0得电为1并自保持,此时1秒计时器T0计时,1秒后T0常开点闭合1秒计时器T1计时,再过1秒T1计时结束常闭点断开T0线圈。 使用注意事项: 当M0为1时,在T0触点的上升沿来时k3M10这个二进制数乘以2再写入k3M10中。K3M10代表M10~M21共12个辅助继电器的组合,那么可以将K3M10看作是一个二进制数。程序未启动时,M10~M21均为0。 此时M10~M21为1,当T0触点的上升沿来时k3M10(此时为1)这个二进制数乘以2再写入k3M10中(写入后为2)。
x0为启动按钮,x1为停止按钮。y0~y7为8盏灯。程序在按下启动按钮后,灯1先亮,1秒(T0延时)后灭,1秒后(T1延时)灯2亮,依次循环。当按下x1后,循环结束。 按下x0后,m0得电为1并自保持,此时1秒计时器T0计时,1秒后T0常开点闭合1秒计时器T1计时,再过1秒T1计时结束常闭点断开T0线圈,T0失电复位并断开T0常开点,此时T1线圈也失电复位,T1常闭点又闭合,T0得电重复上述计时过程。 第二个程序块:当M0为1时,在T0触点的上升沿来时k3M10这个二进制数乘以2再写入k3M10中。K3M10代表M10~M21共12个辅助继电器的组合,那么可以将K3M10看作是一个二进制数。程序未启动时,M10~M21均为0,那么这个二进制数为0;当程序启动时,在下一个程序块中利用了M0的上升沿置位M10,此时M10~M21为1,当T0触点的上升沿来时k3M10(此时为1)这个二进制数乘以2再写入k3M10中(写入后为2),2在二进制数中为10,此时M10失电,M11得电,可以认为M10把"1"交给了M11,以此类推。当第8个M17得电时,完成了一次循环。下一个T0上升沿来到时,M18得电,M17失电。此时下面的程序块利用了M18的上升沿重新置位M10并且将M18复位。这样程序又从M10得电开始循环下去了。这个程序块的作用就是每次T0的上升沿来到时,“1”在M10~M17之间转移。
#include"reg52.h"//此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16;//对数据类型进行声明定义 typedef unsigned char u8; //LED灯命名 sbit leda=P0; sbit led1=P0^0; sbit led2=P0^1; sbit led3=P0^2; sbit led4=P0^3; sbit led5=P0^4; sbit led6=P0^5; sbit led7=P0^6; sbit led8=P0^7; void delay(u16 i) { while(i--); } void main() { while(1) { leda=1;//全部灯亮 //从左到右依次熄灭 led1=0; delay(50000);//大约延时450ms led2=0; delay(50000);//大约延时450ms led3=0; delay(50000);//大约延时450ms led4=0; delay(50000);//大约延时450ms led5=0; delay(50000);//大约延时450ms led6=0; delay(50000);//大约延时450ms led7=0; delay(50000);//大约延时450ms led8=0; delay(100000);//大约延时900ms //从右到左依次点亮 led8=1; delay(50000);//大约延时450ms led7=1; delay(50000);//大约延时450ms led6=1; delay(50000);//大约延时450ms led5=1; delay(50000);//大约延时450ms led4=1; delay(50000);//大约延时450ms led3=1; delay(50000);//大约延时450ms led2=1; delay(50000);//大约延时450ms led1=1; delay(50000);//大约延时450ms leda=1;//全部灯亮 } } 扩展资料:main()应用: 1、C++中的main函数 C++继承了C语言的大部分特性,因此保留了“程序总是从main函数开始执行,且总是默认从main函数的return语句或结尾处结束运行”这一传统, 但是要注意,C++中的main函数要想作为程序执行的出入口,必须写在全局(Global)范围,不能写成某个结构体或某个类的成员。 虽然main函数可以作为结构体或者类的成员函数,但相应地会失去作为程序出入口的功能。 C++中全局main函数的书写格式与C语言完全相同,功能也完全相同,且同一C++程序同样只能有一个全局main函数。 2、Java中的main函数 Java同样是以main函数作为程序执行出入口的,但Java作为“更纯洁”的面向对象语言,它的main函数与C/C++有很大的不同。 首先,返回值的概念淡化,在Java Application中main不允许返回值,因此int main是被禁止的,必须使用void main,int main仅限在JavaBean中使用。 其次,Java中所有的函数必须属于类,没有什么全局函数一说,因此main函数不能是全局成员,必须是某个类的成员。 第三,由于main函数变成了类的成员函数,因此要想直接被系统调用,还必须使用public static使其成为静态函数并具有公开权限。 第四,main函数的参数被简化,只需要提供字符串数组即可,不需要提供参数个数(这是由于Java的数组具有下标检查功能的原因) Java Application中的main函数一般格式如下(类名可以自定义,但保存为Java源码时,主文件名必须与类名相同,否则可能无法运行) public class MainDemo{ public static void main(String[]args){ //TODO:在此处写入主函数的内容 } } Java Applet的运行机制与Java Application完全不同,因此不需要main函数 3、C#中的main函数 C#中的main函数与Java大同小异,同样必须是类成员,同样使用字符串数组作唯一参数,同样是静态函数,同样的void main, 与之不同的是:main的首字母变成了大写,即"Main函数“,且是否限定为public级别已经无所谓了(默认没有public,但某些场合可能还是需要public) 另外,需要注意的是,C#中不再有”类名必须与主文件名同名“的限制,即使类名不和主文件名相同,程序照样可以运行。 C#应用程序中的main函数默认是这样的(注意main的首字母已是大写) C#和C/C++、java不同的是C#不在拘泥于必须从main()函数开始执行,C#是属于事件触发。 class Program{ static void Main(string[]args){ //TODO:在此处写入主函数的内容 } }
假设P1接8 个LED,高电平时LED点亮,主程序如下: void main(void) { uchar i; while(1) { for(i=0;i<7;i++) { P1=1<<i; delay_ms(500); } for(i=0;i<7;i++) { P1=0x80>>i; delay_ms(500); } } }