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个发光二极管,产生流水灯的移动效果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档