求各位大神指点一下,下面这个程序员应该读的书应该怎样添加程序员应该读的书,让它实现用定时器来控制以不同节拍循环显示花型啊

 上传我的文档
 下载
 收藏
粉丝量:195
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
乐曲程序的设计与实现毕业设计(论文)
下载积分:2800
内容提示:乐曲程序的设计与实现毕业设计(论文)
文档格式:DOC|
浏览次数:0|
上传日期: 12:56:32|
文档星级:
全文阅读已结束,如果下载本文需要使用
 2800 积分
下载此文档
该用户还上传了这些文档
乐曲程序的设计与实现毕业设计(论文)
关注微信公众号他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)后使用快捷导航没有帐号?
中国电子DIY
科技成就未来
亲爱的游客,欢迎!
已有账号,请
如尚未注册?
在线时间:8:00-16:00
400-123-4567
电子DIY手机版
随时随地掌握网站动态
扫描二维码
免费获取邀请码
<div class="mn"
求大神帮我组合下面几个七彩灯程序
本帖最后由 渴望阳光的种子 于
21:55 编辑
以下几段程序是我从网上搜出来的,想制作一个七彩灯,但是本人单片机新手,自己组合了几天都没弄出来,主要是不会用计数器和寄存器
七彩组合灯程序:(这个只有四种颜色,由一个开关调换灯的三种状态)
#include&STC11F60XE.H&
#define uint unsigned int
#define uchar unsigned char
sbit RJ=P1^6;//红灯IO口
sbit GJ=P1^5;//绿灯IO口
sbit BJ=P1^4;//兰灯IO口
sbit key=P1^3;//按键IO口
sbit gnd1 =&&P1^7;
uchar ding3,yin,x;//分别为定时器变量,标志位变量,以及颜色标志位变量
bit a=1,b,c;//分别为模式1.2.3标志位
/*******************************/
/***********延时子程序***********/
/*******************************/
void delay(uint z)
{
uint x,y;
for(x=100;x&0;x--)
for(y=z;y&0;y--);
}
/*******************************/
/********按键处理子程序********/
/*******************************/
void sk()
{
switch(yin)//执行一键多功能程序
{
&&case 0:if(key==0)//如果0与yin比较相等,则执行break前的所有内容
&&{
& &delay(100);//延时
& &if(key==0)//再次确认是否有按下
& &{
& & yin++;//将变量加1,此句很重要,作用是以使下次按下时好执行下一开关语句
& & a=0;//将a变为0
& & c=0;
& & b=1;//将b变为1,即打开按键程序中的第二段程序
& & x=0;//清掉颜色计数变量,以便它从红色开始循环
& & while(!key);//按键放开了吗?
& &}
&&}
&&//退出开关语句
&&case 1: if(key==0)//如果1与yin比较相等,则执行大括号内容
&&{
& &delay(100);//延时
& &if(key==0)//再次确认是否有按下
& &{
& & yin++;//将变量加1,此句很重要,作用是以使下次按下时好执行下一开关语句
& & b=0;
& & c=1;//打开第三种模式标志位,即锁定状态
& & a=0;
& & x=0;//清掉颜色计数变量,以便它从红色开始循环
& & while(!key);//按键放开了吗?
& &}
&&}
&&//退出开关语句
&&case 2: if(key==0)//如果2与yin比较相等,则执行大括号内容
&&{
& &delay(100);//延时
& &if(key==0)//再次确认是否有按下
& &{
& & b=0;//将b变为0,即关闭上一次功能
& & c=0;//关闭上前面的功能
& & a=1;//打开第1次功能,即0.5秒循环闪烁
& & yin=0;
& & x=0;//清掉颜色计数变量,以便它从红色开始循环
& & while(!key);//按键放开了吗?
& &}
&&}
&&//退出开关语句
}
}
/*******************************/
/*******三种模式显示子程序******/
/*******************************/
void xian()
{
//模式3变量
if(a!=0)//第一种模式以0.5秒速度循环闪烁一次,然后在白光处停下来
{
&&if(ding3&=10)//定时器到了0.5秒吗?
&&{
& &ding3=0;
& &x++;//将标志位加1,以便进入下一种颜色
& &switch(x)
& &{
& & case 1:RJ=1;GJ=0;BJ=0;//亮红光&&
& &
& & case 2:RJ=0;GJ=1;BJ=0;//亮绿光&&
& &
& & case 3:RJ=0;GJ=0;BJ=1;//亮兰光&&
& &
& & case 4:RJ=1;GJ=1;BJ=1;a=0;//亮白光,//将标志位a清0,以便再次循环&&
& &
& &}
&&}
}
if(b!=0)//第二种模式以1秒速度一直循环闪烁。
{
&&if(ding3&=20)
&&{
& &ding3=0;
& &x++;
& &switch(x)
& &{
& & case 1:RJ=1;GJ=0;BJ=0;m=x;//将x变量内给m保存起来,以便进入模式三时能准确的锁定一种状态
& &
& & case 2:RJ=0;GJ=1;BJ=0;m=x;
& &
& & case 3:RJ=0;GJ=0;BJ=1;m=x;
& &
& & case 4:RJ=1;GJ=1;BJ=1;m=x;x=0;
& &
& &}
&&}
}
if(c!=0)//第三种模式记住模式二时按键按下的颜色,然后锁定。
{
&&RJ=0;GJ=0;BJ=0;
&&delay(550);
&&switch(m)//判断上一次模式三的状态,然后确定显示哪种颜色
&&{
& &case 1:RJ=1;GJ=0;BJ=0;
& &
& &case 2:RJ=0;GJ=1;BJ=0;
& &
& &case 3:RJ=0;GJ=0;BJ=1;
& &
& &case 4:RJ=1;GJ=1;BJ=1;
& &
&&}
&&c=0;//将标志位清0,以便再次循环
}
}
/*******************************/
/*************主程序************/
/*******************************/
void main()
{
P1M0 = 0
P1M1 = 0x00;//设置P1接口为强推挽输出
RJ=0;//将R LED关闭
GJ=0;//将G LED关闭
BJ=0;//将B LED关闭
gnd1 = 0;
TMOD=0X01;//寄存器工作方式
EA=1;//开总中断
TR0=1;//开定时器
ET0=1;//开定时器中断
TH0=()/256;//赋值给高位
TL0=()%256;//赋值给低位
while(1)
{
&&sk();//调用按键子程序
&&xian();//调用显示子程序
}& &
}
void zhong() interrupt 1//T1中断服务程序
{
TH0=()/256;//赋值给高位
TL0=()%256;//赋值给低位
ding3++;//将按键计数器加1
}
复制代码七彩渐变程序:(这个里面本来没有开关,本人加了一段开关控制三个灯亮灭)上电后自动执行七彩渐变程序
#include&STC11F60XE.H&//MCU头文件
#define uchar unsigned char//字浮型宏定义
#define uint unsigned int//整型宏定义
#define shudu 30//LED渐变速度调整
#define dengji 1//LED变化等级调整
sbit B1=P1^6;//红色灯控制IO口
sbit G1=P1^5;//绿色灯控制IO口
sbit R1=P1^4;//兰色灯控制IO口
sbit gnd1 =&&P1^7;
sbit gnd2 =&&P1^3;
sbit gnd3 =&&P1^2;
sbit key1 = P1^1;
sbit key2 = P1^0;
uchar Rout,Bout,G//红绿兰3个变量
/***************************************************/
/**********************延时子程序*******************/
/***************************************************/
void delay(uint z)
{
uint x,y;//局部变量定义
for(x=0;x&2;x++)//延时外循环
for(y=0;y&z;y++);//延时内循环
}
void DELAY_MS (unsigned int a){
& &&&
& &&&while(--a!=0){
& && && & for (i=0;i&600;i++);
& &&&}
}
/*******************************/
/********按键处理子程序********/
/*******************************/
void sk()
{
if(key1 == 0){
& && && && &DELAY_MS(80);
& && & if(key1 == 0){
& && && & if((gnd1 == 1)&&(gnd2 == 1)&&(gnd3 == 1)){
& && && && &&&gnd1 = 0;gnd2 = 1;gnd3 = 1;
& && && && & }
& && && & else{
& && && && && && && && && && &&&if((gnd1 == 0)&&(gnd2 == 1)&&(gnd3 == 1)){
& && && && && && && &gnd1 = 0;gnd2 = 0;gnd3 = 1;
& && && && && && & }
& && && && && && && & else{
& && && && && && && &if((gnd1 == 0)&&(gnd2 == 0)&&(gnd3 == 1)){
& && && && && && && && &gnd1 = 0;gnd2 = 0;gnd3 = 0;
& && && && && && && &&&}
& && && && && && && & else{
& && && && && && && && && && && && && && &
& && && && && && && & gnd1=1;gnd2=1;gnd3=1;
& && && && && && && &}
& && && && && && && && && && && &&&}
& && && && && && && && & }
& && && && && & }& && && &
/**********************************************/
/**********PWM控制红绿兰3种灯亮灭时间**********/
/**********************************************/
void RGBpwm(uchar Rou,uchar Gou,uchar Bou)//3个局部变量,些部分为带参数函数
{
if(Rou!=0)//如果红灯变量不等于0就亮红灯
{
&&R1=1;//红灯亮
&&delay(Rou);//红灯亮起时间
&&R1=0;//红灯灭
}
if(Gou!=0)//如果绿灯变量不等于0就亮绿灯
{
&&G1=1;//绿灯亮
&&delay(Gou);//绿灯亮起的时间 
&&G1=0;//绿灯灭
}
if(Bou!=0)//如果兰灯变量不等于0就亮兰灯
{
&&B1=1;//兰灯亮
&&delay(Bou);//兰灯亮起的时间
&&B1=0;//兰灯灭
}
/***********************************************/
/********************主程序*********************/
/***********************************************/
void main()
{
P1M0 = 0//
P1M1 = 0x00;// 设置P1接口工作状态
TMOD=0x01;//选择定时器在方式1下工作
EA=1;//打开总中断
ET0=1;//打开定时器中断
TR0=1;//打开定时器
R1=0;//开机将红灯关闭
G1=0;//开机将绿灯关闭
B1=0;//开机将兰灯关闭
gnd1 = 1;
gnd2 = 1;
gnd3 = 1;
key1 = 1;
key2 = 1;
TH0=()/256;//给定时器高8位赋值
TL0=()%256;//给定时器低8位赋值
while(1)//程序主循环
{
& & RGBpwm(Rout,Gout,Bout);//调用RGBpwm子程序
& & sk();//调用按键子程序
}
}
/*************************************************/
/*中断服务子程序(控制LED红绿兰亮灭时间占空比例)*/
/*************************************************/
void zhong() interrupt 1//中断向量位为1
{
//定时器计数变量
//亮度等级控制变量
TH0=()/256;//给定时器高8位赋值
TL0=()%256;//给定时器低8位赋值
num++;//将定时计数变自动增加1
if(num==shudu)//如果速度变量等于定时计数器变量就执行下面大括号语句
{
&&num=0;//将计数器清0
&&ji++;//将亮度等级控制变量加1
&&if((ji&0)&&(ji&100))//如果亮度等级控制变量ji小于100,红灯亮起时间变量为240
&&{
& &Rout=240;//红灯亮起变量为240
& &Gout=0;//绿灯亮起变量为0
& &Bout=0;//兰灯亮起变量为0
&&}
&&if((ji&100)&&(ji&340))/*如果亮度等级控制变量ji大于100小于340(刚好240个等级),
&&红灯亮起时间变量由原来的240,慢慢减小到0,同时绿灯由原来的0慢慢增到240,形成
&&红灯到绿灯的渐变过程*/
&&{
& &Rout-=//将红灯变量减1。因为dengji为亮度变化等级(本程序变化等级为1),
& &Gout+=//将绿灯变量加1
& &Bout=0;//兰灯不变
&&}
&&if((ji&340)&&(ji&440))/*亮度等级控制变量ji大于340小于440时,让绿灯变量停一段时间
&&这样就形成了当红灯过度到绿灯时,绿灯会停一会儿的效果。*/
&&{
& &Rout=0;//红灯灭
& &Gout=240;//绿灯亮
& &Bout=0;//兰灯灭
&&}
&&if((ji&440)&&(ji&680))//同理:亮度等级控制变量ji大于440小于680时,由绿灯到兰灯过度
&&{
& &Rout=0;//红灯变量不变
& &Gout-=//将绿灯变量减1
& &Bout+=//将兰灯变量加1
&&}
&&if((ji&680)&&(ji&780))//亮度等级控制变量ji大于680小于780时,让兰灯变量停一段时间
&&{
& &Rout=0;//红灯灭
& &Gout=0;//绿灯灭
& &Bout=240;//兰灯亮一会儿
&&}
&&if((ji&780)&&(ji&1020))//亮度等级控制变量ji大于780小于1020时,由兰灯到白灯过度
&&{
& &Rout+=//将红灯变量加1
& &Gout=0;//绿灯变量加1
& &Bout-=//兰灯不变
&&}
&&if((ji&1020)&&(ji&1260))//亮度等级控制变量ji大于1020小于1025时,由兰灯到白灯过度
&&{
& &Rout=240;//将红灯变量加1
& &Gout+=//绿灯变量加1
& &Bout+=//兰灯不变
&&}
&&if((ji&1260)&&(ji&1360))//亮度等级控制变量ji大于1025小于1265时,由白光到红光过度
&&{
& &Rout=240;//红灯变量不变
& &Gout=240;//绿灯变量自动减1
& &Bout=240;//兰灯变量自动减1
&&}
&&if((ji&1360)&&(ji&1600))//亮度等级控制变量ji大于1025小于1265时,由白光到红光过度
&&{
& &Rout=240;//红灯变量不变
& &Gout-=//绿灯变量自动减1
& &Bout-=//兰灯变量自动减1
&&}
&&if(ji&1600)//当亮度等级控制变量ji大于1210时,就将它清0
&&ji=0;//将亮度控制等级清0
}
}复制代码呼吸灯程序:#include&STC11F60XE.H& //包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义
/*-------------------------IO口定义----------------------------*/
sbit LED0=P1^6;// 用sbit 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号
sbit gnd1 =&&P1^7;
void Delay(unsigned int t); //函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
&&
unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值
P1M0 = 0
P1M1 = 0x00;//设置P1接口为强推挽输出
gnd1 = 0;
while (1) //主循环
{
LED0=1;
Delay(60000); //特意加延时,可以看到熄灭的过程
for(PWM_LOW=1;PWM_LOW&CYCLE;PWM_LOW++){//PWM_LOW表示低
//电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次
&&LED0=0; //点亮LED
& &Delay(PWM_LOW);//延时长度,600次循环中从1加至599
&&LED0=1; //熄灭LED
& &Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1
}
LED0=0;
for(PWM_LOW=CYCLE-1;PWM_LOW&0;PWM_LOW--){//与逐渐变亮相反的过程
&&LED0=0;
&&Delay(PWM_LOW);
&&LED0=1;
& &Delay(CYCLE-PWM_LOW);
}
//主循环中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
延时函数,含有输入参数unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}复制代码本人想利用上面三个程序做一个七彩灯,由一个开关控制三种模式:第一种七彩渐变,第二种锁定第一种的颜色不变,第三种根据第二种锁定的颜色进行呼吸
因为我用的单片机是stc11f04e,所以头文件和内容有些许改变,内容主要改了点I/O口以及I/O口工作方式
这么多代码谁有时间看啊,还是期待高人指点吧
给你一个思路。其实很简单的。
先写一个开关扫描函数,记录开关按下的次数。
void keyscan()
& &if(key==0)
& & delay();
& & if(key==0)
& && &&&while(!key);
& && &&&aa++;
&&switch(aa)
& &case 1: TR0=0;
& &case 2:&&......& &
& &case n :&&....... aa=0;
1& 按一次开关 就停止渐变, 这个简单。你在开关扫描程序里 设置 按下一次,TR0=0;把定时器中断关掉,这样 渐变就停止了。
2& 再按一次开关,就按照渐变停止时候的颜色来产生呼吸灯。对新手说可能有点麻烦。
给你另外一个思路 , 在三个LED的公共端,加一个三极管。再单独控制这个三极管,做呼吸灯。
这里你可以给 定时器处理程序里面 加一个flag标志,没有按下时 处理 渐变程序, 按下时 处理呼吸灯程序
&&我也是新手。只是自己的一点意见。供楼主参考下 高手别喷我
如果不需要精确延时的话,用for语句就很简单了.可以定义三个变量放入数组,他们分别代表R,G,B的值.然后将相应数组值赋给相应端口.如果要按键控制直接控制数组的赋予情况就可以了.
uchar num[]={0xf7,0xef,0xfb,0xf3,0xe7,0xeb,0xe3};
& & & & for(a=0;a&255;a++)
& & & & & & & & & & & & & & & & for(m=0;m&15;m++)
& & & & & & & & & & & & & & & & & & & & for(b=0;b&255;b++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & if(a&=b)PD_ODR|=0x1c;
& & & & & & & & & & & & & & & & & & & & & & & & else PD_ODR&=num[n];
& & & & & & & & & & & & & & & & & & & & }& & & &
& & & & & & & & & & & & for(a=0;a&255;a++)占空比调整值
& & & & & & & & & & & & & & & & for(m=0;m&15;m++)//控制变化速度
& & & & & & & & & & & & & & & & & & & & for(b=0;b&255;b++)//周期
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & if(a&=b)PD_ODR&=num[n];
& & & & & & & & & & & & & & & & & & & & & & & & else PD_ODR|=0x1c;
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & PD_ODR |= 0x1c;
& & & & & & & & & & & & & & & & & & & & delay(10);
你把PD_ODR看做你接LED的端口就行了.这段程序的作用是实现全彩渐变的(非交叠全彩渐变)
& & & & for(n=0;n&7;n++)
& & & & & & & & {
& & & & & & & & & & & & for(a=0;a&255;a++)
& & & & & & & & & & & & & & & & for(m=0;m&15;m++)
& & & & & & & & & & & & & & & & & & & & for(b=0;b&255;b++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & if(a&=b)PD_ODR|=0x1c;
& & & & & & & & & & & & & & & & & & & & & & & & else PD_ODR&=num[n];
& & & & & & & & & & & & & & & & & & & & }& & & &
& & & & & & & & & & & & for(a=0;a&255;a++)
& & & & & & & & & & & & & & & & for(m=0;m&15;m++)
& & & & & & & & & & & & & & & & & & & & for(b=0;b&255;b++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & if(a&=b)PD_ODR&=num[n];
& & & & & & & & & & & & & & & & & & & & & & & & else PD_ODR|=0x1c;
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & PD_ODR |= 0x1c;
& & & & & & & & & & & & & & & & & & & & delay(10);
& & & & & & & & }
&N&的变化搞丢了
楼上的大神,楼主好像要的不是这个吧。楼主要的是按一下开关停止并保持住,再按一下使用保持的颜色做呼吸灯。给楼主些参考。既然这个程序是用定时器来做渐变控制的,那么楼主可以在按键扫描程序里面控制关闭定时器,这样渐变颜色就保持了。关于保持渐变颜色并做呼吸灯,楼主可以在3个led的公共端接一个三极管,做渐变时候直接导通这个三极管。颜色保持时候再用程序控制这个三极管的开关占空比就可以实现颜色保持的呼吸灯了。
<font color="#2785163 发表于
楼上的大神,楼主好像要的不是这个吧。楼主要的是按一下开关停止并保持住,再按一下使用保持的颜色做呼吸灯 ...
我也是这样想的,但似乎做起来比较困难,就是保持颜色不知道,谢谢你的指点,关闭定时器,试一试吧。我的可以不用三极管哦,因为设置I/O口状态为强推免输出
本帖最后由 渴望阳光的种子 于
11:06 编辑
<font color="#2785163 发表于
给你一个思路。其实很简单的。
先写一个开关扫描函数,记录开关按下的次数。
void keyscan()
谢谢大哥,我先试试
梦之心恒 发表于
这个。。。似乎有点麻烦,看不太懂呢。。。好多个for循环
渴望阳光的种子 发表于
谢谢大哥,我先试试
昨天凌晨回复的,要审核,早上发现还没有发表,所以就又发了一边。刚好审核又通过了,。。所以发了两次。。
[音箱DIY论坛]
[拆机乐园/修机达人]
[音源/DAC/系统调校]
[拆机乐园/修机达人]
实用电子制作
一周热帖排行最近7x24小时热帖
客服电话:400-123-4567
客服邮箱:
周一至周五 9:00-18:00
公司地址:深圳市南山区美丽湾大厦B座
Powered by用PLC内部定时器实现1个灯延时发光与延时熄灭的控制
添加时间:
来源: | 阅读量:1840
1.内容与要求 用PLC内部定时器(T)实现灯启动后延时3s发光,停止时延时2s熄灭。按下启动按钮SB1后,灯HL1延时3s才发光并保持;按下停止按钮SB2后,灯HL1延时2s才熄灭。 2.学习重点 1)学会普通定时器的运用。 2)学会用定时器实现通电延时和断电延时的方法。 3.实训步骤 (1)了解定时器(T)定时器是PLC内置的一个重要软元件
&&& 1.内容与要求
&&& 用PLC内部定时器(T)实现灯启动后延时3s发光,停止时延时2s熄灭。按下启动按钮SB1后,灯HL1延时3s才发光并保持;按下停止按钮SB2后,灯HL1延时2s才熄灭。
&&& 2.学习重点
&&& 1)学会普通定时器的运用。
&&& 2)学会用定时器实现&通电延时&和&断电延时&的方法。
&&& 3.实训步骤
&&& (1)了解定时器(T)&定时器是PLC内置的一个重要软元件,用符号&T&表示,主要用于对时间的控制,是PLC程序中常用的软元件,必须学会熟练地运用它。
&&& PLC的软元件定时器(T)与继电器控制电路中时间继电器的作用基本相同,也是由线圈与触点组成的。PLC的定时器有无数对动合和动断触点供运用,不像硬元件的时间继电器那样,触点数量会受到元件结构的限制。
&&& 在FP-X系列PLC中,定时器有以下4种:
&&& 1) TML:设定以Ims (0.001s)为单位的定时器;设定范围为K1~K32767,时间设定值范围为0. 001~32. 767s。
&&& 2) TMR:设定以10ms (0.01s)为单位的定时器;设定范围为K1~K32767,时间设定值范围为0. 01~327. 67s。
&&& 3) TMX:设定以100ms (0.1s)为单位的定时器;设定范围为K1~K32767,时间设定值范围为0.1~3276. 7s。
&&& 4) TMY:设定以1000ms (1s)为单位的定时器;设定范围为K1~K32767,时间设定值范围为1~ 32767s。
&&& 定时器应用时,都要设置一个十进制数的时间设定值。在程序中,凡数字前面加有符号&K&的数值都表示十进制数。定时器被驱动后,就对时钟脉冲个数(每个脉冲都是定时器的计时单位)进行累计,从设定值递减到0时就输出,其所对应的相同编号的定时器触点就动作,如图2 -21所示。
&&& 图2-21&&& 定时器的符号与意义
&&& 注:由于TMX 1的计时单位是100ms (0. 1s),因此时间设定为20&0.1s =2s,所以定时器TMX 1被驱动后延时2s,TMX 1的触点Tl才会动作。
&&& (2)定时器的应用
&&& 1)定时器的控制指令为&TM&,执行的步数为3。指令&TM&后面是定时器的单位分别为&X、Y、R、L&,定时器的梯形图、时序图和指令程序如图2-22所示。
&&& 图2-22&&& 定时器的梯形图、时序图和指令程序
&&& a)梯形图b)时序图c)指令程序
&&& 如图2-22所示,当X0闭合时,定时器T1开始计时,计时0.3s后,该定时器所对应的相同编号的触点动作。
&&& 2)定时器控制指令&TM&与&SET&、&OT&等指令有一个比较大的区别,不但可以作为输出定时使用,还可以当作触点进行串联控制,如图2-23所示。
&&& 图2-23&&& 定时器的串联范例
&&& a)梯形图b)时序图c)布尔形式
&&& 如图2-23所示,当X0闭合时,定时器T1计时,计时到达设定值后接通T2,T2开始计时。
&&& 3)虽然定时器控制指令&TM&可以作为触点进行串联控制,但是毕竟不是触点,因此必须要有执行条件,如图2-24所示。
&&& 图2-24&&& 定时器的正确使用
&&& (3)定时器指令&TM&的输入方法定时器是带有设定值的元件,定时器指令&TM&的输入方法见表2-16。
&&& 表2-16&&& 定时器指令&TM&的输入方法
&&& (4) PLC的I/O端分配及接线本实训任务的PLC I/O接线、接线方法与2.1.1节实训任务是完全相同的,用动合按钮SB1作灯发光启动控制,用动合按钮SB2作灯熄灭控制。对简单的PLC的I/O接线,在掌握其画法后,可以不画图,但一定要写出PLC的I/O分配表以供接线参考用。PLC的I/O分配见表2-17。
&&& 表2-17&&& PLC的I/O分配
&&& (5) PLC程序的编写与传送为了更好地实现本实训任务的控制目标,请按以下三个控制要求编写程序。
&&& 控制一:实现灯启动延时3s发光的控制。
&&& 控制二:实现灯断电延时2s熄灭的控制。
&&& 控制三:实现灯启动延时3s发光,断电延时2s熄灭的控制。
&&& 1)控制一程序的编写。控制要求:按下SB1后,灯延时3s发光并保持;按下SB2断电后,灯立刻熄灭。控制一的PLC控制程序(供参考)如图2-25所示。
&&& 在控制一程序中,将定时器动合触点T0与Y0串联连接,电路启动后先驱动定时器计时,3s后定时器动作,定时器动合触点T0闭合,Y0才会被驱动,实现灯HL1启动延时发光。
&&& 图2-25&&& 控制一的PLC控制程序
&&& a)梯形图程序b)指令程序及说明
&&& 程序中R0的作用是:由于SB1是动合按钮,所以在电路启动后,X0触点断开,此时,为了保持定时器回路继续接通,就要对电路作自保持。显然,定时器由于还在计时,其触点是不能用作自保持的,因此必须要同时驱动一个辅助继电器( R0),用其触点(R0)作定时器保持接通的作用,保证定时器的计时动作与动作后对其触点的保持。这样,动合触点T0在启动3s闭合后继续保持,从而使灯HL1 (Y0)保持发光。
&&& 2)控制二程序的编写控制要求:按下SB1后,灯发光并保持;按下SB2后,灯延时2s熄灭。
&&& 控制二的PLC控制程序(供参考)如图2-26所示。
&&& 图2-26&&& 控制二的PLC控制程序
&&& a)梯形图程序b)指令程序及说明
&&& 在控制二程序中,将定时器的动断触点T0与Y0串联连接,电路熄灭时先启动定时器计时2s,2s后定时器动作,定时器动断触点断开,Y0才会被断开,实现灯HL1的断电延时熄灭。
&&& 在定时器支路(第4行)串联动合触点Y0,目的是使定时器能在灯熄灭(Y0=OFF)后断电复位,使Y0支路上的定时器动断触点T0恢复闭合,以保证电路能再次启动。
&&& 3)控制三程序的编写控制要求:按下SB1后,灯HL1延时3s发光;按下SB2后,灯HL1延时2s熄灭。
&&& 控制三的PLC控制程序(供参考)如图2-27所示。
&&& 图2-27&&& 控制三的PLC控制程序
&&& a)梯形图程序b)指令程序及说明
&&& 控制三程序是将控制一程序与控制二程序合并所产生的。控制三程序分别通过两个定时器(T0和T1)实现启动延时和停止延时,这种延时控制会经常出现在一些自动设备的控制中。
&&& 延时控制的程序还有其他的编写方法,请自己思考。
&&& (6)程序执行与调试按图2-27所示编写程序,传送到PLC,将负载电源送电,执行程序,通过对输出结果的观察与软件监控,将程序调试到满足控制要求,即按下启动按钮SB1,灯HL1延时3s发光并保持;再按下停止按钮SB2,灯HL1延时2s才熄灭。
&&& 4.分析与思考
&&& 要正确编写程序,首先要根据控制要求建立编程思路。有一个清晰的思路,对程序编写,特别是复杂程序的编写是十分重要的。在今后的学习过程中,必须加强这方面的训练。
&&& 怎样建立程序编写的思路?要正确编写PLC程序,除了要熟知PLC基本指令的运用,熟知梯形图等程序编写方式以外,还有就是如何根据控制要求建立编程思路。很多时候,阅读了工作任务的控制要求后,也觉得无从下手。因此,如何通过对控制要求的分析,找出一条解决问题的途径,建立程序编写的思路去进行程序编写,是必须要学会的。请试从本实训任务来学习如何建立编程思路吧!
&&& (1)明确程序要解决的控制问题首先要认真理解实训任务的控制要求,分析出任务的控制要点。如本实训任务的控制要求是:&实现一个灯的启动延时发光与停止延时熄灭&,控制要点是&启动延时&和&停止延时&。再根据这一分析,明确程序需要解决的问题有以下几点:
&&& 1)用什么元件实现延时?
&&& 2)用什么方法实现&启动延时&与&停止延时&?
&&& 3)用什么方法实现对灯的延时控制?
&&& (2)初步确定解决控制问题的方法针对要解决的问题,可通过自己掌握的知识,初步确定解决的方法。事实上,解决问题的方法可能会有多种,有时还需要对方法进行优化,但可先确定一个自己熟悉的且可靠性较高的方法来解决,如对本实训任务的问题,可作如下的考虑:
&&& 1)可采用两个定时器分别来解决&通电延时&控制和&断电延时&控制的问题。
&&& 2)用&通电延时&的定时器触点控制启动,用&断电延时&的定时器触点控制停止。
&&& 3)用启动按钮控制&通电延时&的定时器,用停止按钮控制&断电延时&的定时器。
&&& 这样,就能基本实现本实训任务的控制要求。
&&& 编程思路清晰后,如何编写程序就容易明确了。当然,这需要有一个学习的过程,要通过不断地进行编程训练,在训练中逐步摸索规律,提高对任务的理解能力、控制的分析能力和指令的运用能力,编程能力就会不断提高。
(责任编辑: 佚名 )
本文关键字:
免责声明:本文章仅代表作者个人观点,与艾特贸易网无关。本站大部分技术资料均为原创文章,文章仅作为读者参考使用,请自行核实相关内容,如若转载请注明来源:
工程建设项目造价的有效控......
水泥回转窑是水泥熟料干法......
电动机正转运行控制是最简......
中等复杂零件如图10-2所示......
新闻热点排行

我要回帖

更多关于 程序员应该看的书 的文章

 

随机推荐