0305 定时器控制流水灯程序设计

合集下载

流水灯(定时器延时)

流水灯(定时器延时)
4
/********************** main******************************/ main() { unsigned char k,temp,temp1;//设置变量 P1= 0xff; TMOD = 0x01;//设置定时器方式为定时器方式 1 while (1) { temp = 0x01; //L1 到 L8 二极管顺序点亮 for(k=0;k<8;k++) { P1 = ~temp; delay(50); temp = temp<<1; } temp = 0x80; //L8 到 L1 二极管顺序点亮 for(k=0;k<8;k++) { P1 = ~temp; delay(50); temp = temp>>1; } temp = 0xfe;//L8L1 到 L7L2 到 L6L3 到 L5L4 顺序点亮 temp1 = 0x7f; for(k=0;k<8;k++) { P1 =(_cror_(temp,k))&(_crol_(temp1,k)); delay(50); } P1 = 0xFF; delay(200); temp = 0xFE; //L8 到 L1 二极管顺序点亮 for(k=0;k<8;k++) { P1 = temp; delay(50); temp = temp<<1; } temp = 0x7F; //L1 到 L8 二极管顺序熄灭 for(k=0;k<8;k++) { P1 = ~temp; delay(50); temp = temp>>1; } } }
/*********************************************************************************************/ /* 函 数 名: delay*****************************************************************************/ /* 功能描述: 延时*****************************************************************************/ /* 调用函数: 无 ******************************************************************************/ /* 入口参数: t*********************************************************************************/ /* 出口参数:无 ******************************************************************************/ /*********************************************************************************************/

五种编程方式实现流水灯的单片机C程序

五种编程方式实现流水灯的单片机C程序

五种编程方式实现流水灯的单片机C程序流水灯是一种常见的灯光效果,常用于装饰和展示。

实现流水灯的程序可以使用多种不同的编程方式,包括传统的顺序编程、状态机编程、中断编程、调度器编程和面向对象编程。

下面分别介绍这五种方式实现流水灯的程序。

1.顺序编程方式:顺序编程是最常见的编程方式,也是最直接的方式。

下面是使用顺序编程方式实现流水灯的C程序:```c#include <reg52.h>void delay(unsigned int t)while(t--)for(int i=0; i<50; i++);}void mainunsigned char led = 0x80; // 初始灯光状态while(1)P0 = led; // 输出灯光状态delay(500); // 延时一段时间led >>= 1; // 右移一位,实现流水灯效果if(led == 0) // 到达最右边后重新开始led = 0x80;}}```2.状态机编程方式:状态机编程是一种基于状态的编程方式,通过定义不同的状态和状态转换来实现流水灯效果。

下面是使用状态机编程方式实现流水灯的C程序:```c#include <reg52.h>typedef enumState1,State2,State3,State4,State5} State;void delay(unsigned int t)while(t--)for(int i=0; i<50; i++);}void mainState state = State1; // 初始状态为State1 while(1)switch(state)case State1:P0=0x80;delay(500);state = State2;break;case State2:P0=0x40;delay(500);state = State3;break;case State3:P0=0x20;delay(500);state = State4;break;case State4:P0=0x10;delay(500);state = State5;break;case State5:P0=0x08;delay(500);state = State1;break;}}```3.中断编程方式:中断编程方式是一种基于中断事件的编程方式,通过在特定的中断事件触发时改变灯光状态来实现流水灯效果。

调时时钟和流水灯程序

调时时钟和流水灯程序

#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit jiak=P2^3;sbit youyik=P2^2;sbit zuoyik=P2^1;sbit jiank=P2^0;sbit int1k=P3^3;sbit FMQ=P1^1;sbit CLK=P3^5;//1302时钟信号线sbit IO=P3^6;//1302的I/O数据线sbit RST=P3^7;//1302的RST复位线void InputByte(uchar);//输入1Byteuchar OutputByte(uchar);//输出1Bytevoid W1302(uchar,uchar);uchar R1302(uchar);uchar tab[6];void key();void display();void init();uchar a,c,i,b;//c表示中断次数a表示数码管移位次数uint temp;uchar miao,fen,shi;uchar tab1[7]={0x40,0x59,0x11,0x11,0x02,0x06,0x06};uchar code tab2[10]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90}; sbit zy=P2^1;sbit yy=P2^2;bit flagg;uchar zz,time;uchar code tabp0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff}; uchar code tabp2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef};//延时1msvoid delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//往1302写入1Byte d为写入的数据入口参数void InputByte(uchar date){uchar i;ACC=date;for(i=8;i>0;i--){IO=ACC0;//相当于汇编中的RRCCLK=1;CLK=0;ACC=ACC>>1;}}//从1302读取1Byte数据返回值ACCuchar OutputByte(void){uchar i;for(i=8;i>0;i--){ACC=ACC>>1;ACC7=IO;CLK=1;CLK=0;}return(ACC);}//往1302写入数据先写地址后写数据ucADD ucDA是入口参数void W1302(uchar addr,uchar date){RST=0;CLK=0;RST=1;InputByte(addr);//写地址InputByte(date);//写1Byte数据CLK=1;RST=0;}//读取1302某地址的数据先写地址后读数据ucAddr入口地址ucDa是返回值uchar R1302(uchar addr){uchar date;RST=0;CLK=0;RST=1;InputByte(addr);//写地址date=OutputByte();//读1Byte数据CLK=1;RST=0;return(date);}//初始化设置初始值void init(){uchar i1;uchar addr=0x80;W1302(0x8e,0x00);//控制命令字节WP=0 写操作for(i1=0;i1<7;i1++){W1302(addr,tab1[i1]);//秒分时日月星期年addr+=2;}W1302(0x90,0xa6);W1302(0x8e,0x80);//控制命令字节WP=1写保?}void display(){uchar Curtime[7];uchar i,i2;uchar addr=0x81;for(i2=0;i2<7;i2++){Curtime[i2]=R1302(addr);//格式秒分时日月星期年addr+=2;}miao=Curtime[0];if(time!=miao){ time=miao;flagg=1;}fen=Curtime[1];shi=Curtime[2];tab[5]=miao%16;tab[4]=miao/16;tab[3]=fen%16;tab[2]=fen/16;tab[1]=shi%16;tab[0]=shi/16;for(i=0;i<6;i++){SBUF=tab2[tab[i]];while(!TI);TI=0;}delay(20);if(flagg==1){flagg=0;P0=tabp0[zz];P2=tabp2[zz];zz++;if(zz==12)zz=0;FMQ=0;delay(20);FMQ=1;}}//主函数void main(){display();if(shi==0x00&&fen==0x00&&miao==0x80)init();EA=1;EX1=1;IT1=1;while(1){if(c!=1)display();if(fen==0x00&&miao<=5)FMQ=0;}}//外部中断1void int1() interrupt 2{while(1){if(int1k==0) //扫描p3{delay(20);if(int1k==0){while(!int1k);W1302(0x8e,0x00);a=1;c++;if(c==2)c=0;}}if(c==1){if(youyik==0) //扫描键盘{delay(20);if(youyik==0){while(!youyik);a+=2;if( a==7) a=1;}}if(zuoyik==0){delay(20);if(zuoyik==0){while(!zuoyik);if( a==1)a=7;a-=2;}}for(i=0;i<6;i++) //这个循环是个关键{if( a==i){b=a;SBUF=0xff;}else SBUF=tab2[tab[i]];while(!TI);TI=0;}delay(100);if(b==a){if(jiak==0){delay(20);if(jiak==0){while(!jiak);switch(b){case 1: tab[1]++;if(tab[1]==10){ tab[1]=0;tab[0]++;}if(tab[0]==2&&tab[1]==4){tab[0]=0;tab[1]=0;}shi=tab[0]*10+tab[1];W1302(0x84,(shi/10)*16+shi%10);break;case 3: tab[3]++;if(tab[3]==10){ tab[3]=0;tab[2]++;}if(tab[2]==6&&tab[3]==0){tab[2]=0;tab[3]=0;}fen=tab[2]*10+tab[3];W1302(0x82,(fen/10)*16+fen%10);break;case 5: tab[5]++;if(tab[5]==10){ tab[5]=0;tab[4]++;}if(tab[4]==6&&tab[5]==0){tab[4]=0;tab[5]=0;}miao=tab[4]*10+tab[5];W1302(0x80,(miao/10)*16+miao%10);break;}}}if(jiank==0){delay(20);if(jiank==0){while(!jiank);switch(b){case 1: if(tab[0]==0&&tab[1]==0){ tab[0]=2;tab[1]=4;}if(tab[1]==0){ tab[1]=10;tab[0]--;}tab[1]--;shi=tab[0]*10+tab[1];W1302(0x84,(shi/10)*16+shi%10);break;case 3: if(tab[2]==0&&tab[3]==0){ tab[2]=6;tab[3]=0;}if(tab[3]==0){ tab[3]=10;tab[2]--;}tab[3]--;fen=tab[2]*10+tab[3];W1302(0x82,(fen/10)*16+fen%10);break;case 5: if(tab[4]==0&&tab[5]==0){ tab[4]=6;tab[5]=0;}if(tab[5]==0){ tab[5]=10;tab[4]--;}tab[5]--;miao=tab[4]*10+tab[5];W1302(0x80,(miao/10)*16+miao%10);break;}}}}for(i=0;i<6;i++){SBUF=tab2[tab[i]];while(!TI);TI=0;}delay(100);}if(c==0)break;}}#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit jiak=P2^3;sbit youyik=P2^2;sbit zuoyik=P2^1;sbit jiank=P2^0;sbit int1k=P3^3;sbit FMQ=P1^1;sbit CLK=P3^5;//1302时钟信号线sbit IO=P3^6;//1302的I/O数据线sbit RST=P3^7;//1302的RST复位线void InputByte(uchar);//输入1Byteuchar OutputByte(uchar);//输出1Bytevoid W1302(uchar,uchar);uchar R1302(uchar);uchar tab[6];void key();void display();void init();uchar a,c,i,b;//c表示中断次数a表示数码管移位次数uint temp;uchar miao,fen,shi;uchar tab1[7]={0x40,0x59,0x11,0x11,0x02,0x06,0x06};uchar code tab2[10]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90}; sbit zy=P2^1;sbit yy=P2^2;bit flagg;uchar zz,time;uchar code tabp0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff}; uchar code tabp2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef};//延时1msvoid delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//往1302写入1Byte d为写入的数据入口参数void InputByte(uchar date){uchar i;ACC=date;for(i=8;i>0;i--){IO=ACC0;//相当于汇编中的RRCCLK=1;CLK=0;ACC=ACC>>1;}}//从1302读取1Byte数据返回值ACCuchar OutputByte(void){uchar i;for(i=8;i>0;i--){ACC=ACC>>1;ACC7=IO;CLK=1;CLK=0;}return(ACC);}//往1302写入数据先写地址后写数据ucADD ucDA是入口参数void W1302(uchar addr,uchar date){RST=0;CLK=0;RST=1;InputByte(addr);//写地址InputByte(date);//写1Byte数据CLK=1;RST=0;}//读取1302某地址的数据先写地址后读数据ucAddr入口地址ucDa是返回值uchar R1302(uchar addr){uchar date;RST=0;CLK=0;RST=1;InputByte(addr);//写地址date=OutputByte();//读1Byte数据CLK=1;RST=0;return(date);}//初始化设置初始值void init(){uchar i1;uchar addr=0x80;W1302(0x8e,0x00);//控制命令字节WP=0 写操作for(i1=0;i1<7;i1++){W1302(addr,tab1[i1]);//秒分时日月星期年addr+=2;}W1302(0x90,0xa6);W1302(0x8e,0x80);//控制命令字节WP=1写保?}void display(){uchar Curtime[7];uchar i,i2;uchar addr=0x81;for(i2=0;i2<7;i2++){Curtime[i2]=R1302(addr);//格式秒分时日月星期年addr+=2;}miao=Curtime[0];if(time!=miao){ time=miao;flagg=1;}fen=Curtime[1];shi=Curtime[2];tab[5]=miao%16;tab[4]=miao/16;tab[3]=fen%16;tab[2]=fen/16;tab[1]=shi%16;tab[0]=shi/16;for(i=0;i<6;i++){SBUF=tab2[tab[i]];while(!TI);TI=0;}delay(20);if(flagg==1){flagg=0;P0=tabp0[zz];P2=tabp2[zz];zz++;if(zz==12)zz=0;FMQ=0;delay(20);FMQ=1;}}//主函数void main(){display();if(shi==0x00&&fen==0x00&&miao==0x80)init();EA=1;EX1=1;IT1=1;while(1){if(c!=1)display();if(fen==0x00&&miao<=5)FMQ=0;}}//外部中断1void int1() interrupt 2{while(1){if(int1k==0) //扫描p3{delay(20);if(int1k==0){while(!int1k);W1302(0x8e,0x00);a=1;c++;if(c==2)c=0;}}if(c==1){if(youyik==0) //扫描键盘{delay(20);if(youyik==0){while(!youyik);a+=2;if( a==7) a=1;}}if(zuoyik==0){delay(20);if(zuoyik==0){while(!zuoyik);if( a==1)a=7;a-=2;}}for(i=0;i<6;i++) //这个循环是个关键{if( a==i){b=a;SBUF=0xff;}else SBUF=tab2[tab[i]];while(!TI);TI=0;}delay(100);if(b==a){if(jiak==0){delay(20);if(jiak==0){while(!jiak);switch(b){case 1: tab[1]++;if(tab[1]==10){ tab[1]=0;tab[0]++;}if(tab[0]==2&&tab[1]==4){tab[0]=0;tab[1]=0;}shi=tab[0]*10+tab[1];W1302(0x84,(shi/10)*16+shi%10);break;case 3: tab[3]++;if(tab[3]==10){ tab[3]=0;tab[2]++;}if(tab[2]==6&&tab[3]==0){tab[2]=0;tab[3]=0;}fen=tab[2]*10+tab[3];W1302(0x82,(fen/10)*16+fen%10);break;case 5: tab[5]++;if(tab[5]==10){ tab[5]=0;tab[4]++;}if(tab[4]==6&&tab[5]==0){tab[4]=0;tab[5]=0;}miao=tab[4]*10+tab[5];W1302(0x80,(miao/10)*16+miao%10);break;}}}if(jiank==0){delay(20);if(jiank==0){while(!jiank);switch(b){case 1: if(tab[0]==0&&tab[1]==0){ tab[0]=2;tab[1]=4;}if(tab[1]==0){ tab[1]=10;tab[0]--;}tab[1]--;shi=tab[0]*10+tab[1];W1302(0x84,(shi/10)*16+shi%10);break;case 3: if(tab[2]==0&&tab[3]==0){ tab[2]=6;tab[3]=0;}if(tab[3]==0){ tab[3]=10;tab[2]--;}tab[3]--;fen=tab[2]*10+tab[3];W1302(0x82,(fen/10)*16+fen%10);break;case 5: if(tab[4]==0&&tab[5]==0){ tab[4]=6;tab[5]=0;}if(tab[5]==0){ tab[5]=10;tab[4]--;}tab[5]--;miao=tab[4]*10+tab[5];W1302(0x80,(miao/10)*16+miao%10);break;}}}}for(i=0;i<6;i++){SBUF=tab2[tab[i]];while(!TI);TI=0;}delay(100);}if(c==0)break;}}}。

555流水灯课程设计

555流水灯课程设计

555流水灯课程设计一、教学目标本课程旨在让学生了解和掌握555流水灯的工作原理、电路设计及编程实现。

通过本课程的学习,学生应达到以下目标:1.知识目标:–了解555定时器的内部结构和工作原理;–掌握555流水灯的电路设计方法;–理解编程实现555流水灯的逻辑控制。

2.技能目标:–能够运用555定时器设计简单的电路;–能够编写程序实现555流水灯的控制;–能够对555流水灯电路进行调试和故障排除。

3.情感态度价值观目标:–培养学生的创新意识和动手能力;–培养学生团队合作精神和沟通表达能力;–培养学生对电子科技的兴趣和热情。

二、教学内容本课程的教学内容主要包括以下几个部分:1.555定时器的内部结构和工作原理;2.555流水灯的电路设计方法;3.编程实现555流水灯的逻辑控制;4.电路调试和故障排除技巧。

具体的教学大纲安排如下:第一课时:555定时器的内部结构和工作原理;第二课时:555流水灯的电路设计方法;第三课时:编程实现555流水灯的逻辑控制;第四课时:电路调试和故障排除技巧。

三、教学方法为了提高教学效果,本课程将采用多种教学方法,包括:1.讲授法:讲解555定时器的内部结构和工作原理,让学生掌握基本知识;2.案例分析法:分析555流水灯的电路设计案例,让学生学会实际应用;3.实验法:让学生动手搭建555流水灯电路,提高学生的实践能力;4.讨论法:分组讨论编程实现555流水灯的控制,培养学生的团队合作精神。

四、教学资源为了支持教学内容的实施,我们将准备以下教学资源:1.教材:提供关于555定时器和流水灯的相关知识;2.参考书:提供更深入的原理和应用介绍;3.多媒体资料:演示555流水灯的电路设计和编程实现;4.实验设备:提供给学生动手实践的555定时器模块和编程环境。

五、教学评估本课程的教学评估将采用多元化的评估方式,以全面客观地评价学生的学习成果。

评估方式包括:1.平时表现:通过课堂参与、提问、回答问题等方式,评估学生的学习态度和积极性;2.作业:布置相关的作业,评估学生的理解和应用能力;3.考试:进行期中和期末考试,评估学生的知识掌握和运用能力;4.实验报告:评估学生的实验操作能力和分析问题的能力;5.团队合作项目:评估学生在团队中的协作能力和沟通表达能力。

实验三流水灯实验(io口和定时器实验)

实验三流水灯实验(io口和定时器实验)

实验三流水灯实验(I/O口和定时器实验)一、实验目的1.学会单片机I/O口的使用方法和定时器的使用方法;2.掌握延时子程序的编程方法、内部中断服务子程序的编程方法;3.学会使用I/O口控制LED灯的应用程序设计。

二、实验内容1.控制单片机P1口输出,使LED1~LED8右循环轮流点亮(即右流水),间隔时间为100毫秒。

2.控制单片机P1口输出,使LED1~LED8左循环轮流点亮(即左流水),间隔时间为100毫秒。

3.使用K1开关控制上面LED灯的两种循环状态交替进行;4. 用定时器使P1口输出周期为100ms的方波,使LED闪烁。

5.使用定时器定时,使LED灯的两种循环状态自动交替,每一种状态持续1.6秒钟(选作)。

三、实验方法和步骤1.硬件电路设计使用实验仪上的E1、E5和E7模块电路,把E1区的JP1(单片机的P1口)和E5区的8针接口L1~L8(LED的驱动芯片74HC245的输入端)连接起来,P1口就可以控制LED 灯了。

当P1口上输出低电平“0”时,LED灯亮,反之,LED灯灭。

E7区的K1开关可以接单片机P3.0口,用P3.0口读取K1开关的控制信号,根据K1开关的状态(置“1”还是置“0”),来决定LED进行左流水还是右流水。

综上,画出实验电路原理图。

2.程序设计实验1和实验2程序流程图如图3-1实验3程序流程图如图3-2所示。

图3-1 实验1,2程序流程图图3-2 实验3程序流程图实验4程序流程图如图3-3,3-4所示。

实验5程序流程图如图3-5,3-6所示。

图3-5 实验5主程序流程图图3-6 定时器中断服务子程序流程图图3-4 定时器中断服务子程序流程图图3-3 实验4主程序流程图编程要点:(1)Pl,P3口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。

例如:MOV P1,A; P1口做输出MOV P1,#0FFHMOV A,P1;P1口做输入SETB P3.0MOV C,P3.1;从P3.1口读入数据(2)每个端口对应着一个寄存器,例:P1→90H(P1寄存器地址);P3→B0H(P3寄存器地址);寄存器的每一位对应着一个引脚,例:B0H.0→P3.0(3)对寄存器写入“0”、“1”,对应的外部引脚则输出“低电平”、“高电平”。

LINUX驱动程序LED+定时器实现流水灯,TQ2440上试验通过

LINUX驱动程序LED+定时器实现流水灯,TQ2440上试验通过

LINUX驱动程序LED+定时器实现流水灯,TQ2440上试验通过驱动程序代码如下:#include#include#include#include#include#include#include#include#include#include#include#include#define LED_MAJOR 244#define GPBCON_CFG_V AL ( (1<<10) | (1<<12) | (1<<14) | (1<<16) ) //GPB5,6,7,8 output mode#define LED1 1#define LED2 2#define LED3 3#define LED4 4#define ON 1#define OFF 0static unsigned long led_major = LED_MAJOR;struct led_dev{struct cdev cdev;struct timer_list s_timer;atomic_t led_no;atomic_t sec_counter;};struct led_dev *led_devp;volatile unsigned int *GPBCON=NULL;volatile unsigned int *GPBDAT=NULL;static void sec_timer_handler(unsigned long arg){int num;mod_timer(&led_devp->s_timer,jiffies+HZ);atomic_inc(&led_devp->sec_counter);num = atomic_read(&led_devp->led_no);if(num == 4){atomic_set(&led_devp->led_no,1);}else{atomic_inc(&led_devp->led_no);}}static int led_open(struct inode *inode,struct file *filp) { struct timer_list *timer;timer = &led_devp->s_timer;init_timer(timer);timer->function = sec_timer_handler;timer->expires = jiffies+HZ;add_timer(timer);atomic_set(&led_devp->sec_counter,0);atomic_set(&led_devp->led_no,0);return 0;}static int led_release(struct inode *inode, struct file *filp) {del_timer(&led_devp->s_timer);return 0;}static ssize_t led_read(struct file *filp, char __user *buf,size_t size, loff_t *ppos){int count,led_no;int result;count = atomic_read(&led_devp->sec_counter);led_no = atomic_read(&led_devp->led_no);result = (count<<3)+led_no;if(put_user(result,(int*)buf)){return -EFAULT;}else{return sizeof(int);}}static int led_ioctl(struct inode* inode, struct file* filp, unsigned int cmd, unsigned long arg){if( (arg > 4) || (arg < 1) ){printk(KERN_NOTICE "Led No. Error!\n");}switch(cmd){case OFF: *GPBDAT |= 1<<(arg+4);break;case ON: *GPBDAT &= ~(1<<(arg+4));break;default: printk(KERN_NOTICE "cmd error!\n");}return 0;}static const struct file_operations led_fops ={.owner = THIS_MODULE,.read = led_read,.open = led_open,.ioctl = led_ioctl,.release = led_release,};static void led_setup_cdev(struct led_dev *dev, int index) {int err,devno = MKDEV(led_major,index);cdev_init(&dev->cdev,&led_fops);dev->cdev.owner = THIS_MODULE;err = cdev_add(&dev->cdev,devno,1);if(err){printk(KERN_NOTICE "Error %d adding %d\n",err,index); }}static int led_init(void)int result;dev_t devno = MKDEV(led_major,0);if(led_major)result = register_chrdev_region(devno,1,"led");else{result = alloc_chrdev_region(&devno,0,1,"led");led_major = MAJOR(devno);}if(result<0){printk("register failed!");return result;}/*涓鸿澶囨弿杩扮粨鏋勫垎閰嶅唴瀛?/led_devp =(struct led_dev*)kmalloc(sizeof(struct led_dev),GFP_KERNEL);if(!led_devp){result = -ENOMEM;unregister_chrdev_region(devno,1);}memset(led_devp, 0 ,sizeof(struct led_dev));led_setup_cdev(led_devp,0);GPBCON = (volatile unsigned int*)ioremap(0x56000010,16);GPBDAT = GPBCON+1;*GPBCON = GPBCON_CFG_V AL;*GPBDAT |= 0xf<<5;return 0;static void led_exit(void){cdev_del(&led_devp->cdev);kfree(led_devp);unregister_chrdev_region(MKDEV(led_major,0),1); }MODULE_LICENSE("GPL");MODULE_AUTHOR("Vanbreaker");module_init(led_init);module_exit(led_exit);测试程序代码如下:#include#include#include#include#include#define ON 1#define OFF 0int main(){int fd;int led_no,count = 0,old_count = 0;int ret;fd = open("/dev/led_timer",O_RDWR);if(fd != -1){while(1){read(fd,&ret,sizeof(int));led_no = ret&0x07;count = ret>>3;if(count != old_count){if(led_no!=1){ioctl(fd,OFF,led_no-1);}else{ioctl(fd,OFF,4);}ioctl(fd,ON,led_no);printf("Led NO:%d sec:%d\n",led_no,count); old_count = count;}}}else{printf("Cannot Open File");}}。

流水灯程序

流水灯程序

图1流水灯硬件原理图从原理图中可以看出,假如要让接在PLO 口的LEDI 亮起来,那么只要把 P1.0口的电平变为低电平就可以了;相反,假如要接在PLO 口的LEDl 熄灭,就 要把PLO 口的电平变为高电平洞理,接在P1.1~PL7 口的其他7个LED 的点 亮和熄灭的方法同LED1。

因此,要实现流水灯功能,我们只要将发光二极管 LED1-LED8依次点亮、熄灭,8只LED 灯便会一亮一暗的做流水灯了。

在此 我们还应留意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很 短,我们在掌握二极管亮灭的时候应当延时一段时间,否则我们就看不到“流水” 效果了。

3.软件编程单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后, 我们还不能看到流水灯循环点亮的现象,我们还需要告知单片机怎么来进行工PlO POO Pll POl PlJ POi PlJ P03 Pl* PO* P15 PO 5 Pl 3PO 4 P17 λ!SS>C51POT am PJO nττoPnP22 Il pn IO P” P25 I∑∖T> PY P27Xl X :XXD!XD KD ALEP TlPSHT∖n47Kx8VCCLEDl-M —LED)W LED)LED1 W * LEDS人KLEDj WLED7W-44LEDS-M作,即编写程序掌握单片机管脚电平的凹凸变化,来实现发光二极管的一亮一灭。

软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。

下面我们以最简洁的流水灯掌握功能即实现8个LED灯的循环点亮,来介绍实现流水灯掌握的几种软件编程方法。

3.1位控法这是一种比较笨但又最易理解的方法,采纳挨次程序结构,用位指令掌握Pl 口的每一个位输出凹凸电平,从而来掌握相应LED灯的亮灭。

程序如下:ORG OOOOH ;单片机上电后从0000H地址执行AJMPSTART ;跳转到主程序存放地址处ORG 0030H ;设置主程序开头地址START : MOV SP , #60H ;设置堆栈起始地址为60HCLRPl.0;PLO输出低电平,使LEDl点亮ACALL DELAY ;调用延时子程序SETB P1.0;P1.0输出高电平,使LEDl熄灭CLR Pl.l ;P1.1输出低电平,使LED2点亮ACALL DELAY ;调用延时子程序SETB Pl.l ;P1.1输出高电平,使LED2熄灭CLR P1.2;P1.2输出低电平,使LED3点亮ACALL DELAY ;调用延时子程序SETB P1.2;P1.2输出高电平,使LED3熄灭CLR P1.3 ;P1.3输出低电平,使LED4点亮ACALL DELAY ;调用延时子程序SETB P1.3;P1.3输出高电平,使LED4熄灭CLR Pl.4 ;P1.4输出低电平,使LED5点亮ACALL DELAY ;调用延时子程序SETB P1.4;P1.4输出高电平,使LED5熄灭CLR P1.5;P1.5输出低电平,使LED6点亮ACALL DELAY ;调用延时子程序SETB P1.5;P1.5输出高电平,使LED6熄灭CLR P1.6 ;P1.6输出低电平,使LED7点亮ACALL DELAY ;调用延时子程序CLR P1.7 ;P1.7输出低电平,使LED8点亮ACALL DELAY ;调用延时子程序SETB P1.7pl.7输出高电平,使LED8熄灭ACALL DELAY ;调用延时子程序START ;8个LED流了一遍后返回到标号START处再循环AJMPDELAY :;延时子程序MOV RO , #255 ;延时一段时间Dl : MOV Rl , #255DJNZRl , $DJNZ RO , DlRET ;子程序返回END ;程序结束3.2循环移位法在上个程序中我们是逐个掌握Pl端口的每个位来实现的,因此程序显得有点简单,下面我们采用循环移位指令,采纳循环程序结构进行编程。

任务五 定时控制流水灯

任务五 定时控制流水灯

C1
22pF
X1 R1
1k 12MHz
U1
19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
#include <reg51.h> Void main() { unsigned char i; TMOD=0x10; //设置Timer 1工作在方式1下定时模式 for (i=0; i<50; i++) //重复定时计数器,定时50次 { TH1=(65536-20000)/256; //往TH1中载入计数初值高8位 TL1=(65536-20000)%256; //往TL1中载入计数初值低8位定时20ms TR1=1; //启动Timer 1 while (!TF1) ; //检测Timer1溢出标志,当TF1=1,跳出 TR1=0; //关闭Timer 1 TF1=0; //将TF1清0 } }
//设置Timer 1工作在方式1下定时模式 //重复定时计数器,定时50次 //往TL1和TH1中载入计数的初始值B1E0H //定时20ms //启动Timer 1 //检测Timer1溢出标志,当TF1=1,跳出 //关闭Timer 1 //将TF1清0

数字电路流水灯

数字电路流水灯

流水灯设计专业班级学生指导教师日期2011年7 月7日一.名称:流水灯设计方法:1.利用555定时器制作一个秒信号发生器。

(1).555定时器的结构图图1.555定时器结构图(2).555定时器功能表(3).秒信号产生计算参数:图.3. 用555做的多谐振荡器因为R1=R2,所有取2搞47KΩ和一个2KΩ的电阻串联。

就得到如图3的设计图。

2.控制电路(1).用分配器控制彩灯的流水式.74HC4017中1-7,9-11为输出管脚,输出为1000000000—010*******—0010000000—0001000000——0000100000——0000010000——00000001000——0000000100——00000000010——0000000001——1000000000.符号如下图。

逻辑图封装图14管脚是时钟输入端。

13是低电平有效。

15清零端端。

12管脚为进位端。

这个设计中我们只用1个芯片,所有不用12端。

(2).时序波形图3.仿真过程通过一个星期的课程设计,我们了解到此次设计主要是完成LED循环闪烁电路的设计,当我把准备好关于此次课程设计的资料分析后,我没有到学校的实验室进行本次课程设计,而是天天在寝室或者图书馆来回跑,进过这些天的努力,终于完成了12V直流稳压电源和LED循环闪烁次得任务。

当我把电路连接好后,做了最后的检查,在检查过后,就是进行电路仿真过程。

当电路仿真成功后,就是进行LED循环闪烁电路部分的观察,当通电后,LED 循环闪烁,在通电后,看LED灯是否按照我们本次课程设计的要求进进行闪烁,如果不按照要求闪烁的话,再进行电路的检查,直到结果正确才成功。

检查电路设计的原理图即导线的链接,并确定导线的链接与电路原理图一致。

检查导线的链接,并检查导线是否断路,根据电路原理图,检查各导线对应的按点是否接好。

检查完线路,确定电路完全连好。

点击运行仿真,这是可以看到电路发光情况。

利用硬件定时实现流水灯

利用硬件定时实现流水灯
80C51有2个16位定时/计数器:
• T0、T1
80C52有3个16位定时/计数器:
• T0、T1、T2
定时/计数器(Timer/Counter,简称T/C)
定时器:来一个机器脉冲计数器的值加1 。当计数器值溢出(全1)时回0,定时时间 到,中断标志TF置1.
1个机器周期=12*1/振荡频率
任务三 利用硬件 定时实现流水灯
LOGO
常用延时方法
非精确延时
• For(i=0;i<100;i++); • i=0;while(i--);
精确延时
• 利用库函数_nop_ ( ) ; //延时一个机器周期
(需要include<intrins.h>)
• 利用定时器进行定时
定时/计数器(Timer/Counter,简称T/C)
LOGO
M1和M0:T0和T1工作方式控制位。定时/计数器的工作方 式有M1M0两位状态决定,这两位有四种编码方式,对应
于四种工作方式。四种方式定义如表所示:
M1M0 00 01 10 11
方式 方式0 方式1 方式2
方式3
说明
TL的低5位和TH的8位构成13位计数器
TL的8位和TH的8位构成16位的计数器
TMOD寄存器 不可位寻址
控制T1
控制T0
GATE C/T M1 M0 GATE C/T M1 M0
GATE:
0:软件控制 定时器工作
1:外部中断 控制定时器 工作
C/T 0:定时器 1:计数器
M1M0: 00:方式0 01:方式1 10:方式2 11:方式3
GATE:门控位,控制计数器的启动/停止操作方式。 当GATE=0时,外部中断信号不参与控制,计数器只有TR0 和TR1位软件控制启动和停止。TR1、TR0为1时,计数器

定时器控制流水灯

定时器控制流水灯

定时器控制流水灯The Standardization Office was revised on the afternoon of December 13, 2020成绩信息与通信工程学院实验报告(操作性实验)课程名称:微机原理与微控制器应用实验题目:c51单片机的定时器实验指导教师:班级: 学号:学生姓名:一、实验目的和任务1.掌握定时器中断的编程方法。

2.掌握keil C51集成开发环境在硬件仿真条件下各参数的设置。

二、实验仪器及器件硬件:电脑一台、微机原理与单片机试验箱:51开发板、开关及LED显示单元、导线若干软件:keil uVision4三、实验内容及电路图利用实验板上的八个LED灯作显示,利用定时器中断编写中断一次为50ms的定时程序,控制单片机定时器进行定时,总定时时间为。

四、流程图与程序#include ""#include<>int temp=0x01,num=0;void T0Int() interrupt 1{TH0=(65536-45872)/256;TL0=(65536-45872)%256;num++;if(num==15) {num=0;P1=_crol_(temp,1);temp=P1;}}void main(){EA=1;ET0=1;TMOD=0X01;TH0=(65536-45872)/256;TL0=(65536-45872)%256;TR0=1;while(1);}五、实验结果八个LED灯由左往右依次亮起,并且每个LED灯点亮时间大约为。

六、实验数据分析及处理从实验现象来看,LED灯从左到右依次点亮,符合实验要求,说明实验操作正确,实验结果正确。

七、实验结论与感悟(或讨论)。

单片机控制流水灯程序汇编语言

单片机控制流水灯程序汇编语言

单片机控制流水灯程序汇编语言随着科技的发展和微电子技术的迅猛进步,单片机逐渐成为智能系统与设备中不可或缺的组成部分。

而流水灯作为最基础的应用之一,不仅在学习过程中具有重要意义,同时也在实际工程中发挥着重要作用。

本文将介绍如何使用汇编语言编写单片机控制流水灯程序,并详细讲解其运行原理和实现方法。

一、流水灯原理流水灯是一种由多个LED组成的灯条或灯链,在按照一定次序依次点亮和熄灭的灯光效果。

其原理基于单片机通过控制输出口的电平高低来控制LED的亮灭状态,实现灯光的变化和移动效果。

二、程序设计方法1. 初始化设置在编写流水灯程序之前,我们首先要了解单片机的相应接口和寄存器的使用方法。

在程序开始时,需要进行相应的初始化设置,包括将数据方向寄存器和端口寄存器设置为输出,并将初始值赋予输出口电平。

例如,对于51单片机,可以使用以下汇编语言代码进行初始化设置:MOV P1, #00H ;将P1端口的输出电平置为低电平MOV P1M1, #FFH ;将P1端口的数据方向设置为输出MOV P1M0, #00H2. 主程序在流水灯程序中,需要编写主程序来实现流水灯的效果。

主程序中使用循环结构控制LED的亮灭状态和移动效果。

例如,以下是一个简单的汇编语言代码,实现了由4个LED组成的流水灯的效果:MOV R0, #F0H ;初始亮灭状态MOV R1, #00H ;初始LED位置LOOP: ;循环MOV P1, R0 ;将亮灭状态赋予P1端口的输出电平ACALL DELAY ;延时,形成流水灯效果MOV A, R1SUBB A, #01H ;将LED位置减一MOV R1, AJZ CHANGE ;当LED位置为零时,改变亮灭状态MOV R0, R0SJMP LOOP ;继续循环CHANGE: ;改变亮灭状态CPL R0 ;对亮灭状态进行取反操作SJMP LOOP ;继续循环3. 延时函数为了实现流水灯的移动效果,需要设置一个合适的延时时间来控制LED的亮灭速度。

使用定时器1实现1秒定时,控制流水灯流水点亮。中断方式(PR=9)

使用定时器1实现1秒定时,控制流水灯流水点亮。中断方式(PR=9)

使用定时器1实现1秒定时,控制流水灯流水点亮。

中断方式(PR=9)/************************************************************** *************** 文件名:main.c* 功能:使用定时器0实现1秒定时,控制蜂鸣器蜂鸣。

(中断方式) * 说明:短接蜂鸣器跳线JP7。

断开CF卡跳线JP13、GPIO接口J17。

*************************************************************** *************/#include "config.h"#define LED1 1<<16 // P1.16#define LED2 1<<17 // P1.17#define LED3 1<<18 // P1.18#define LED4 1<<19 // P1.19#define LED5 1<<20 // P1.20#define LED6 1<<21 // P1.21#define LED7 1<<22 // P1.22#define LED8 1<<23 // P1.23#define LEDCON 0x00ff0000const uint32 DISP_TAB[8] = { 0xff01ffff, 0xff02ffff, 0xff04ffff, 0xff08ffff,0xff10ffff, 0xff20ffff, 0xff40ffff, 0xff80ffff};/************************************************************** *************** 名称:IRQ_Time0()* 功能:定时器0中断服务程序,取反BEEPCON控制口。

流水灯电路设计及程序代码

流水灯电路设计及程序代码

流水灯电路设计及程序代码
想要学好电路设计,就要多看多练,那么你对流水灯的电路设计有兴趣吗?下面就由店铺为你带来流水灯电路设计及程序代码,希望你喜欢。

流水灯电路设计
流水灯电路设计的程序代码
#include <reg52.h>
#include<instrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code led[]={0xfe,0xfb,0xfd ,0xf7,0xef,0xbf,0xdf,0x7f};
delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
main( )
{
uint i;
while(1)
{
P2=led[];
delay(500);
_crol_(led,1);
}
}
流水灯介绍及工作原理
就是一组灯,然后在控制系统的控制下按照设定的顺序和时间来
发亮和熄灭,这样就能形成一定的视觉效果,很多街上的店面和招牌上面就安了流水灯,看上去更美观。

这个原理其实很简单,三极管在电路中充当开关的作用,当电路导通,最左边的LED首先点亮。

基极串出一电容连接下一个三极管的集电极。

当电容充分充电后,下一个三极管导通使得第二个LED点亮,以此类推。

可以通过调节电容的容量值,来控制流水灯点亮的时间。

定时器_流水灯

定时器_流水灯

/********************************************************************* name:发光二极管以1秒钟的间隔,流水延时方式:定时器0,工作方式1(16位计数)程序控制方式:中断方式连线:P2口—>发光二极管JP14计数初值计算过程分析:1s=20*0.05s每秒计数机器周期个数=11.0592M/12=9216000.05s计数个数N=921600*0.05=46080 定时0.05s计数初值X=65536-46080=19456高8位(TH0):X/256 低8位(TL0):X%256*********************************************************************/#include<reg51.h>#define uint unsigned int #define uchar unsigned char#define SYSCLK 11059200void init_T0(void);void isr_T0(void);void led_show(void);uint count = 0;main(){init_T0();while(1){if(count == 20){count = 0; //清0,重新计数led_show();}}}void isr_T0(void) interrupt 1{++count;TH0 = (65536 - SYSCLK/12/20)/256; //计数初值自动重装载TL0 = (65536 - SYSCLK)/12/20%256;//清除溢出标志位:中断方式硬件自动清0 }void init_T0(void){TMOD = 0x01; //设定定时计数器0:工作方式1TH0 = (65536 - SYSCLK/12/20)/256; //设置计数初值高8位TL0 = (65536 - SYSCLK)/12/20%256; //设置计数初值低8位EA = 1; //开总中断ET0 = 1; //开定时计数器0中断TR0 = 1; //TCON=0x10,启动定时计数器0}void led_show(void){static uchar temp = 0xfe;P2 = temp;temp = (temp << 1) | 0x01;if(temp == 0xff)temp = 0xfe;}。

流水灯课程设计

流水灯课程设计

第1章设计概述流水灯是一串按一定的规律像流水一样连续闪亮。

流水灯控制可用多种方法实现,利用移位寄存器实现最为便利。

通常用左移寄存器实现灯的单方向移动;用双向移位寄存器实现灯的双向移动。

本设计用红、黄、绿、白四种颜色的灯在时钟信号作用下按以下规律转换状态。

电路启动后,要求红、黄、绿、白四种颜色的灯在脉冲作用下顺序,循环点亮。

红、黄、绿、白灯每次亮的时间可通过电位器调节。

设计任务:1.输出为4路LED灯;2.要求能实现左移右移功能,左右移自动切换;3.移动速度要可调。

第2章系统框图第3章 单元模块设计3.1 脉冲产生电路由555定时器组成时钟发生电路,为整个电路提供所需要的时钟信号CP 。

时钟脉冲产生电路由NE555定时器、两个电阻和两个电容构成。

555定时器是一种多用途的数字模拟混合集成电路,利用它可以方便的构成施密特触发器、单稳态触发器和多谐振荡器,由于使用灵活、方便,所以555定时器再波形的产生与变换、测量与控制等多种领域都得到广泛应用。

3.1.1 555管脚介绍555定时器内部机构如图所示,它主要有以下部分组成: (1)电阻分压器。

由3个5 K Ω的电阻组成。

(2)电压比较器。

控制波形的占空比由C1和C2组成,当控制输入端悬空时,C1和C2的基准电压分别是2/3Vcc 和1/3Vcc 。

(3)基本RS 触发器。

由两个与非门G1和G2构成,它的作用是对两个比较器输出的电压进行控制。

(4)放电三极管VT 。

及放电端,用DISC 表示,VT 是集成极开路的三极管,VT 的集成极作为定时器的引出端D 。

NE555时基电路21348765GNDTRIOUT RES VccDISTHRCON(5)缓冲器。

由G3和G4构成,以提高电路的负载能力。

引脚功能:1脚位接地端;2脚是低电平触发端入端;3脚是输出端;4脚是复位端;5脚是电压控制端;6脚是高电平触发端入端;7脚是放电端;8脚是电源端。

3.1.2 周期计算 时钟电路案例图如图时钟电路案例(数据可变)UAL用555定时器构成多谐振荡器,电路输出得到一个周期性的矩形脉冲,其周期为:T=0.7(R1+2R2)C555控制74LS161模十六计数器和八位移位寄存器,要能看到彩灯的流动,其周期设为1秒左右, 电阻值和电容值可设为:R1=20KΩ R2=2.2KΩ(可变) C=100μf由公式计算得: T=1.72s时钟电路的输出一路作为计数脉冲送到模十六计数器74LS161;另一路作为移位时钟脉冲加到移位寄存器74LS194。

流水灯定时控制

流水灯定时控制
MEMORY { PAGE 0: VECS: origin = 00000h, length = 00040h LOW: origin = 00040h, length = 03FC0h SARAM: origin = 04000h, length = 00800h B0: origin = 0FF00h, length = 00100h PAGE 1: B0: origin = 00200h, length = 00100h B1: origin = 00300h, length = 00100h B2: origin = 00060h, length = 00020h SARAM: origin = 08000h, length = 00800h }
CMD详解
CMD主要是用来分配rom和ram空间用的,它告诉链接 程序怎样计算地址和分配空间.所以不同的芯片就有 不同大小的rom和ram.放用户程序的地方也不尽相同. 所以要根据芯片进行修改.分两部分.MEMORY和 SECTIONS.
RAM(易挥发性随机存取存储器),高速存取, 读写时间相等,且与地址无关。 ROM(只读存储器)断电后信息不丢失,取速度 很低且不能改写 281X采用分页制,PAGE0放程序空间,PAGE1放数据 空间
• 预定标计数器低位及高位寄存器 (TIMERxTPR,TIMERxTPRH) 定时器预定标计数器低位及高位寄存 器结构及位域定义见图,它由16位分频寄 存器(TDDRH:TDDR)和16 位预定标器计数 器(PSCH:PSC)组合而成
• 控制寄存器(TIMERxTCR) TCR 是一个16 位的寄存器 它在所有运算符中优先级最高 */ Timer->RegsAddr->TCR.bit.TSS=1;//停止定时器 Timer->RegsAddr->TCR.bit.TRB=1; //重装定时器 Timer->RegsAddr->TCR.bit.SOFT=1; Timer->RegsAddr->TCR.bit.FREE=1; //定时器自由 运行 Timer->RegsAddr->TCR.bit.TIE=1; //使能定时器中 断 Timer->InterruptCount=0; //复位中断计数器 }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

THANK YOU!
定时器控制流水灯程序设计
PLC执行[>= T0 K20]指令和[< T0 K30] 指令,判断T0的经过值 是否在2~3秒时间段,如果T0的经 过值在此时段内,则PLC执行[MOV K4 K2Y000]指令,Y2线圈得电, 第3盏彩灯点亮。
任务实施
› (2)采用当前值比较方式编写程序
PLC执行[>= T0 K30]指令和[< T0 K40] 指令,判断T0的经过值是否在3~4 秒时间段,如果T0的经过值在此时段内,则PLC执行[MOV K8 K2Y000]指令 ,Y3线圈得电,第4盏彩灯点亮。 PLC执行[>= T0 K40]指令和[< T0 K50] 指令,判断T0的经过值是否在4~5 秒时间段,如果T0的经过值在此时段内,则PLC执行[MOV K16 K2Y000]指令 ,Y4线圈得电,第5盏彩灯点亮。
知识储备
定时器 时钟脉冲周期 编号范围(共256个) 定时范围
通用 定时器
100ms 10ms
T0~T199,共200个 0.1~3276.7s T200~T245,共46个 0.01~327.67s
积算 定时器
1ms 100ms
T246~T249,共4个 0.001~32.767s T250~T255,共6个 0.1~3276.7s
知识储备
› 1)通用定时器
在任意时刻,如果定时 器T0被断电或者是驱 动输入X000被断开, 定时器T0将被立即复 位,累计值清零、输出 触点复位。
当T0累计值等于设 定值K50时,定时 器T0的输出触点动 作,Y000得电。
X000接通,T0开 始对100ms的时钟 脉冲进行累计。
知识储备ቤተ መጻሕፍቲ ባይዱ
› 2)积算定时器
任务实施
› (1)采用定时控制方式编写程序
在Y5线圈得电期间,定时器T5开始定时。 当定时器T5定时1秒时间到,PLC执行[MOV K64 K2Y000]指令,使Y6线圈得电,第7 盏彩灯被点亮。
在Y6线圈得电期间,定时器T6开始定时。 当定时器T6定时1秒时间到,PLC执行[MOV K128 K2Y000]指令,使Y7线圈得电,第8 盏彩灯被点亮。
任务实施
› (2)采用当前值比较方式编写程序
PLC执行[>= T0 K110]指令和[< T0 K120] 指令,判断T0的经过值 是否在11~12秒时间段,如果T0的经 过值在此时段内,则PLC执行[MOV K8 K2Y000]指令,Y3线圈得电, 第4盏彩灯点亮。
PLC执行[>= T0 K120]指令和[< T0 K130] 指令,判断T0的经过值 是否在12~13秒时间段,如果T0的 经过值在此时段内,则PLC执行 [MOV K4 K2Y000]指令,Y2线圈 得电,第3盏彩灯点亮。
任务实施
› (1)采用定时控制方式编写程序
在Y3线圈得电期间,定时器T3开始定时。 当定时器T3定时1秒时间到,PLC执行[MOV K16 K2Y000]指令,使Y4线圈得电,第5盏彩灯被点亮。
在Y4线圈得电期间,定时器T4开始定时。 当定时器T4定时1秒时间到,PLC执行[MOV K32 K2Y000]指令,使Y5线圈得电,第6盏彩灯被点亮。
任务实施
› (2)采用当前值比较方式编写程序
PLC执行[>= T0 K50]指令和[< T0 K60] 指令,判断T0的经过值是否在 5~6秒时间段,如果T0的经过值在 此时段内,则PLC执行[MOV K32 K2Y000]指令,Y5线圈得电,第6盏 彩灯点亮。
PLC执行[>= T0 K100]指令和[< T0 K110] 指令,判断T0的经过值 是否在10~11秒时间段,如果T0的 经过值在此时段内,则PLC执行 [MOV K16 K2Y000]指令,Y4线 圈得电,第5盏彩灯点亮。
在Y1线圈得电期间,定时器T1开始 定时。
任务实施
› (1)采用定时控制方式编写程序
当定时器T1定时1秒时间到,PLC执行[MOV K4 K2Y000]指令,使Y2线圈得电,第3盏彩灯被点亮。
在Y2线圈得电期间,定时器T2开始定时。 当定时器T2定时1秒时间到,PLC执行[MOV K8 K2Y000]指令,使Y3线圈得电,第4盏彩灯被点亮。
任务实施
› (1)采用定时控制方式编写程序
在Y4线圈得电期间,定时器T10开始定时。 当定时器T10定时1秒时间到,PLC执行[MOV K8 K2Y000]指令,使Y3线圈得电,第4盏彩灯被点亮。
在Y3线圈得电期间,定时器T11开始定时。 当定时器T11定时1秒时间到,PLC执行[MOV K4 K2Y000]指令,使Y2线圈得电,第3盏彩灯被点亮。
在Y7线圈得电期间,定时器T7开始定时。 当定时器T7定时1秒时间到,PLC执行[MOV K64 K2Y000]指令,使Y6线圈得电,第7 盏彩灯被点亮。
任务实施
› (1)采用定时控制方式编写程序
在Y6线圈得电期间,定时器T8开始定时。 当定时器T8定时1秒时间到,PLC执行[MOV K32 K2Y000]指令,使Y5线圈得电,第6盏彩灯被点亮 。
任务实施
› (1)采用定时控制方式编写程序
当按下启动按钮SB1时,PLC执行 [MOV K1 K2Y000]指令,使Y0线 圈得电,第1盏彩灯被点亮。
在Y0线圈得电期间,定时器T0开始 定时。
当定时器T0定时1秒时间到,PLC执 行[MOV K2 K2Y000]指令,使Y1 线圈得电,第2盏彩灯被点亮。
元件名称 启动按钮 停止按钮
控制功能 启动控制 停止控制
任务分析
说明 PLC软元件
Y0
Y1
Y2
输出
Y3
Y4
Y5
Y6
Y7
元件文字符号
HL1 HL2 HL3 HL4 HL5 HL6 HL7 HL8
元件名称
彩灯1 彩灯2 彩灯3 彩灯4 彩灯5 彩灯6 彩灯7 彩灯8
控制功能
状态显示 状态显示 状态显示 状态显示 状态显示 状态显示 状态显示 状态显示
在Y2线圈得电期间,定时器T12开始定时。
任务实施
› (1)采用定时控制方式编写程序
当定时器T12定时1秒时间到,PLC执行[MOV K2 K2Y000]指令,使Y1线圈得电,第2盏彩灯被点亮。
在Y1线圈得电期间,定时器T13开始定时。
当定时器T13定时1秒时间到,PLC执行[MOV K1 K2Y000]指令,使Y0线圈得电,第1盏彩灯被点亮, 程序进入循环执行状态。
任务实施
› (2)采用当前值比较方式编写程序
当按下启动按钮SB1时,PLC执行[SET M0]指令, M0线圈得电。在M0线圈得电期间,定时器T0开始 计时。 当按下停止按钮SB2时,PLC执行[RST M0]指令, M0线圈失电。由于定时器T0的当前值为0,所以 PLC执行[MOV K0 K2Y000]指令,使输出继电器被 复位,彩灯全部被熄灭。
在Y5线圈得电期间,定时器T9开始定时。 当定时器T9定时1秒时间到,PLC执行[MOV K16 K2Y000]指令,使Y4线圈得电,第5盏彩灯被点亮 。
在Y4线圈得电期间,定时器T10开始定时。 当定时器T10定时1秒时间到,PLC执行[MOV K8 K2Y000]指令,使Y3线圈得电,第4盏彩灯被点亮 。
任务实施
› (2)采用当前值比较方式编写程序
PLC执行[>= T0 K70]指令和[< T0 K80] 指令,判断T0的经过值是否在 7~8秒时间段,如果T0的经过值在 此时段内,则PLC执行[MOV K128 K2Y000]指令,Y7线圈得电,第8盏 彩灯点亮。
PLC执行[>= T0 K80]指令和[< T0 K90] 指令,判断T0的经过值 是否在8~9秒时间段,如果T0的经 过值在此时段内,则PLC执行[MOV K64 K2Y000]指令,Y6线圈得电, 第7盏彩灯点亮。
PLC执行[> T0 K0]指令和[< T0 K10] 指令,判断T0的经过值是否在 0~1秒时间段,如果T0的经过值在此时段内,则PLC执行[MOV K1 K2Y000]指令,Y0线圈得电,第1盏彩灯点亮。
任务实施
› (2)采用当前值比较方式编写程序
PLC执行[>= T0 K10]指令和[< T0 K20] 指令,判断T0的经过值是否在 1~2秒时间段,如果T0的经过值在 此时段内,则PLC执行[MOV K2 K2Y000]指令,Y1线圈得电,第2盏 彩灯点亮。
任务实施
› (2)采用当前值比较方式编写程序
PLC执行[>= T0 K130]指令和[< T0 K140] 指令,判断T0的经过值是否在13~14秒时间段,如 果T0的经过值在此时段内,则PLC执行[MOV K2 K2Y000]指令,Y1线圈得电,第2盏彩灯点亮。 PLC执行[= T0 K140]指令,判断T0的当前值是否是14秒,如果T0的当前值是14秒,则PLC执行 [MOV K0 T0]指令,定时器T0被复位,使程序进入循环执行状态。
《PLC应用技术》
定时器应用程序设计
定时器控制流水灯程序设计
布置任务
定时器控制流水灯程序 设计
用两个控制按钮,控制八个彩灯实现单点左右循 环点亮,时间间隔为一秒。 当按下按钮启动时,彩灯开始循环点亮; 当按下停止按钮时,彩灯立即全部熄灭。
任务分析
任务分析
说明 输入
PLC软元件 X0 X1
元件文字符号 SB1 SB2
任务实施
› (2)采用当前值比较方式编写程序
PLC执行[>= T0 K50]指令和[< T0 K60] 指令,判断T0的经过值是否在 5~6秒时间段,如果T0的经过值在 此时段内,则PLC执行[MOV K32 K2Y000]指令,Y5线圈得电,第6盏 彩灯点亮。
相关文档
最新文档