32路流水灯完美版源代码 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个发光二极管,产生流水灯的移动效果。
51单片机流水灯C程序
P0口控制,先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;不过这个程序实现的应该是这样的先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动;再从中间往两边流动(延时0."1s)#include<reg52."h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharvoiddelay();voidmain(){uchartemp,temp1,temp2,a,b;while(1){for(b=3;b>0;b--){temp=0xaa;P0=temp;delay();temp=0x55;P0=temp;delay();}for(a=3;a>0;a--){temp=0xfe;for(b=7;b>0;b--){P0=temp;temp=_crol_(temp,1);delay();P0=temp;delay();}}temp1=0xfe;temp2=0x7f;for(a=8;a>0;a--){temp=temp1&temp2;P0=temp;delay();temp1=_crol_(temp1,1);temp2=_cror_(temp2,1);}}}voiddelay(){uinta,b;for(a=100;a>0;a--)for(b=100;b>0;b--);}程序实现的第2种方法:实现单片机led流水灯从中间向两边,从两边向中间的效果,下面的程序就是实现思路,这个是直接调用,应该明白吧,数组那其实也可以改一下,如采用一维数组,在多次调用;也可以采用二维数组。
-----------------------------------------------------#include<reg#defineuintunsignedint#defineucharunsignedcharucharTABLE[]={0xFF,0xE7,0xC3,0x81,0x00,//从中间向两侧点亮0xFF,0xE7,0xC3,0x81,0x00,0xFF,0xE7,0xC3,0x81,0x00,0xFF,0x7E,0x3C,0x18,0x00,//从两侧向中间点亮0xFF,0x7E,0x3C,0x18,0x00,0xFF,0x7E,0x3C,0x18,0x00};uchari;DELAY(){uints;for(s=0;s<300;s++);}main(){while(1){if(TABLE[i]!=0x01&TABLE[i]!=0x33){P0=TABLE[i]; i++;DELAY();}else{i=0;}}}*程序详细功能介绍:*利用取表的方法,使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0."2秒)。
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。
C51单片机实现呼吸灯和花样流水灯程序
C51单⽚机实现呼吸灯和花样流⽔灯程序1.⽤C51单⽚机实现花样流⽔灯,代码如下:#include <reg52.h>#define LED_A P1 //led灯所⽤的接⼝,是哪个⼝就写P⼏void delayms(){unsigned char x = 0; unsigned char i;unsigned char y = 0;while(y < 0.001) //定义led灯的切换的延时时间,越⼩越快。
{ //(y < 0.001);(x<100);(i<100)都可以修改x = 0;while(x<100){i = 0;while(i<100){i++;}x++;}y++;}}#define LED_NUM 8 //定义led灯的数量,可快速实现不同⽤途的修改;void main(){unsigned char k;unsigned char j;unsigned char LED_ALL[] = {0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F}; //led灯亮灭的⼗六进制数组;unsigned char LED_ALL_2[] = {0XFC,0XF3,0XCF,0X3F}; while(1) { for(k=0;k<3;k++) //第⼀个for实现奇偶灯交叉闪烁三次,想闪烁⼏次就修改(K<3)中的数值; { LED_A = 0xAA; delayms(); LED_A = 0x55; delayms(); } for(k=3;k>0;k--) //实现⼀个流⽔灯左右三次(从左到右再从右到左算⼀次); { for(j=0;j<LED_NUM;j++) { LED_A = LED_ALL[j]; delayms(); } for(j=6;j>0;j--) { LED_A = LED_ALL[j]; delayms(); } } for(k=0;k<3;k++) //实现前四个灯亮后四个灯灭,交叉闪烁3次,修改次数同上; { LED_A = 0xf0; delayms(); LED_A = 0xf; delayms(); } for(k=3;k>0;k--) //实现两个灯依次流⽔3次; { for(j=0;j<4;j++) { LED_A = LED_ALL_2[j]; delayms(); } for(j=2;j>0;j--) { LED_A = LED_ALL_2[j]; delayms(); } } }}2.实现第⼀个灯呼吸,由暗变亮,再由亮变暗,程序如下;#include <reg52.h>sbit LED1 = P3^0;void delay(unsigned int a) //定义⼀个延时函数{ while(--a);}void main(){ unsigned int t,circle=800; //定义变量,circle=800为led灯呼吸的间隔长短,数值越⼩,间隔越短。
多种方法写出的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单片机经典流水灯汇编程序
单片机流水灯汇编程序设计开发板上的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个发光二极管,产生流水灯的移动效果。
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单片机经典流水灯汇编程序
单片机流水灯汇编程序设计开发板上的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个发光二极管,产生流水灯的移动效果。
完整word版,C51单片机实行流水灯程序
#include<reg51.h>#define LEDPort P1unsigned char LED01_[9]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,};//方式0,方式1灯开关数组。
unsigned char LED23_[5]={0xFF,0x7E,0xBD,0xDB,0xE7};// 方式2,方式3灯开关数组。
unsigned char LED4_[16]={0XFF,0X7F,0X3F,0X1F,0X0F,0X07,0X03,0X01,0X00,0X01,0X03,0X07,0X0f,0X1 f,0X3f,0X7f}; //方式4unsigned char LED56_[8]={0XFF,0X3F,0X9F,0XCF,0XE7,0XF3,0XF9,0XFC};unsigned char LED7_[]={0X0F,0XF0,0X33,0XCC,0X3C,0XC3,0XFF};unsigned char TAB[9]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80};//定义断码表。
unsigned char i=0,j=9; //数据选择计数。
unsigned char Mode=0; //模式选择,默认为模式0。
unsigned char Count=1; //定时器中断计数。
unsigned char Delay=1; //延迟计数,通过改变改数值改变灯状态延迟时间。
//灯延迟时间=uc_Dalay*定时器溢出时间。
void main(){ P2=0X3F;TMOD=0x01; //定时器0模式一。
TH0=0x3C;TL0=0xB0; //溢出时间:50ms。
TR0=1; //定时器0开启。
IT0=1; //外部中断0下降沿触发。
IT1=1; //外部中断1下降沿触发。
32位流水灯程序
耗时两天,终于写完32位流水灯的程序,建议用stc89c58的芯片,因为有16.16K,原理图网上很多的。
祝你们好运!#include<reg52.h>typedef unsigned char uint8;typedef unsigned int uint16;typedef unsigned long uint32;uint8 code table0[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //由低位到高位;uint8 code table1[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE}; //由高位到低位;uint8 code table2[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00}; //一个亮到八个亮,低位到高位渐亮;uint8 code table3[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00}; //一个亮到八个亮,高位到低位渐亮;uint8 code table4[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; //八个亮到一个亮,低位到高位;uint8 code table5[]={0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF}; //八个亮到一个亮,高位到低位;uint8 code table6[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //一个灯移位,低位到高位;uint8 code table7[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //一个灯移位,高位到低位;uint8 code table8[]={0x01,0x03,0x06,0x0C,0x18,0x30,0x60,0xC0,0x80}; //两个灯的移位,低位到高位;uint8 code table9[]={0x80,0xC0,0x60,0x30,0x18,0x0C,0x06,0x03,0x01}; //两个灯的移位,高位到低位;void delay(uint16 time){uint16 i,j;for(i=0;i<=time;i++)for(j=0;j<5;j++);}uint16 i,j;void disp0() //逆时针四灯旋转{ for(i=0;i<8;i++){P0=table0[i];P1=table1[i];P2=table1[i];P3=table1[i];delay(1000);}}void disp1() //顺时针四灯旋转{for(i=0;i<8;i++){P2=table0[i];P3=table0[i];P1=table0[i];P0=table1[i];delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;}void disp2() //逆时针旋转{for(i=0;i<8;i++) {P0=table1[i];delay(1000);} P0=0xFF;for(i=0;i<8;i++) {P1=table0[i];delay(1000);} P1=0xFF;for(i=0;i<8;i++) {P3=table0[i];delay(1000);} P3=0xFF;for(i=0;i<8;i++) {P2=table0[i];delay(1000);} P2=0xFF;}void disp3 () //顺时针旋转{for(i=0;i<8;i++) {P2=table1[i];delay(1000);} P2=0xFF;for(i=0;i<8;i++) {P3=table1[i];delay(1000);} P3=0xFF;for(i=0;i<8;i++) {P1=table1[i];delay(1000);} P1=0xFF;for(i=0;i<8;i++) {P0=table0[i];delay(1000);} P0=0xFF;}void disp4() //上到下的逐个点亮{for(i=0;i<8;i++) {P0=table1[i];P2=table1[i];delay(1000);} P0=0xFF;P2=0xFF;for(i=0;i<8;i++) {P1=table0[i];P3=table1[i];delay(1000);} P1=0xFF;P3=0xFF; }void disp5() //下到上的逐个点亮{for(i=0;i<8;i++) {P1=table1[i];P3=table0[i];delay(1000);} P1=0xFF;P3=0xFF;for(i=0;i<8;i++) {P0=table0[i];P2=table0[i];delay(1000);} P0=0xFF;P2=0xFF;}void disp6() //左右分别从一个亮到全亮{for(i=0;i<8;i++) {P0=table3[i];P2=table3[i];delay(1000);} P0=0x00;P1=0x00;for(i=0;i<8;i++) {P1=table2[i];P3=table3[i];delay(1000);} P1=0x00;P3=0x00; }void disp7() //左右分别八个全亮到一个都不亮{for(i=0;i<9;i++){P3=table4[i];P1=table5[i];P0=0x00;P2=0x00;delay(1000);}P3=0xFF;P1=0xFF;for(i=0;i<9;i++) {P2=table4[i];P0=table4[i];delay(1000);}}void disp8() //逆时针全部点亮{for(i=0;i<8;i++) {P0=table3[i];delay(1000);}for(i=0;i<8;i++) {P1=table2[i];delay(1000);}for(i=0;i<8;i++) {P3=table2[i];delay(1000);}for(i=0;i<8;i++) {P2=table2[i];delay(1000);}}void disp9() //顺时针全部熄灭{for(i=0;i<9;i++) {P2=table5[i];delay(1000);}for(i=0;i<9;i++) {P3=table5[i];delay(1000);}for(i=0;i<9;i++) {P1=table5[i];delay(1000);}for(i=0;i<9;i++) {P0=table4[i];delay(1000);}}void disp10() //顺时针全部点亮{for(i=0;i<8;i++) {P2=table3[i];delay(1000);}for(i=0;i<8;i++) {P3=table3[i];delay(1000);}for(i=0;i<8;i++) {P1=table3[i];delay(1000);}for(i=0;i<8;i++) {P0=table2[i];delay(1000);}}void disp11() //逆时针全部熄灭{for(i=0;i<9;i++) {P0=table5[i];delay(1000);}for(i=0;i<9;i++) {P1=table4[i];delay(1000);}for(i=0;i<9;i++) {P3=table4[i];delay(1000);}for(i=0;i<9;i++) {P2=table4[i];delay(1000);}}void disp12() //一个灯亮到16灯亮,之后灭,追逐式,逆时针{for(i=0;i<8;i++) {P0=table3[i];delay(1000);}for(i=0;i<8;i++) {P1=table2[i];delay(1000);}P0=0x00;P1=0x00;delay(3000);for(i=0;i<9;i++) {P0=table5[i];delay(1000);}for(i=0;i<9;i++) {P1=table4[i];delay(1000);}//************************************************for(i=0;i<8;i++) {P3=table2[i];delay(1000);}for(i=0;i<8;i++) {P2=table2[i];delay(1000);}P3=0x00;P2=0x00;delay(3000);for(i=0;i<9;i++) {P3=table4[i];delay(1000);}for(i=0;i<9;i++) {P2=table4[i];delay(1000);}}void disp13() //一个灯亮到16灯亮,之后灭,追逐式,顺时针{for(i=0;i<8;i++) {P2=table3[i];delay(1000);}for(i=0;i<8;i++) {P3=table3[i];delay(1000);}P2=0x00;P3=0x00;delay(3000);for(i=0;i<9;i++) {P2=table5[i];delay(1000);}for(i=0;i<9;i++) {P3=table5[i];delay(1000);}//*************************************************** for(i=0;i<8;i++) {P1=table3[i];delay(1000);}for(i=0;i<8;i++) {P0=table2[i];delay(1000);}P1=0x00;P0=0x00;delay(3000);for(i=0;i<9;i++) {P1=table5[i];delay(1000);}for(i=0;i<9;i++) {P0=table4[i];delay(1000);}}void disp14() //一个灯亮到16个灯亮,追逐式,逆时针{for(i=0;i<8;i++) {P0=table3[i];delay(1000);}for(i=0;i<8;i++) {P1=table2[i];delay(1000);}P0=0xFF;P1=0xFF;for(i=0;i<8;i++) {P3=table2[i];delay(1000);}for(i=0;i<8;i++) {P2=table2[i];delay(1000);}P2=0xFF;P3=0xFF;}void disp15() //一个灯亮到16个灯亮,追逐式,顺时针{for(i=0;i<8;i++) {P2=table3[i];delay(1000);}for(i=0;i<8;i++) {P3=table3[i];delay(1000);}P2=0xFF;P3=0xFF;for(i=0;i<8;i++) {P1=table3[i];delay(1000);}for(i=0;i<8;i++) {P0=table2[i];delay(1000);}P0=0xFF;P1=0xFF;}void disp16() //一个灯亮到八个灯亮,追逐式,逆时针{for(i=0;i<8;i++) {P0=table3[i];delay(1000);} P0=0xFF;for(i=0;i<8;i++) {P1=table2[i];delay(1000);} P1=0xFF;for(i=0;i<8;i++) {P3=table2[i];delay(1000);} P3=0xFF;for(i=0;i<8;i++) {P2=table2[i];delay(1000);} P2=0xFF;}void disp17() //一个灯亮到八个灯亮,追逐式,顺时针{for(i=0;i<8;i++) {P2=table3[i];delay(1000);} P2=0xFF;for(i=0;i<8;i++) {P3=table3[i];delay(1000);} P3=0xFF;for(i=0;i<8;i++) {P1=table3[i];delay(1000);} P1=0xFF;for(i=0;i<8;i++) {P0=table2[i];delay(1000);} P1=0xFF;}void disp18() //四灯,一个亮到八个亮,逆时针{for(i=0;i<8;i++){P0=table3[i];P1=table2[i];P3=table2[i];P2=table2[i];delay(1000);} P0=0x00;P1=0x00;P2=0x00;P3=0x00;delay(5000);}void disp19() //四灯,八个亮到全灭,顺时针{for(i=0;i<9;i++){P0=table4[i];P1=table5[i];P2=table5[i];P3=table5[i];delay(1000);} }void disp20() //四灯,一个亮到八个亮,顺时针{for(i=0;i<8;i++){P2=table3[i];P3=table3[i];P1=table3[i];P0=table2[i];delay(1000);} }void disp21() //四灯,八个亮到全灭,逆时针{for(i=0;i<9;i++){P0=table5[i];P1=table4[i];P3=table4[i];P2=table4[i];delay(1000);} }void disp22() //LED交替闪烁{for(i=0;i<9;i++){P0=0x55;P1=0x55;P2=0x55;P3=0x55;delay(3000);P0=~P0; P1=~P1; P2=~P2; P3=~P3; delay(3000);}for(i=0;i<17;i++){P0=0x55;P1=0x55;P2=0x55;P3=0x55;delay(1500);P0=~P0; P1=~P1; P2=~P2; P3=~P3; delay(1500);}for(i=0;i<27;i++){P0=0x55;P1=0x55;P2=0x55;P3=0x55;delay(700);P0=~P0; P1=~P1; P2=~P2; P3=~P3; delay(700);}for(i=0;i<9;i++){P0=0xAA;P1=0xAA;P2=0xAA;P3=0xAA;delay(2000);P0=~P0; P1=~P1; P2=~P2; P3=~P3; delay(2000);}for(i=0;i<6;i++){P0=0xAA;P1=0xAA;P2=0xAA;P3=0xAA;delay(4000);P0=~P0; P1=~P1; P2=~P2; P3=~P3; delay(4000);}}void disp23() //一个灯的双边移位,PO,P1逆时针,P2,P3顺时针{for(i=0;i<8;i++){P1=0x00;P3=0x00;P0=table7[i];P2=table7[i];delay(1000);}P0=0x00;P2=0x00;for(i=0;i<8;i++){P1=table6[i];P3=table7[i];delay(1000);}}void disp24() //一个灯的逆双边移位,P1,P0逆时针,P3,P2顺时针{for(i=0;i<8;i++){P1=table7[i];P3=table6[i];delay(1000);}P1=0x00;P3=0x00;for(i=0;i<8;i++){P0=table6[i];P2=table6[i];delay(1000);}}void disp25() //两个灯的双边移位{for(i=0;i<9;i++){P1=0x00;P3=0x00;P0=table9[i];P2=table9[i];delay(1000);}P0=0x00;P2=0x00;for(i=0;i<9;i++){P1=table8[i];P3=table9[i];delay(1000);}P0=0x00;P1=0x00;P2=0x00;P3=0x00;}void disp26() //两个灯的逆双边移位{for(i=0;i<9;i++){P1=table9[i];P3=table8[i];delay(1000);}P1=0x00;P3=0x00;for(i=0;i<9;i++){P0=table8[i];P2=table8[i];delay(1000);}P0=0x00;P1=0x00;P2=0x00;P3=0x00;}void disp27() //四个灯的相互追逐,顺时针{for(j=0;j<5;j++){for(i=0;i<8;i++){P0=table0[i];P2=table1[i];P3=table1[i];P1=table1[i];delay(1000);} }for(i=0;i<8;i++){P0=table2[i];P2=table3[i];P3=table3[i];P1=table3[i];delay(2000);}for(i=0;i<9;i++){P0=table5[i];P1=table4[i];P3=table4[i];P2=table4[i];delay(1000);}}void disp28() //四个灯的相互追逐,逆时针{for(j=0;j<5;j++){for(i=0;i<8;i++){P0=table1[i];P1=table0[i];P2=table0[i];P3=table0[i];delay(1000);} }for(i=0;i<8;i++){P0=table3[i];P1=table2[i];P3=table2[i];P2=table2[i];delay(2000);}for(i=0;i<9;i++){P0=table4[i];P1=table5[i];P3=table5[i];P2=table5[i];delay(1000);}void disp29() //两个灯的追逐,逆时针{for(i=0;i<8;i++) {P0=table1[i];P3=table0[i];delay(1000);} P0=0xFF;P3=0xFF;for(i=0;i<8;i++) {P1=table0[i];P2=table0[i];delay(1000);} P1=0xFF;P2=0xFF;for(i=0;i<8;i++) {P0=table3[i];P3=table2[i];delay(1000);} P0=0x00;P3=0x00;for(i=0;i<8;i++) {P1=table2[i];P2=table2[i];delay(1000);} P1=0x00;P2=0x00;P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;}void disp30() //两个灯的追逐,顺时针{for(i=0;i<8;i++) {P2=table1[i];P1=table1[i];delay(1000);} P2=0xFF;P1=0xFF;for(i=0;i<8;i++) {P3=table1[i];P0=table0[i];delay(1000);} P3=0xFF;P0=0xFF;for(i=0;i<8;i++) {P2=table3[i];P1=table3[i];delay(1000);} P2=0x00;P1=0x00;for(i=0;i<8;i++) {P3=table3[i];P0=table2[i];delay(1000);} P3=0x00;P0=0x00;P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;}void disp31() //P0,P2一个灯到八个灯亮,之后灭;P1,P3一个灯到八个灯亮,之后灭{for(i=0;i<8;i++) {P0=table3[i];P2=table3[i];delay(1000);} P0=0x00;P2=0x00;for(i=0;i<9;i++) {P0=table5[i];P2=table5[i];delay(1000);} P0=0xFF;P2=0xFF;for(i=0;i<8;i++) {P1=table2[i];P3=table3[i];delay(1000);} P1=0x00;P3=0x00;for(i=0;i<9;i++) {P1=table4[i];P3=table5[i];delay(1000);} P1=0xFF;P3=0xFF;}void disp32() //P1,P3一个灯到八个灯亮,之后灭;P0,P2一个灯到八个灯亮,之后灭{for(i=0;i<8;i++) {P1=table3[i];P3=table2[i];delay(1000);} P1=0x00;P3=0x00;for(i=0;i<9;i++) {P1=table5[i];P3=table4[i];delay(1000);} P1=0xFF;P3=0xFF;for(i=0;i<8;i++) {P0=table2[i];P2=table2[i];delay(1000);} P0=0x00;P2=0x00;for(i=0;i<9;i++) {P0=table4[i];P2=table4[i];delay(1000);} P0=0xFF;P2=0xFF;}void disp33() //一个亮到八个亮,P0,P2向下亮,P1,P3向上亮{for(i=0;i<8;i++){P0=table3[i];P2=table3[i];P1=table3[i];P3=table2[i];delay(1000);}P0=0x00;P1=0x00;P2=0x00;P3=0x00;delay(1000);for(i=0;i<9;i++){P0=table4[i];P2=table4[i];P1=table4[i];P3=table5[i];delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;void disp34() //一个亮到八个亮,P0,P2向上亮,P1,P3向下亮,{for(i=0;i<8;i++){P0=table2[i];P2=table2[i];P1=table2[i];P3=table3[i];delay(1000);}P0=0x00;P1=0x00;P2=0x00;P3=0x00;delay(1000);for(i=0;i<9;i++){P0=table5[i];P2=table5[i];P1=table5[i];P3=table4[i];delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;}void disp35() //单灯P0,P2向下,P1,P3向上,之后P0,P2,P1,P3一个到八个亮{for(i=0;i<8;i++){P0=table1[i];P2=table1[i];P1=table1[i];P3=table0[i];delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;for(i=0;i<8;i++){P0=table2[i];P2=table2[i];P1=table2[i];P3=table3[i];delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;}void disp36() //单灯P0,P2向上,P1,P3向下,之后P0,P2,P1,P3一个到八个亮{for(i=0;i<8;i++){P0=table0[i];P2=table0[i];P1=table0[i];P3=table1[i];delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;for(i=0;i<8;i++){P0=table3[i];P2=table3[i];P1=table3[i];P3=table2[i];delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;}void disp37() //P0,P3闪亮,P1,P2灭;P0,P3闪亮,P1,P2亮{for(i=0;i<3;i++){P0=0x00;P3=0x00;P1=0xFF;P2=0xFF;delay(1000);P0=0xFF;P3=0xFF;P1=0xFF;P2=0xFF;delay(1000);}for(i=0;i<5;i++){P0=0x00;P3=0x00;P1=0x00;P2=0x00;delay(1000);P0=0xFF;P3=0xFF;P1=0x00;P2=0x00;delay(1000);}}void disp38() //P1,P2闪亮,P0,P3灭;P1,P2闪亮,P0,P3亮{for(i=0;i<3;i++){P0=0xFF;P3=0xFF;P1=0x00;P2=0x00;delay(1000);P0=0xFF;P3=0xFF;P1=0xFF;P2=0xFF;delay(1000);}for(i=0;i<3;i++){P0=0x00;P3=0x00;P1=0x00;P2=0x00;delay(1000);P0=0x00;P3=0x00;P1=0xFF;P2=0xFF;delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;}void disp39() //P0,P2闪亮,P1,P3由上向上逐个点亮{for(i=0;i<8;i++){P0=0x00;P2=0x00;P1=table3[i];P3=table2[i];delay(1000);P0=0xFF;P2=0xFF;delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;for(i=0;i<8;i++){P0=0x00;P2=0x00;P1=table2[i];P3=table2[i];delay(1000);P0=0xFF;P2=0xFF;delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;}void disp40() //P1,P3闪亮,P0,P2由上到下逐个点亮{for(i=0;i<8;i++){P1=0x00;P3=0x00;P0=table3[i];P2=table3[i];delay(1000);P1=0xFF;P3=0xFF;delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;for(i=0;i<8;i++){P1=0x00;P3=0x00;P0=table3[i];P2=table2[i];delay(1000);P1=0xFF;P3=0xFF;delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;}void disp41() //P0,P2闪亮,P1,P3逐个点亮,逆时针{for(i=0;i<8;i++){P0=0x00;P2=0x00;P1=table2[i];delay(1000);P0=0xFF;P2=0xFF;delay(1000);}for(i=0;i<8;i++){P0=0x00;P2=0x00;P1=0x00;P3=table2[i];delay(1000);P0=0xFF;P2=0xFF;delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;}void disp42() //P1,P3闪亮,P0,P2逐个点亮,逆时针,后逐个熄灭{for(i=0;i<8;i++){P1=0x00;P3=0x00;P2=table2[i];delay(1000);P1=0xFF;P3=0xFF;delay(1000);}for(i=0;i<8;i++){P1=0x00;P3=0x00;P2=0xFF;P0=table3[i];delay(1000);P1=0xFF;P3=0xFF;delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;//*************************************************** for(i=0;i<8;i++){P1=0x00;P3=0x00;P2=table2[i];delay(1000);P1=0xFF;P3=0xFF;delay(1000);}for(i=0;i<8;i++){P1=0x00;P3=0x00;P2=0x00;P0=table3[i];delay(1000);P1=0xFF;P3=0xFF;delay(1000);}for(i=0;i<9;i++){P1=0x00;P3=0x00;P2=table5[i];P0=table4[i];delay(1000);P1=0xFF;P3=0xFF;delay(1000);}P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;}void disp43() //P0,P2闪亮,P1,P3逐个点亮,顺时针,后逐个熄灭。
C51单片机(32路流水灯C语言程序)
C51单片机(32路流水灯C语言程序)#include <reg52.h>void delay(int t){ //时间延迟子函数unsigned int i,j;for(j=0;j<30;j++)for(i=0;i<t;i++);}void putOne(int n,char a){ //定义变量函数unsigned int m = n%8, k = n/8, b;if(k==0) b=P0; if(k==1) b=P1; if(k==2) b=P2; if(k==3) b=P3; if(a) b = b & (~(1<<m));else b = b | (1<<m) ;if(k==0) P0=b; if(k==1) P1=b; if(k==2) P2=b; if(k==3) P3=b; }void liu(int n1,int n2){ //流水灯子程序int i;for(i=n1; i<=n2; i++ ) {putOne(i,1);delay(2000);putOne(i,0);}}main(){ //流水灯主程序while(1){P0 = P1 = P2 =P3 = 0;liu(0, 31 ); putOne(31,1);liu(0, 30 ); putOne(30,1);liu(0, 29 ); putOne(29,1);liu(0, 28 ); putOne(28,1);liu(0, 27 ); putOne(27,1);liu(0, 26 ); putOne(26,1);liu(0, 25 ); putOne(25, 1);liu(0, 24 ); putOne(24,1);liu(0, 23 ); putOne(23,1);liu(0, 22 ); putOne(22,1);liu(0, 21 ); putOne(21,1);liu(0, 20 ); putOne(20,1);liu(0, 19 ); putOne(19,1);liu(0, 18 ); putOne(18, 1);liu(0, 17 ); putOne(17,1);liu(0, 16 ); putOne(16,1);liu(0, 15 ); putOne(15,1);liu(0,14 ); putOne(14,1);liu(0, 13 ); putOne(13,1);liu(0, 12 ); putOne(12,1);liu(0, 11 ); putOne(11, 1);liu(0, 10 ); putOne(10,1);liu(0, 9 ); putOne(9,1);liu(0, 8 ); putOne(8,1);liu(0, 7 ); putOne(7,1);liu(0, 6 ); putOne(6,1);liu(0, 5 ); putOne(5,1);liu(0, 4 ); putOne(4, 1);liu(0, 3 ); putOne(3,1);liu(0, 2 ); putOne(2,1);liu(0, 1 ); putOne(1,1);liu(0, 0 ); putOne(0,1);P0 = P1 = P2 =P3 =0; delay(2000);P0 = P1 = P2 =P3 =255; delay(2000); P0 = P1 = P2 =P3 =0; delay(2000);}如主函数改成:main() //流水灯主程序{unsigned int k;while(1){P0 = P1 = P2 =P3 = 0;for(k=31;k>-1;k--){liu(0, k); putOne(k,1);}P0 = P1 = P2 =P3 =0; delay(2000);P0 = P1 = P2 =P3 =255; delay(2000);P0 = P1 = P2 =P3 =0; delay(2000);}}这样就可以代替你的主程序了/local/changchun/huochezhan-sq-jiudian-tg?sp=1。
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单片机流水灯程序
char code table4[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};//P0123 一个灯走动
char code table5[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,};//P0123 两个灯走动
char code table6[]={0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,};//P0123 三个灯走动
for(j=0;j<8;j++)//P0123 一条龙一个灯走动
{ P0=table4[j];
delay(5);
} P0=0xff;
for(j=0;j<8;j++)//P0123 一条龙一个灯走动
{ P2=table4[j];
delay(5);
}
P0=0xff;P1=0xff;P2=0xff;P3=0xff;
for(j=0;j<7;j++)//P0123 两个灯走动
{ P0=table5[j];
P1=table5[j];
P2=table5[j];
P3=table5[j];
for(j=1;j<7;j++)//P0123 一条龙两个灯走动
{ P2=table5[j];
delay(5);
{ P0=table10[j];
P1=table10[j];
P2=table10[j];
P3=table10[j];
delay(5);
} P0=0x00;P1=0x00;P2=0x00;P3=0x00;delay(5);
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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
uchar i,temp=0x80;
for(i=0;i<8;i++)
{
P0=~temp; //P0右移子函数
delay(quan);
temp>>=1;
}
P0=0xff;
}
//***************************************************
0x5f,0x6f,0x77,0x7b,0x7d,0x7e,0x7f};
uchar code ledp3[]={
0x2f,0x37,0x3b,0x3d,0x3e,0x3f};
uchar code ledp4[]={
0x17,0x1b,0x1d,0x1e,0x1f};
uchar code ledp5[]={
{
uchar i,temp=0xfe;
for(i=0;i<8;i++)
{
P2=temp; //P2左扫子函数
delay(quan);
uchar code ledpl4[]={
0x78,0xb8,0xd8,0xe8,0xf0};
uchar code ledpl5[]={
0x70,0xb0,0xd0,0xe0};
uchar code ledpl6[]={
0x60,0xa0,0xc0};
uchar code ledpl7[]={
delay(quan);
temp>>=1;
}
P3=0xff;
}
//***************************************************
//***************************************************
//***************************************************
void zuoyiP3 (void)
{
uchar i,temp=0x01;
for(i=0;i<8;i++)
{
P3=~temp; //P3左移子函数
delay(quan);
temp<<=1;
}
P1=0xff;
}
//***************************************************
//***************************************************
//***************************************************
void delay (uint a)
{
uchar i;
while(a-- !=0) //延时1ms子函数
{
for(i=0;i<125;i++);
}
}
delay(quan);
temp>>=1;
}
P1=0xff;
}
//***************************************************
//***************************************************
uchar code ledpla3[]={
0xf4,0xec,0xdc,0xbc,0x7c,0xfc};
uchar code ledpla4[]={
0xe8,0xd8,0xb8,0x78,0xf8};
uchar code ledpla5[]={
0xd0,0xb0,0x70,0xf0};
void zuosaoP0 (void)
{
uchar i,temp=0xfe;
for(i=0;i<8;i++)
{
P0=temp; //P0左扫子函数
delay(quan);
temp<<=1;
}
}
//***************************************************
//***************************************************
void zuoyiP1 (void)
{
uchar i,temp=0x01;
for(i=0;i<8;i++)
{
P1=~temp; //P1左移子函数
uchar code ledpla6[]={
0xa0,0x60,0xe0};
uchar code ledpla7[]={
0x40,0xc0};
//*******************************
uchar code ledpl1[]={
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
delay(quan);
temp<<=1;
}
}
//***************************************************
//***************************************************
void zuosaoP2 (void)
//***************************************************
void zuosaoP1 (void)
{
uchar i,temp=0xfe;
for(i=0;i<8;i++)
{
P1=temp; //P1左扫子函数
0x0b,0x0d,0x0e,0x0f};
uchar code ledp6[]={
0x05,0x06,0x07};
u2,0x03};
//***************************************************
0x40,0x80};
//*******************************
uchar code ledp1[]={
0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff};
uchar code ledp2[]={ //P3-->>P0逐个熄灭(反向)
//***************************************************
void youyiP1 (void)
{
uchar i,temp=0x80;
for(i=0;i<8;i++)
{
P1=~temp; //P1右移子函数
uchar code ledpl2[]={ //P3-->>P0逐个堆积点亮部分(反向)
0x7e,0xbe,0xde,0xee,0xf6,0xfa,0xfc};
uchar code ledpl3[]={
0x7c,0xbc,0xdc,0xec,0xf4,0xf8};
uchar code ledpla1[]={
0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
uchar code ledpla2[]={ //P0-->>P3逐个熄灭
0xfa,0xf6,0xee,0xde,0xbe,0x7e,0xfe};
0x7E,0x7D,0x7B,0x77,0x6F,0x5F,0x3F};
uchar code ledplay3[]={
0x3E,0x3D,0x3B,0x37,0x2F,0x1F};
uchar code ledplay4[]={
0x1E,0x1D,0x1B,0x17,0x0F};
void zuoyiP2 (void)
{
uchar i,temp=0x01;
for(i=0;i<8;i++)
{
P2=~temp; //P2左移子函数
delay(quan);
temp<<=1;
}
P2=0xff;
}
//***************************************************
//***************************************************
void youyiP3 (void)
{
uchar i,temp=0x80;
for(i=0;i<8;i++)
{
P3=~temp; //P3右移子函数
//***************************************************
//***************************************************
void zuoyiP0 (void)
{
uchar i,temp=0x01;
//*******************************
uchar code ledplay1[]={
0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};