用定时器实现对led灯的定时控制(定时器控制led灯闪烁的电路)
怎样用PLC的一个定时器控制一个灯的闪烁
在很多工业场合中,经常用LED按一定的频率闪烁来实现信号指示功能,例如红灯闪烁表示报警,黄灯闪烁表示设备处于准备状态等。如何实现LED灯的闪烁效果呢?通常使用以下两种方法:
例题:Q0.0外接一个LED发光二极管作为信号指示灯,要求PLC系统上电后LED灯以1Hz频率闪烁。
方法一:两个定时器交替工作产生脉冲信号,程序如下图所示
方法二:使用系统时钟脉冲存储器直接产生脉冲信号
在S7-1200PLC程序中除了使用两个定时器来产生脉冲信号,还可以应用PLC的系统和时钟存储器来产生特定频率的脉冲信号。时钟存储器的设置和使用步骤如下:
(1)在博图项目文件中双击“设备和网络”;
(2)鼠标双击PLC的CPU图标,下方将弹出该PLC的属性窗口;
(3)在属性窗口左侧目录中双击“系统和时钟存储器”选项;
(4)勾选启用时钟存储器字节将其激活;
(5)如下图所示可以看到PLC中支持几种特定频率的时钟存储器,我们需要选用的是1Hz的始终存储器,其默认地址为M0.5。
(6)在程序中只需调用该存储器就可以产生1Hz的脉冲信号,编程PLC程序如下图所示
这种方式的优点是程序结构简单,使用方便。缺点是产生的时钟脉冲频率是固定的。
专栏
轻松学会KUKA工业机器人
作者:电气技术微课堂
29币
47人已购
查看
用定时器实现51单片机上LED灯每隔两秒亮暗闪烁
你用的是几个灯啊?比如说8个灯吧,用p0口,
就是直接讲p0口与led直接相连就行了啊,注意led的另一端要接在一起,共地或者高电平都可以,但是为了保护led,最好在每个小灯上串上一个电阻(若单片机采用的是5v电压,电阻可选用500欧左右的就可以了),以减小通过led的电流。剩余的就是单片机的最小系统了,没什么好说的吧,就是晶振,复位而已。
程序嘛,也很简单啊,你说用定时器,每个两秒如果单纯用一个定时器的话肯定不够用的,要结合循环判断语句,比如你采用12m的晶振,并且将定时中断时间定为50ms,那么设置一个变量,每20次就是一秒了,所以40次就是两秒。这样的话,每个40次就让led的状态(用0和1表示亮与灭)改变就可以了。main函数中应该设置一个死循环函数,可用while(1),让单片机不断的循环工作。
51单片机定时器控制8个LED灯亮3秒灭8秒再亮12秒的程序
一、利用定时器实现:
/*****************************预处理命令*****************************/
#includereg52.h
#define OUT P0
//晶振:12MHZ
/********************重新定义数据类型*******************************/
typedef unsigned char unit8;
typedef unsigned short unit_16;
/*
函数名:main()
函数功能: 主函数
输入:无
输出:无
*/
void main()
{
TMOD = 0x01;
TR0 = 1;
ET0 = 1;
EA = 1;
while(1);
}
/*
函数名:Timer0_Rountine() interrupt 1
函数功能:内部中断T0 服务函数
输入: 无
输出:无
*/
void Timer0_Rountine() interrupt 1
{
static unit_16 Count=0;
static unit8 Count_Sign=0;
static bit Sign=0;
TH0 = 0xfc;
TL0 = 0x18;
Count++;
if(!Sign)
OUT = 0xaa; //奇数 (1秒)
if(Count=1000)
{
Sign=1;
Count=0;
if(Count_Sign3) //2秒
OUT = 0xaa; //奇数
else if(Count_Sign=3Count_Sign=10) //8秒
OUT = 0x55; //偶数
else if(Count_Sign10Count_Sign=22) //12秒
OUT = 0x00; //全部
else if(Count_Sign22)Count_Sign=Sign=0;
Count_Sign++;
}
}
二、利用软件延时实现:
#includereg52.h
#define OUT P0
typedef unsigned char unit8;
typedef unsigned int unit16;
/*
函数名:delay_ms(unit16 x)
函数功能: 延时函数1MS
输入:x
输出:无
*/
void delay_ms(unit16 x)
{
unit8 a,b;
while(x--)
{
for(b=142;b0;b--)
for(a=2;a0;a--);
}
}
/*
函数名:main()
函数功能: 主函数
输入:无
输出:无
*/
void main()
{
while(1)
{
OUT = 0xaa; //奇数
delay_ms(3000); //3秒
OUT = 0x55; //偶数
delay_ms(8000); //8秒
OUT = 0x00; //全部
delay_ms(12000);//12秒
}
}
如何用定时器控制LED1亮2秒,灭1秒,LED2亮5秒,灭2秒,以至多个LED可以按自己要求控制
这个很简单,定时器设置成100ms中断一次(或是200ms,看自己需求),在中断里放标志位,在主程序while(1)内处理标志位,并++计数,10次就是1秒,20次就是2秒,50次就是5秒,随便怎么处理
怎样用定时器编写一个LED灯间隔1秒钟亮灭C程序?
#include reg51.h
#define uchar unsigned char
sbit LED=P1^0;
uchar time;
void InitTimer0(void)
{
TMOD = 0x01; //定时器0,工作方式1
TH0 = 0x3c;
TL0 = 0xb0; //50ms中断一次
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main(void)
{
InitTimer0();
while(1)
if(time==20) //中断20次,1s
{
time=0;
LED=!LED; P1.0上的LED1s亮灭一次
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x3c;
TL0 = 0xb0;
time++;
}
关于用定时器实现对led灯的定时控制和定时器控制led灯闪烁的电路的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。微信号:ymsc_2016
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~