51单片机常见的五种流水灯编写方式

合集下载

(完整版)51单片机流水灯程序

(完整版)51单片机流水灯程序

1.第一个发光管以间隔200ms 闪烁。

2.8 个发光管由上至下间隔1s 流动,其中每个管亮500ms, 灭500ms 。

3.8 个发光管来回流动,第个管亮100ms 。

4.用8 个发光管演示出8 位二进制数累加过程。

5.8 个发光管间隔200ms 由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms 间隔全部闪烁 5 次。

重复此过程。

6.间隔300ms 第一次一个管亮流动一次,第二次两个管亮流动,依次到8 个管亮,然后重复整个过程。

7.间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8 个全部闪烁 3 次;关闭发光管,程序停止。

1#include<reg52.h>#define uint unsigned intsbit led 仁P"0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x--) for(y=100;y>0;y--);}#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit p P1A0; uchar a;void delay(); void main() {a=0xfe;P1=a;while(1){ a=_crol_(a,1); delay();P1=a; delay();}}void delay(){uint b; for(b=55000;b>0;b--);}3#include<reg52.h>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void delay() {uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--);}void main() {uchar a,i;while(1)a=0xfe; for(i=0;i<8;i++){P1=a; delay(100); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(100); a=_cror_(a,1);4#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint a) { uint x,y; for(x=a;x>0;x--) for(y=110;y>0;y--);}void main() {uchar b;while(1){b++;P1=~b; delay(200);5#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void main() { uchar a,i,j;while(1){ for(j=0;j<2;j++){a=0xfe; for(i=0;i<8;i++){P1=a;delay(200); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(200); a=_cror_(a,1);}}P1=0xff; for(j=0;j<10;j++) {delay(300);P1=~P1;}}}void delay(){uint x,y; for(x=200;x>0;x--) for(y=110;y>0;y--); 6 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=300;x>0;x--) for(y=110;y>0;y--);} void main(){uchar a,i,j; while(1) {a=0xfe; for(j=0;j<8;j++) { for(i=0;i<8-j;i++) {P1=a; delay(200); a=_crol_(a,1);} a=_crol_(a,j); P1=0xff; a=a<<1;}} }7#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){uchar a,i,j;for(j=0;j<3;j++){P1=0x55;delay(300);P1=0xaa; delay(300);}for(j=0;j<3;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(300); a=_crol_(a,1);}}P1=0xff; for(j=0;j<3;j++){P1=0x7e;delay(300);P1=0xbd; delay(300);P1=0xdb; delay(300);P1=0xe7; delay(300);}P1=0xff;for(j=0;j<3;j++){P1=0xe7;delay(300);P1=0xdb;delay(300);P1=0xbd;delay(300);P1=0x7e;delay(300);}P1=0xff; for(j=0;j<6;j++) {P1=~P1; delay(300);}P1=0xff;while(1);}。

(完整版)51单片机流水灯程序

(完整版)51单片机流水灯程序

1.第一个发光管以间隔200ms 闪烁。

2.8 个发光管由上至下间隔1s 流动,其中每个管亮500ms, 灭500ms 。

3.8 个发光管来回流动,第个管亮100ms 。

4.用8 个发光管演示出8 位二进制数累加过程。

5.8 个发光管间隔200ms 由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms 间隔全部闪烁 5 次。

重复此过程。

6.间隔300ms 第一次一个管亮流动一次,第二次两个管亮流动,依次到8 个管亮,然后重复整个过程。

7.间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8 个全部闪烁 3 次;关闭发光管,程序停止。

1#include<reg52.h>#define uint unsigned intsbit led 仁P"0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x--) for(y=100;y>0;y--);}#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit p P1A0; uchar a;void delay(); void main() {a=0xfe;P1=a;while(1){ a=_crol_(a,1); delay();P1=a; delay();}}void delay(){uint b; for(b=55000;b>0;b--);}3#include<reg52.h>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void delay() {uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--);}void main() {uchar a,i;while(1)a=0xfe; for(i=0;i<8;i++){P1=a; delay(100); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(100); a=_cror_(a,1);4#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint a) { uint x,y; for(x=a;x>0;x--) for(y=110;y>0;y--);}void main() {uchar b;while(1){b++;P1=~b; delay(200);5#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void main() { uchar a,i,j;while(1){ for(j=0;j<2;j++){a=0xfe; for(i=0;i<8;i++){P1=a;delay(200); a=_crol_(a,1);}a=0x7f; for(i=0;i<8;i++){P1=a; delay(200); a=_cror_(a,1);}}P1=0xff; for(j=0;j<10;j++) {delay(300);P1=~P1;}}}void delay(){uint x,y; for(x=200;x>0;x--) for(y=110;y>0;y--); 6 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=300;x>0;x--) for(y=110;y>0;y--);} void main(){uchar a,i,j; while(1) {a=0xfe; for(j=0;j<8;j++) { for(i=0;i<8-j;i++) {P1=a; delay(200); a=_crol_(a,1);} a=_crol_(a,j); P1=0xff; a=a<<1;}} }7#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){uchar a,i,j;for(j=0;j<3;j++){P1=0x55;delay(300);P1=0xaa; delay(300);}for(j=0;j<3;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(300); a=_crol_(a,1);}}P1=0xff; for(j=0;j<3;j++){P1=0x7e;delay(300);P1=0xbd; delay(300);P1=0xdb; delay(300);P1=0xe7; delay(300);}P1=0xff;for(j=0;j<3;j++){P1=0xe7;delay(300);P1=0xdb;delay(300);P1=0xbd;delay(300);P1=0x7e;delay(300);}P1=0xff; for(j=0;j<6;j++) {P1=~P1; delay(300);}P1=0xff;while(1);}。

用单片机设计流水灯的方法和程序编写

用单片机设计流水灯的方法和程序编写

用单片机设计流水灯的方法和程序编写-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIANS51增强型单片机实验板上有8个高亮度发光二极管(见图1所示),可以用来做单片机流水灯、跑马灯。

等实验,电路原理图见下图3。

图3单片机流水灯设计方法从原理图可以看出,如果我们想让接在口的LED1亮起来,那么我们只要把口的电平变为低电平就可以了;相反,如果要接在口的LED1熄灭,就要把口的电平变为高电平就可以;同理,接在~口的其他7个LED的点亮和熄灭方法方法同LED1。

因此,要实现流水灯功能,我们只要将LED2~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。

实现8个LED流水灯程序用中文表示为:低、延时、高、低、延时、高、低、延时、高、低、延时、高、低、延时、高、低、延时、高、低、延时、高、低、延时、高、返回到开始、程序结束。

从上面中文表示看来实现单片机流水灯很简单,但是我们不能说你变低,它就变低了。

因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”机器代码。

我们又怎样来使单片机按我们的意思去工作呢为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。

今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。

这里的“程序语言”目前主要有汇编语言和C语言两种;在这里我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。

前面说到,要想使LED1变亮,只需将对应的单片机引脚电平变为低电平就可以了。

现在让我们将上面提到的8只LED流水灯实验写为汇编语言程序。

在上面主程序中用到了五条汇编语言指令:CLR、ACALL、SETB、LJMP、EN D。

CLR:是将其后面指定的位清为0,程序中使对应端口输出低电平ACALL:是子程序调用指令,程序中调用了DELAY延时子程序SETB:是将其后面指定的位置成1,程序中使对应端口输出高电平AJMP:是无条件跳转指令,意思是:跳转到指定的标号处继续运行END:是程序结束的伪指令,意思是告诉编译器,程序到此结束。

51单片机流水灯程序

51单片机流水灯程序

1.第一个发光管以间隔200ms闪烁。

2.8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms。

3.8个发光管来回流动,第个管亮100ms。

4。

用8个发光管演示出8位二进制数累加过程。

5。

8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。

重复此过程。

6.间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。

7。

间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。

1#include<reg52。

h〉#define uint unsigned intsbit led1=P1^0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x—-)for(y=100;y〉0;y-—);}2#include<reg52。

h>#include〈intrins。

h〉#define uint unsigned intuchar a;void delay();void main(){a=0xfe;P1=a;while(1){a=_crol_(a,1);delay();P1=a;delay();}}void delay(){uint b;for(b=55000;b>0;b—-);}3#include<reg52。

h〉#include <intrins。

h>#define uint unsigned int #define uchar unsigned char void delay(){uint x,y;for(x=100;x〉0;x--)for(y=110;y>0;y—-);}void main(){uchar a,i;while(1){a=0xfe;for(i=0;i〈8;i++){P1=a;delay(100);a=_crol_(a,1);for(i=0;i〈8;i++){P1=a;delay(100);a=_cror_(a,1);}}}4#include<reg52.h>#include 〈intrins。

多种方法写出的51单片机流水灯C语言程序

多种方法写出的51单片机流水灯C语言程序

目录流水灯最原始 (1)流水灯位左移 (3)流水灯移位函数 (4)流水灯数组 (5)流水灯精确定时器 (6)流水灯最原始#include "reg51.h"sbit p0=P1^0;sbit p1=P1^1;sbit p2=P1^2;sbit p3=P1^3;sbit p4=P1^4;sbit p5=P1^5;sbit p6=P1^6;sbit p7=P1^7;voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){while(1){P1=0;p0=1;mdelay(1000);p0=0;p1=1;mdelay(1000);p1=0;p2=1;mdelay(1000);p2=0;p3=1;mdelay(1000);p3=0;p4=1;mdelay(1000);p4=0;p5=1;mdelay(1000);p5=0;p6=1;mdelay(1000);p6=0;p7=1;mdelay(1000);p7=0;}}流水灯位左移#include "reg51.h"voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){unsigned char i;unsignedint led;while(1){led=0xfe;for(i=0;i<8;i++){P1=led;mdelay(1000);led=led<<1;led=led|0x01;}}}流水灯移位函数#include "reg51.h"#include "intrins.h"voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){unsigned char led;led=0x01;while(1){P1=led;led=_crol_(led,1);mdelay(1000);}}流水灯数组#include "reg51.h"unsigned char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){unsigned char i;while(1){for(i=0;i<8;i++){P1=table[i];mdelay(1000);}}}流水灯精确定时器#include "reg51.h"#include "intrins.h"unsignedint count=0,led;void main(){P1=0x00;led=0x01;EA=1;ET0=1;TMOD=0x01;TH0=0x3c;TL0=0xb0;TR0=1;for(;;){;}}voidbiao() interrupt 1{count++;if(count==20){count=0;P1=led;led=_crol_(led,1);}TH0=0x3c;TL0=0xb0;}。

51单片机——酷酷流水灯

51单片机——酷酷流水灯

单片机实训-----流水灯一、设计思路学习案例中的实例程序,通过对炫酷流水灯的修改,使流水灯能循环显示倒流水左移、倒流水右移、渐亮、渐暗、流水左移、流水右移、流水内外移二、程序代码#include <AT89X51.h> //头文件rlszy(); //红色流水左移声明rlsyy(); //红色流水右移声明rlsnwyd(); //红色流水内外移动声明rtbyd(); //红色跳变移动声明rjl(); //红色渐亮声明rja(); //红色渐暗声明rdlszy(); //倒流水左移函数rdlsyy(); //倒流水右移函数zkb(unsigned char d);void ys1ms(unsigned int s); //延时声明,修改s的数值,就可以改变时间main() //主函数,由于模块化设计,只要修改下面各模块的排列顺序和时间,就可以实现各种变化模式{EA=1;//打开中断,使用中断方便调试查看模式EX0=1; //允许外部中断0中断EX1=1; //允许外部中断1中断PX0=1; // 外部中断0位高优先级while(1) //无限循环{rdlszy(); //倒流水左移rja(); //渐暗P0=0xff;ys1ms(300); //延时0.3秒rdlsyy(); //倒流水右移rjl(); //渐亮rja(); //渐暗P0=0xff;ys1ms(300);rlszy(); //流水左移rja(); //渐暗ys1ms(300);rlsyy(); //流水右移rja(); //渐暗P0=0xff;ys1ms(300);rlsnwyd(); //流水内外移动P0=0xff;ys1ms(300);rtbyd(); //跳变模式P0=0xff;ys1ms(300);}}/******************************************************************** ********/rlszy() //流水左移函数{unsigned char a,i,led; //声明无字符整形变量a,i,ledled=0xfe; //左移初始值定位P0=led; //输出ys1ms(120); //延时for(i=1;i<8;i++) //设置移动7次{a=led<<i;//灯左移i位P0=a; //依次点亮ys1ms(120);}}/******************************************************************** *******/rlsyy() //流水右移函数{unsigned char a,i,led; //声明无字符整形变量a,i,ledled=0x7f; //左移初始值定位P0=led; //输出ys1ms(120); //延时for(i=1;i<8;i++) //设置移动7次{a=led>>i;//灯右移i位P0=a; //依次点亮ys1ms(120);}}/***************************************************************************/rdlszy() //倒流水左移函数{P0=0xfe;ys1ms(60);P0=0xfd;ys1ms(60);P0=0xfb;ys1ms(60);P0=0xf7;ys1ms(60);P0=0xef;ys1ms(60);P0=0xdf;ys1ms(60);P0=0xbf;ys1ms(60);P0=0x7f;ys1ms(60);P0=0x7e;ys1ms(60);P0=0x7d;ys1ms(60);P0=0x7b;ys1ms(60);P0=0x6f;ys1ms(60);P0=0x5f;ys1ms(60);P0=0x3f;ys1ms(60);P0=0x3d;ys1ms(60);P0=0x3b;ys1ms(60);P0=0x37;ys1ms(60);P0=0x2f;ys1ms(60);P0=0x1f;ys1ms(60);ys1ms(60);P0=0x1d;ys1ms(60);P0=0x1b;ys1ms(60);P0=0x17;ys1ms(60);P0=0x0f;ys1ms(60);P0=0x0e;ys1ms(60);P0=0x0d;ys1ms(60);P0=0x0b;ys1ms(60);P0=0x07;ys1ms(60);P0=0x06;ys1ms(60);P0=0x05;ys1ms(60);P0=0x04;ys1ms(60);P0=0x03;ys1ms(60);P0=0x02;ys1ms(60);P0=0x01;ys1ms(60);P0=0x00;}/******************************************************************** *******/rdlsyy() //倒流水右移函数,参考上面左移{P0=0x7f;ys1ms(60);P0=0xbf;ys1ms(60);ys1ms(60); P0=0xef; ys1ms(60); P0=0xf7; ys1ms(60); P0=0xfb; ys1ms(60); P0=0xfd; ys1ms(60); P0=0xfe; ys1ms(60);P0=0x7e; ys1ms(60); P0=0xbe; ys1ms(60); P0=0xde; ys1ms(60); P0=0xee; ys1ms(60); P0=0xf6; ys1ms(60); P0=0xfa; ys1ms(60);P0=0x7c; ys1ms(60); P0=0xbc; ys1ms(60); P0=0xdc; ys1ms(60); P0=0xec; ys1ms(60); P0=0xf4; ys1ms(60); P0=0xf8; ys1ms(60); P0=0x78; ys1ms(60); P0=0xb8; ys1ms(60); P0=0xd8;P0=0xe8;ys1ms(60);P0=0xf0;ys1ms(60);P0=0x70;ys1ms(60);P0=0xb0;ys1ms(60);P0=0xd0;ys1ms(60);P0=0xe0;ys1ms(60);P0=0x60;ys1ms(60);P0=0xa0;ys1ms(60);P0=0xc0;ys1ms(60);P0=0x40;ys1ms(60);P0=0x80;ys1ms(60);P0=0x01;ys1ms(60);P0=0x00;}/******************************************************************** ********/rlsnwyd() //红色流水内外移动函数{P0=0xe7;//ys1ms(90);P0=0xc3;ys1ms(90);P0=0x81;ys1ms(90);P0=0x00;rja();P0=0x7e;ys1ms(90);P0=0x3c;ys1ms(90);P0=0x18;ys1ms(90);P0=0x00;rja();}/******************************************************************** ********/rtbyd() //红色跳变8模式移动函数{P0=0x1f;ys1ms(180);P0=0xff;ys1ms(120);P0=0xf8;ys1ms(180);P0=0xff;ys1ms(120);P0=0xe7;ys1ms(180);P0=0xff;ys1ms(300);/******************************************************************** ********/P0=0xfc;ys1ms(180);P0=0xff;ys1ms(120);P0=0x3f;ys1ms(180);P0=0xff;ys1ms(300);/******************************************************************** ********/P0=0x3c;ys1ms(180);P0=0xff;ys1ms(120);P0=0x3c;ys1ms(180);P0=0xff;ys1ms(300);/******************************************************************** ********/P0=0xc3;ys1ms(120);P0=0xff;ys1ms(120);P0=0xc3;ys1ms(120);P0=0xff;ys1ms(120);/******************************************************************** ********/P0=0xf0;ys1ms(180);P0=0xff;ys1ms(120);P0=0xf0;ys1ms(180);P0=0xff;ys1ms(300);/******************************************************************** ********/P0=0xc3;ys1ms(180);P0=0xff;ys1ms(120);P0=0xc3;ys1ms(300);/******************************************************************** ********/P0=0x0f;ys1ms(180);P0=0xff;ys1ms(120);P0=0x0f;ys1ms(180);P0=0xff;ys1ms(300);/******************************************************************** ********/rjl();P0=0x00;ys1ms(100);P0=0xff;ys1ms(35);P0=0x00;ys1ms(100);P0=0xff;ys1ms(35);P0=0x00;ys1ms(100);P0=0xff;ys1ms(35);P0=0x00;ys1ms(100);P0=0xff;ys1ms(35);P0=0x00;ys1ms(100);P0=0xff;ys1ms(35);rja();ys1ms(180);P0=0xff;}/**************单片机晶振为11.0592兆的1毫秒延时*************************/void ys1ms(unsigned int s) //定时器精确延时1毫秒函数,改变S数值即改变时间{TR0=1;while(s!=0){TH0=-(7629/256);TL0=-(7629%256);while(TF0!=1);TF0=0;s--;}TR0=0;}/******************************************************************** *********/int0_srv() interrupt 0 using 2 //外中断函数{unsigned char n,m; //声明无字符整形变量a和bunsigned int i; //声明无字符整形变量ifor(i=0;i<5000;i++); //延时50毫秒,防抖动if (INT0==0) //暂停{n=P0; //保留状态m=P2;P3=0xfb; //保持暂停状态}if(INT1==0) //继续运行{P3=0xff; //释放暂停状态P0=n; //恢复运行P2=m;}}/******************************************************************** ********/rjl() //渐亮函数{unsigned char a, b;//a控制延时长度b控制循环周期P0 = 0xff;a = 0;for (b=250; b>0; b--) //循环周期设置{a++;zkb (a); //延时长度随a而改变P0 = 0xff;a = ~a; //a值取反,决定灯灭时的占空比zkb (a);P0 = 0x00;a = ~a; //a值取反使a回到原值继续循环}}/******************************************************************** ********/rja() //渐暗函数{unsigned char a, b;//a控制延时长度b控制循环周期P0 = 0x00; //亮起LEDa = 0;for (b=250; b>0; b--){a++;zkb (a);P0 = 0x00;a = ~a;zkb (a);P0 = 0xff;a = ~a;}}/******************************************************************** ********/zkb(unsigned char d) //占空比函数,由d决定延时长度{unsigned char i;while( --d != 0){for(i = 0; i < 1; i++); //占空比时间设置}}/******************************************************************** ********/三、实验结果流水灯能循环显示倒流水左移、倒流水右移、渐亮、渐暗、流水左移、流水右移、流水内外移,具体视频见实验结果视频文件夹。

51单片机爱心流水灯原理及制作

51单片机爱心流水灯原理及制作

电路原理图:原件清单:1、51单片机x1、40Pin 座x12、LED x32(建议用5mm 七彩的)3、电阻470Ωx334、晶振12MHz x15、10uf 电解电容x1、谐振瓷片电容30pf x26·其他的可以看自己的爱好去加7、其实也可以不用那么多的电阻,用几个排阻就OK了。

~效果展示:作品程序:#include<>#define uchar unsigned char;uchar flag=200;///////////////////////////////////////////////////////////////////////uchar code Tab1[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF};//暗中左移向下uchar code Tab2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};//暗中右移向上uchar code Tab3[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};//亮中左移向下uchar code Tab4[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00};//亮中右移向上uchar code Tab11[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xff};//暗中左移向下uchar code Tab22[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xff};////////////////////////////////////////////////////////////////////uchar code Tab33[]={0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};;uchar code Tab44[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};uchar code Tab55[]={0x08,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff};uchar code Tab5[]={0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xff};uchar code Tab6[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xff}; uchar code Tab7[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; uchar code Tab8[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};////////////////////////////////////////////////////////////////void shansuo();void xl();///////////////////////////////////////////////////////////////}void delay(void){unsigned char m,n;for(m=0;m<flag;m++)for(n=0;n<250;n++);}///////////////////////////////////void hy1(void) //点亮状态逆时针旋转90度(一个一个灭){.unsigned char i;for(i=0;i<8;i++){P0=Tab11[i];P1=Tab22[i];P2=Tab11[i];P3=Tab22[i];delay();}for(i=0;i<8;i++){P0=Tab44[i];P1=Tab55[i];!P2=Tab44[i];P3=Tab55[i];delay();}}///////////////////////////////////////////void hy2(void) //暗中逆时针转360。

最经典的51单片机经典流水灯汇编程序

最经典的51单片机经典流水灯汇编程序

单片机流水灯汇编程序设计开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。

程序A:;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#01111111B ;最下面的LED点亮LCALL DELAY;延时1秒MOV P1,#10111111B ;最下面第二个的LED点亮LCALL DELAY;延时1秒MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略)LCALL DELAYMOV P1,#11101111BLCALL DELAYMOV P1,#11110111BLCALL DELAYMOV P1,#11111011BLCALL DELAYMOV P1,#11111101BLCALL DELAYMOV P1,#11111110BLCALL DELAYMOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETEND程序B:;用移位方式实现流水灯org 00h ;程序上电从00h开始ajmp main ;跳转到主程序org 0030h ;主程序起始地址main:mov a,#0feh ;给A赋值成11111110loop:mov p1,a ;将A送到P1口,发光二极管低电平点亮lcall delay ;调用延时子程序rl a ;累加器A循环左移一位ajmp loop ;重新送P1显示delay:mov r3,#20 ;最外层循环二十次d1:mov r4,#80 ;次外层循环八十次d2:mov r5,#250 ;最内层循环250次djnz r5,$ ;总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。

基于C51单片机4按键4种花样流水灯设计

基于C51单片机4按键4种花样流水灯设计
}
}
if(k4==0){
delay(10);
if(k4==0){
flag1=0;
flag2=0;
flag3=0;
flag4=1;
}
}
}
/**************主程序************************/
void main() {
while(1)
{keyscan();
if(flag1==1){
void delay(uint x)
{
uint i;
while(x--)
for(i=50;i>0;i--);
}
/******************判断按键***********************/
void keyscan()
{ if(k1==0)
{delay(10);
if(k1==0)
{
flag2=0;
基于c51单片机4按键4种花样流水灯设计单片机流水灯电路图单片机流水灯程序单片机流水灯按键控制流水灯单片机按键消抖程序单片机按键程序单片机按键控制led单片机按键电路单片机独立按键程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/************************流水灯花样设计********************/
uchar table1[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfc,0xff};/***从右到左逐一点亮反向灭之**/

51单片机爱心流水灯原理及制作

51单片机爱心流水灯原理及制作

51单片机爱心流水灯原理及制作引言:在现代科技发展的背景下,电子产品已经成为我们生活中不可或者缺的一部份。

而作为电子制作的入门级项目,流水灯因其简单而受到泛博爱好者的爱慕。

本文将介绍使用51单片机制作爱心流水灯的原理及制作过程。

1. 原理介绍:爱心流水灯是一种特殊的流水灯效果,通过控制LED灯的亮灭顺序和时间间隔,形成一个爱心图案在LED灯带上流动的效果。

其原理基于51单片机的GPIO (通用输入输出)口控制LED灯的亮灭,通过改变LED灯的状态来实现流动效果。

2. 材料准备:制作爱心流水灯所需的材料如下:- 51单片机开辟板- LED灯带- 面包板- 杜邦线- 电阻- 电容- 电源适配器3. 硬件连接:首先,将51单片机开辟板和面包板连接起来。

然后,将LED灯带连接到面包板上,确保正极和负极正确连接。

接下来,通过杜邦线将51单片机的GPIO口与LED灯带连接起来。

最后,将电阻和电容连接到电路中,以保护电路免受过电流和过电压的伤害。

4. 软件编程:使用Keil C编译器进行软件编程。

首先,需要定义LED灯带的控制引脚,并初始化为输出模式。

然后,编写程序来控制LED灯的亮灭顺序和时间间隔。

在本例中,我们将使用循环语句和延时函数来实现流水灯效果。

通过改变LED灯的状态和延时时间,可以形成一个爱心图案在LED灯带上流动的效果。

5. 程序调试:将编写好的程序下载到51单片机开辟板上,并连接电源适配器。

打开开关,LED灯带上的爱心流水灯效果就会开始显示出来。

如果浮现问题,可以通过调试程序和检查硬件连接来解决。

6. 制作扩展:如果你对爱心流水灯的效果满意,你还可以进一步扩展你的制作。

例如,你可以添加一个按键来控制流水灯的启停,或者通过蓝牙模块和手机APP来远程控制流水灯的效果。

这些扩展可以增加你的制作的趣味性和创造性。

结论:通过本文的介绍,我们了解了51单片机爱心流水灯的原理及制作过程。

通过硬件连接和软件编程,我们可以制作出一个具有特殊效果的流水灯。

基于51单片机的流水灯设计

基于51单片机的流水灯设计

基于51单⽚机的流⽔灯设计基于51单⽚机的流⽔灯设计⼀.基本功能利⽤AT89c51作为主控器组成⼀个LED流⽔灯系统,实现8个LED 灯的左、右循环显⽰。

⼆.硬件设计图1.总设计图1.单⽚机最⼩系统1.1选⽤AT89C51的引脚功能图2. AT89C51XTAL1:单芯⽚系统时钟的反向放⼤器输⼊端。

XTAL2:系统时钟的反向放⼤器输出端,⼀般在设计上只要在XTAL1和XTAL2上接上⼀只⽯英震荡晶体系统就可以⼯作了,此外可以在两引脚与地之间加⼊20PF的⼩电容,可以使系统更稳定,避免噪⾳⼲扰⽽死机。

RESET:重置引脚,⾼电平动作,当要对晶体重置时,只要对此引脚电平提升⾄⾼电平并保持两个及其周期以上的时间便能完成系统重置的各项动作,使得内部特殊功能寄存器内容均被设成已知状态。

P3:端⼝3是具有内部提升电路的双向I/O端⼝,通过控制各个端⼝的⾼低电平了实现LED流⽔灯的控制。

1.2复位电路如图所⽰,当按下按键时,就能完成整个系统的复位,使得程序从新运⾏。

图3.复位电路1.3时钟电路时钟电路⽤于产⽣单⽚机⼯作所需要的时钟信号,单⽚机本⾝就是⼀个复杂的同步时序电路,为了保证同步⼯作⽅式的实现,电路应在唯⼀的时钟信号控制下严格地按时序进⾏⼯作。

在AT89C51芯⽚内部有⼀个⾼增益反相放⼤器,其输⼊端为芯⽚引脚X1,输出端为引脚X2,在芯⽚的外部跨接晶体振荡器和微调电容,形成反馈电路,就构成了⼀个稳定的⾃激振荡器。

此电路采⽤12MHz的⽯英晶体。

图4.时钟电路2.流⽔灯部分图5.流⽔灯电路三.软件设计3.1编程语⾔及编程软件的选择本设计选择C语⾔作为编程语⾔。

C语⾔虽然执⾏效率没有汇编语⾔⾼,但语⾔简洁,使⽤⽅便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计⾃由度⼤,有很好的可重⽤性,可移植性等特点。

⽽汇编语⾔使⽤起来并没有这么⽅便。

本设计选⽤了Keil作为编程软件,.Keil C51⽣成的⽬标代码效率⾮常之⾼,多数语句⽣成的汇编代码很紧凑,容易理解。

stc89c51单片机流水灯程序

stc89c51单片机流水灯程序

stc89c51单片机流水灯程序51单片机流水灯程序程序一(用C语言编的最基础的程序)#include<reg52.h>#include<stdio.h>sbit D0=P1^0;//位定义,把P1口的第一个管脚定义为D0sbit D1=P1^1;// 位定义,把P1口的第二个管脚定义为D1sbit D2=P1^2;// 位定义,把P1口的第3个管脚定义为D2sbit D3=P1^3;// 位定义,把P1口的第4个管脚定义为D3sbit D4=P1^4;// 位定义,把P1口的第5个管脚定义为D4sbit D5=P1^5;// 位定义,把P1口的第6个管脚定义为D5sbit D6=P1^6;// 位定义,把P1口的第7个管脚定义为D6sbit D7=P1^7;// 位定义,把P1口的第8个管脚定义为D7void main(){sbit d8=P1^7;void main(){unsigned int i=1,a,b; while(1)//大循环{for(i=1;i<15;i++){for(a=0;a<80;a++)//延时。

for(b=0;b<200;b++);switch(i){case 1:d2=1,d1=0,d8=1;break;case 2:d1=1,d2=0;break;case 3:d2=1,d3=0;break;case 4:d3=1,d4=0; break; case 5:d4=1,d5=0; break; case 6:d5=1,d6=0; break; case 7:d6=1,d7=0; break; case 8:d7=1,d8=0; break; case 9:d8=1,d7=0; break; case 10:d7=1,d6=0; break; case 11:d6=1,d5=0;break;case 12:d5=1,d4=0;break;case 13:d4=1,d3=0;break;case 14:d3=1,d2=0;break;}};}}程序三(最简洁的):#include<reg52.h>#include<intrins.h>//_crol_和_cror_的头文件。

51单片机经典流水灯程序

51单片机经典流水灯程序

单片机流水灯汇编程序设计开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。

程序A:;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#B ;最下面的LED点亮LCALL DELAY;延时1秒MOV P1,#B ;最下面第二个的LED点亮LCALL DELAY;延时1秒MOV P1,#B ;最下面第三个的LED点亮(以下省略)LCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#B ;完成第一次循环点亮,延时约0.25秒AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETEND程序B:;用移位方式实现流水灯ajmp main ;跳转到主程序org 0030h ;主程序起始地址main:mov a,#0feh ;给A赋值成loop:mov p1,a ;将A送到P1口,发光二极管低电平点亮lcall delay ;调用延时子程序rl a ;累加器A循环左移一位ajmp loop ;重新送P1显示delay:mov r3,#20 ;最外层循环二十次d1:mov r4,#80 ;次外层循环八十次d2:mov r5,#250 ;最内层循环250次djnz r5,$ ;总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。

ORG 0;程序从0地址开始START: MOV A,#0FEH ;让ACC的内容为LOOP: MOV P2,A ;让P2口输出ACC的内容RR A;让ACC的内容左移CALL DELAY ;调用延时子程序LJMP LOOP ;跳到LOOP处执行;0.1秒延时子程序(12MHz晶振)===================DELAY: MOV R7,#200 ;R7寄存器加载200次数D1: MOV R6,#250 ;R6寄存器加载250次数DJNZ R6,$ ;本行执RET;返回主程序END;结束程序开关控制的单片机流水灯汇编在单片机控制下,用一个拨动开关K1,控制8个发光二极管L1-L8,发光的时间间隔为0.5秒。

51单片机爱心流水灯原理及制作

51单片机爱心流水灯原理及制作

电路原理图:原件清单:1、51单片机x1、40Pin 座x12、LED x32(建议用5mm 七彩的)3、电阻470Ωx334、晶振12MHz x15、10uf 电解电容x1、谐振瓷片电容30pf x26·其他的可以看自己的爱好去加7、其实也可以不用那么多的电阻,用几个排阻就OK了。

效果展示:作品程序:#include<reg52.h>#define uchar unsigned charuchar flag=200;///////////////////////////////////////////////////////////////////////uchar code Tab1[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF};//暗中左移向下uchar code Tab2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};//暗中右移向上uchar code Tab3[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};//亮中左移向下uchar code Tab4[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00};//亮中右移向上uchar code Tab11[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xff};//暗中左移向下uchar code Tab22[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xff};////////////////////////////////////////////////////////////////////uchar code Tab33[]={0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};uchar code Tab44[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};uchar code Tab55[]={0x08,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff};uchar code Tab5[]={0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xff};uchar code Tab6[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xff};uchar code Tab7[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar code Tab8[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; ////////////////////////////////////////////////////////////////void shansuo();void xl();///////////////////////////////////////////////////////////////void delay(void){unsigned char m,n;for(m=0;m<flag;m++)for(n=0;n<250;n++);}///////////////////////////////////void hy1(void) //点亮状态逆时针旋转90度(一个一个灭){unsigned char i;for(i=0;i<8;i++){P0=Tab11[i];P1=Tab22[i];P2=Tab11[i];P3=Tab22[i];delay();}for(i=0;i<8;i++){P0=Tab44[i];P1=Tab55[i];P2=Tab44[i];P3=Tab55[i];delay();}}///////////////////////////////////////////void hy2(void) //暗中逆时针转360。

51单片机常见的五种流水灯编写方式

51单片机常见的五种流水灯编写方式

For personal use only in study and research; not for commercial use51单片机常见的五种流水灯编写方式通过改变赋值实现流水灯void main(){while(1){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);}}通过公式运算实现流水灯void main(){while(1){uint a,b=1;P2=0xfe;delayms(500);for(a=0;a<7;a++){P2-=b; // P2=P2-bdelayms(500);b=b*2; //都化为同一类型进制运算}}}通过操作符<<与“|”实现流水灯(通过移位实现流水灯)void main(){uchar a,i;while(1){a=0xfe; //点亮第一位LED灯for(i=0;i<8;i++){P2=a;a=a<<1; //左移一位a=a|0x01; //左移一位后与0x01相或,保证左移后最低位为1 delay_ms(500);}}}通过库函数_crol_(字符左移)实现流水灯void main(){uint a;a=0xfe;while(1){P2=a;a=_crol_(a,1);delay_ms(500);}}采用数组实现流水灯uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void main(void){uchar i;while (1){for(i=0;i<8;i++) //循环点亮8只LED灯{P2=table[i];delay_ms(500); //延时500毫秒}}}For personal use only in study and research; not for commercial use.Nur für den persönlichen für Studien, Forschung, zu kommerziellen Zwecken verwendet werden.Pour l 'étude et la recherche uniquement à des fins personnelles; pas à des fins commerciales.толькодля людей, которые используются для обучения, исследований и не должны использоваться в коммерческих целях.以下无正文For personal use only in study and research; not for commercial use.Nur für den persönlichen für Studien, Forschung, zu kommerziellen Zwecken verwendet werden.Pour l 'étude et la recherche uniquement à des fins personnelles; pas à des fins commerciales.толькодля людей, которые используются для обучения, исследований и не должны использоваться в коммерческих целях.以下无正文。

单片机-流水灯的程序

单片机-流水灯的程序

void main() {
Led = 0xfe; while(1) { P2 = Led;
for(i=1;i<800;i++) for(j=1;j<800;j++); Led = Led << 1; if(P2 == 0x00 ) {Led = 0xfe; } } }
方法四:利用移位操作实现流水灯(8位二极管循环点亮)
假设机器字长为8位,变量a的值为16,将a左移二位,即 a=a<<2: 左移前 0001 0000
左移后 0100 0000
由此看出,左移一位相当于该数乘2,左移二位相当于乘4 ,即22,但这要以该数左移之后不“溢出”为前提。所谓“溢出 ”指该数已超过机器字长所能容纳的范围,如该例若继续左移二 位,该数为16× 24=256,超出了字长8位的表示范围(257),
void main() { while(1) {
led1=0; delay(120);
led2=0; delay(120);
led3=0; delay(120);
led4=0; delay(120);
led5=0 ; delay(120);
led6=0; delay(120);
led7=0; delay(120);
即产生了溢出。
二、按位右移
按位右移是将一个运算量的各位依次右移若干位, 低位被移出,高位对无符号数补0,对有符号数要按最 高符号位自身填补。
右移一位相当于该数除以2,但有可能带来误差。假设机器 字长为8位,变量a值为15,将a右移二位,即a=a>>2:
右移前 0000 1111
右移后 0000 0011
单片机-流水灯的程序
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档