本文目录一览

1,单片机流水灯程序设计

//LED_IO,SW_IO unsigned char i; i = 0; while(1) { while(SW_IO);//switch LED_IO = 0xfe<<i; i++; if(i>=8) i = 0; wait1ms(1000); } 剩下的自己写吧

单片机流水灯程序设计

2,如果用单片机设计流水灯

ORG 0000H JMP MAIN ORG 0010H MAIN: MOV A,#0FEH LOOP: MOV P2,A LCALL DELAY RL A JB ACC.7,LOOP JMP LOOP DELAY:MOV R7,#200 L1:MOV R6,#123 L2:DJNZ R6,L2 DJNZ R7,L1 RET END
ORG 0000H JMP MAIN ORG 0010H MAIN: MOV A,#0FEH LOOP: MOV P2,A LCALL DELAY RL A JB ACC.7,LOOP JMP LOOP DELAY:MOV R7,#200 L1:MOV R6,#123 L2:DJNZ R6,L2 DJNZ R7,L1 RET END 欢迎光临本人QQ空间 http://user.qzone.qq.com/317220086

如果用单片机设计流水灯

3,单片机流水灯

/*******************************************************************/ /* 控制P1口的8个LED发光管可实现先左移,再右移,然后全亮,再全灭,连续闪烁三次,再从右开始,依次点亮1个LED灯、2个LED灯、3个LED灯……最后全部点亮,再全亮全灭闪烁一次。 P1低电平电点亮LED */ /*********************************************************/ #include<reg52.h> //52单片机头文件 #include <intrins.h> //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms. delay(200); //延时200毫秒 P1=0xfe<<i; //点亮小灯 } for(j=0;j<3;j++) delay(300); } }
#include <reg52.h> //////////////////////////////////////////////////////// void delay(unsigned int cnt) //简单的延时 { while(--cnt); } /////////////////////////////////////////////////////// main() { P1=0xfe;//给初始化值 while(1) { delay(30000);//delay at crystal frequency in 12MHz P1<<=1;//左移一位 P1|=0x01;//最后一位补1 if(P1==0x7f)//检测是否移到最左端? { delay(30000);//delay P1=0xfe; } } }

单片机流水灯

4,单片机实验流水灯

ORG OOOOH LJMP MAIN ORG 1000H MAIN:MOV A,#OFEH AGAIN:MOV P1,A RL A LCALL DELAY JNB P1.7,TWO//这里判断P1.7是否为低电平,如果是就转到TWO SJMP AGAIN TWO:MOV A,#OFFH MOV P1,A PP:MOV A,#OFEH MOV P2,A RL A LCALL DELAY JNB P2.7,MAIN//同理判断P2.7 SJMP PP DELAY:MOV R6,#OFFH L1: MOV R7,#OFFH DJNZ R7,$ DJNZ R6,L1 RET END 没有执行过,应该可行 讲下思路,P1,P2是接16个LED 就在P1最高位的灯亮时,这时转到TWO中执行,从P2的最低位开始,到最高位即P2.7为低电平时,等挻时完后又转回P1,如此循环(这里一开始P2端口不用都置1是因为单片机上电时P2端口都为高电平)
思路就是:让一个端口输出高电平,其余低电平,然后用一个循环使其余端口轮流为高电平
ORG OOOOH LJMP MAIN ORG 1000H MAIN: MOV R0,#00H MOV DPTR,#TABLE AGAIN: MOV A,R0 MOVC A,@A+DPTR MOV P1,A INC R0 MOV A,R0 MOVC A,@A+DPTR MOV P0,A INC R0 MOV A,R0 ANL R0,#1FH LCALL DELAY SJMP AGAIN DELAY: MOV R6,#OFFH L1: MOV R7,#OFFH DJNZ R7,$ DJNZ R6,L1 RET TABLE:DB 11111111B,11111110B,11111111B,11111101B,11111111B,11111011B,11111111B,11110111B, DB 11111111B,11101111B,11111111B,11011111B,11111111B,10111111B,11111111B,01111111B, DB 11111110B,11111111B,11111101B,11111111B,11111011B,11111111B,11110111B,11111111B, DB 11101111B,11111111B,11011111B,11111111B,10111111B,11111111B,01111111B,11111111B, END

5,单片机流水灯

下图为主控芯片和流水灯模块的原理图。流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯。相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可。要实现流水灯功能,我们只要将LED1~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。基于单片机的流水灯介绍_51单片机流水灯的五种实现方法基于单片机的流水灯介绍_51单片机流水灯的五种实现方法实现8个LED流水灯程序用中文表示为:P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高、P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。1、通过改变赋值实现流水灯void main()P2=0xfe;delay1ms(500); P2=0xfd; delay1ms(500); P2=0xfb;delay1ms(500); P2=0xf7; delay1ms(500); P2=0xef; delay1ms(500); P2=0xdf;delay1ms(500); P2=0xbf; delay1ms(500); P2=0x7f;delay1ms(500); } }2、通过公式运算实现流水灯void main() while(1) uinta,b=1; P2=0xfe; delayms(500); for(a=0;a<7;a++)P2-=b; // P2=P2-b delayms(500); b=b*2; //都化为同一类型进制运算 } } }3、通过操作符<<与“|”实现流水灯 (通过移位实现流水灯)void main() uchara,i;while(1) a=0xfe; //点亮第一位LED灯 for(i=0;i<8;i++)a=a<<1; //左移一位a=a|0x01; //左移一位后与0x01相或,保证左移后最低位为1 delay_ms(500); } } }4、通过库函数_crol_(字符左移)实现流水灯void main()uint a; a=0xfe; while(1) P2=a;a=_crol_(a,1); delay_ms(500); } }5、采用数组实现流水灯uchar code table[]=void main(void) uchari;while (1) for(i=0;i<8;i++) //循环点亮8只LED灯 P2=table[i];delay_ms(500); //延时500毫秒 } } }
这个问题太技术了,不敢随便乱答,建议你到网上搜一搜吧,或者到百度知道里去问一问,这里有更专业的团队给你更专业的答案的。
应该是循环移位指令出了问题。每当循环一个周期后(从L1-L7),应该重新赋初值FEH
/*******************************************************************/ /* 控制p1口的8个led发光管可实现先左移,再右移,然后全亮,再全灭,连续闪烁三次,再从右开始,依次点亮1个led灯、2个led灯、3个led灯……最后全部点亮,再全亮全灭闪烁一次。 p1低电平电点亮led */ /*********************************************************/ #include//52单片机头文件 #include //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms. { //delay(500);大约延时500ms. uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() //主函数 { uchar a,i,j; while(1) //大循环 { for(j=0;j<1;j++) { a=0xfe; //赋初值 for(i=0;i<8;i++) //左移 { p1=a; //点亮小灯 delay(200); //延时200毫秒 a=_crol_(a,1); //将a变量循环左移一位 } a=0x7f; for(i=0;i<8;i++) //右移 { p1=a; //点亮小灯 delay(200); //延时200毫秒 a=_cror_(a,1); //将a变量循环右移一位 } } p1=0xff; //全部熄灭 for(j=0;j<6;j++) { delay(300); //延时 p1=~p1; //全部取反6次,既闪烁3次 } for(i=0;i<8;i++) //右移 { delay(200); //延时200毫秒 p1=0xfe<

6,单片机中流水灯如何控制

单片机中流水灯控制:硬件连接很简单,只要将8个LED指示灯接在P1口上 另一端通过220欧姆的电阻接+5V电源上,就可以了。主要靠软件控制,简单的可以使用左移或右移指令,将低电平0 逐渐移入寄存器中,即控制LED指示灯逐渐一个一个地点亮或一个一个地熄灭。复杂点: 可以进行花式流水控制。例如: 可以由两边逐渐向内点亮 然后再由内逐渐向外一个一个熄灭。 还可以由由内逐渐向两边内点亮 然后再由两边渐向内逐一个一个熄灭。在程序的实现上 可以把各种花式流水的P1口亮灭状态字 事先定义成数组 然后每隔一定的时间取出送P1口显示。 呵呵 俺只提供给你一个号的算法 程序就自己动手自立更生。
是要程序还是硬件电路?给你个程序,C51的:#include<reg52.h>#include <intrins.h>//含-crol-函数的头文件#define uint unsigned int//宏定义#define uchar unsigned charvoid delay(uint z) //延时函数 uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}void main(void)uchar temp=0xfe;//从第一个灯开始亮while(1) //循环执行下面3行代码 P0=temp; temp=_crol_(temp,1);//移位函数,执行一次移一位 delay(200); //延时 }}
/*******************************************************************//* 控制p1口的8个led发光管可实现先左移,再右移,然后全亮,再全灭,连续闪烁三次,再从右开始,依次点亮1个led灯、2个led灯、3个led灯……最后全部点亮,再全亮全灭闪烁一次。p1低电平电点亮led*//*********************************************************/#include<reg52.h> //52单片机头文件#include <intrins.h> //包含有左右循环移位子函数的库#define uint unsigned int //宏定义#define uchar unsigned char //宏定义void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms. uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }void main() //主函数 uchar a,i,j; while(1) //大循环 for(j=0;j<1;j++) a=0xfe; //赋初值 for(i=0;i<8;i++) //左移 p1=a; //点亮小灯 delay(200); //延时200毫秒 a=_crol_(a,1); //将a变量循环左移一位 } a=0x7f; for(i=0;i<8;i++) //右移 p1=a; //点亮小灯 delay(200); //延时200毫秒 a=_cror_(a,1); //将a变量循环右移一位 } } p1=0xff; //全部熄灭 for(j=0;j<6;j++) delay(300); //延时 p1=~p1; //全部取反6次,既闪烁3次 } for(i=0;i<8;i++) //右移 delay(200); //延时200毫秒 p1=0xfe<<i; //点亮小灯 } for(j=0;j<3;j++) delay(300); //延时 p1=~p1; //全部取反2次,既闪烁1次 } delay(300); }}
单片机中流水灯控制:硬件连接很简单,只要将8个LED指示灯接在P1口上 另一端通过220欧姆的电阻接+5V电源上,就可以了。主要靠软件控制,简单的可以使用左移或右移指令,将低电平0 逐渐移入寄存器中,即控制LED指示灯逐渐一个一个地点亮或一个一个地熄灭。复杂点: 可以进行花式流水控制。例如: 可以由两边逐渐向内点亮 然后再由内逐渐向外一个一个熄灭。 还可以由由内逐渐向两边内点亮 然后再由两边渐向内逐一个一个熄灭。在程序的实现上 可以把各种花式流水的P1口亮灭状态字 事先定义成数组 然后每隔一定的时间取出送P1口显示。 呵呵 俺只提供给你一个号的算法 程序就自己动手自立更生吧 满意 就选满意回答

文章TAG:单片机流水灯  单片机流水灯程序设计  
下一篇