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

51单片机经典流水灯汇编程序(共8页)单片机流水灯汇编程序设计流水灯汇编程序8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
;用最直接的方式实现流水灯ORG 0000H START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY ;延时1秒 MOV P1,#B ;最下面第二个的L ED点亮 LCALL DELAY ;延时1秒 MOV P1,#B ;最下面第三个的LED点亮(以下省略) LCALL DELAY MOV P1,#B LC ALL DELAY MOV P1,#B LCALL DELAY MOV P1,#B LCALL DELAY MOV P1,#B LCALL DELAY MOV P1,#B LCALL DELA Y MOV P1,#B ;完成第一次循环点亮,延时约秒 AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250msPUSH PSW ;现场保护指令(有时可以不加)MOV R4,#2 L3: MOV R2 ,#00HL1: MOV R3 ,#00HL2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L 2) DJNZ R2 ,L1 ; 中层循环:256次 DJNZ R4 ,L3 ;外层循环:2次 POP PSW RET END--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--51单片机汇编程序集(二)2008年12月12日星期五 10:27辛普生积分程序内部RAM数据排序程序(升序)外部RAM数据排序程序(升序)外部RAM浮点数排序程序(升序)BCD小数转换为二进制小数(2位)BCD小数转换为二进制小数(N位)BCD整数转换为二进制整数(1位)BCD 整数转换为二进制整数(2位)BCD整数转换为二进制整数(3位)BCD整数转换为二进制整数(N位)二进制小数(2位)转换为十进制小数(分离BCD码)二进制小数(M位)转换为十进制小数(分离BCD码)二进制整数(2位)转换为十进制整数(分离BCD码)二进制整数(2位)转换为十进制整数(组合BCD码)二进制整数(3位)转换为十进制整数(分离BCD码)二进制整数(3位)转换为十进制整数(组合BCD码)二进制整数(M位)转换为十进制整数(组合BCD码)三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7;二进制整数(2位)转换为十进制整数(分离BCD码);入口: R3,R4;占用资源: ACC,R2,NDIV31;堆栈需求: 5字节;出口: R0,NCNTIBTD21 : MOV NCNT,#00HMOV R2,#00HIBD211 : MOV R7,#0AHLCALL NDIV31MOV A,R7MOV@R0,AINC R0INC NCNTMOV A,R3ORL A,R4JNZ IBD211MOV A,R0CLR CSUBB A,NCNTMOV R0,ARET;二进制整数(2位)转换为十进制整数(组合BCD码);入口: R3,R4;占用资源: ACC,B,R7;堆栈需求: 3字节;出口: R0IBTD22 : MOV A,R0PUSH AMOV R7,#03HCLR AIBD221 : MOV @R0,AINC R0DJNZ R7,IBD221POP AMOVR0,AMOV R7,#10HIBD222 : PUSH ACLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOVB,#03HIBD223 : MOV A,@R0ADDC A,@R0DA AMOV @R0,AINC R0DJNZ B,IBD223POP AMOV R0,ADJNZR7,IBD222RET;二进制整数(3位)转换为十进制整数(分离BCD码);入口: R2,R3,R4;占用资源: ACC,R2,NDIV31;堆栈需求: 5字节;出口: R0,NCNTIBTD31 : CLR AMOV NCNT,AIBD311 : MOV R7,#0AHLCALL NDIV31MOV A,R7MOV @R0,AINCR0INC NCNTMOV A,R2ORL A,R3ORL A,R4JNZ IBD311MOV A,R0CLR CSUBB A,NCNTMOV R0,ARET;二进制整数(3位)转换为十进制整数(组合BCD码);入口: R2,R3,R4;占用资源: ACC,B,R7;堆栈需求: 3字节;出口: R0IBTD32 : MOV A,R0PUSH AMOV R7,#04HCLR AIBD321 : MOV @R0,AINC R0DJNZ R7,IBD321POP AMOVR0,AMOV R7,#18HIBD322 : PUSH ACLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV B,#04HIBD323 : MOV A,@R0ADDC A,@R0DA AMOV @R0,AINC R0DJNZ B,IBD323POP AMOVR0,ADJNZ R7,IBD322RET第七个试验:流水灯数字显示综合练习----51单片机汇编语言试验教程收藏该程序运行结果为个位数码管轮流现实0,1,2,3,4,5,6,7,8然后十位数码管轮流现实0,1,2,3,4,5,6,7,8反复循环,, ,, ,, ,, 依次点亮然后轮流点亮小喇叭不停发出滴答声:注意该程序配套为我站的倚天版开发套件:如果是标准版:因他的数码管接法不同。
最经典的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位流水灯程序设计的3种方法

51单片机8位流水灯程序设计的3种方法一、采用定义数组的方式进行LED灯流水灯调试:#include<reg52.h>unsigned char table[]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};void delayms(unsigned int a){unsigned int i,j;for(j=a;j>0;j--)for(i=125;i>0;i--);}void main(){while(1){unsigned char b;for(b=0;b<8;b++){P1=table[b];delayms(1000);}}}程序编译通过,PRoteus仿真实现功能。
二、采用移位函数的方式进行LED灯流水灯调试:#include <reg52.h>#include <intrins.h>char temp;void delay(unsigned int m){unsigned int i,j;for(j=m;j>0;j--)for(i=125;i>0;i--);}void main(){unsigned char i;temp=0xfe;P1=temp;while(1){delay(300);P1=temp;}}程序编译通过,实现跑马灯循环效果,所使用的crol函数为移位专用函数,还可使用cror实现右移。
此外,还可使用>> <<移位符进行流水等程序设计。
3、实现8位流水灯来回跑动效果程序如下:#include <reg52.h>#include <intrins.h>char temp;void delay(unsigned int m){unsigned int i,j;for(j=m;j>0;j--)for(i=125;i>0;i--);}void main(){unsigned char i;temp=0xfe;P1=temp;while(1){for(i=7;i>0;i--){delay(300);P1=temp;}for(i=7;i>0;i--){temp=_cror_(temp,1);delay(300);P1=temp;}}}程序编译通过,仿真实现预期效果。
多种方法写出的51单片机流水灯C语言程序

多种方法写出的51单片机流水灯C语言程序流水灯最原始下面是一个最基本的流水灯程序,使用了51单片机的寄存器编程方法。
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;void mdelay(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;流水灯位左移在流水灯的基础上,我们可以通过左移位的方式来实现流水灯的效果。
void main()unsigned char led = 0x01.// 初始化led为xxxxxxxxwhile(1)P1 = ~led。
// 取反输出,因为我们的电路是低电平亮灯mdelay(1000);led <<= 1.// 左移一位if(led == 0) // 如果led变为0了,说明已经左移到最后一位了,需要重新开始led = 0x01;流水灯移位函数为了方便实现流水灯的位移,我们可以封装一个移位函数。
void shift_left(unsigned char *led。
unsigned char n)for(unsigned char i=0.i<n。
i++)led <<= 1;if(*led == 0)led = 0x01;void main()unsigned char led = 0x01;while(1)P1 = ~led;mdelay(1000);shift_left(&led。
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.толькодля людей, которые используются для обучения, исследований и не должны использоваться в коммерческих целях.以下无正文。
51单片机音乐流水灯程序

#include <reg52."h>sbitspeaker = P1^6;sbitkey1=P1^5;sbitkey2=P1^7;unsigned char kk=0;unsigned long t3;unsigned char timer0h, timer0l, time,n;codecharled[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0x55,0xaa,0x00,0x5 5,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x 7f,0x00,0x55,0xaa,0x00,0x55,0xaa,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0x00}; //灯亮数组//--------------------------------------//单片机晶振采用11."0592MHz//频率-半周期数据表高八位本软件共保存了四个八度的28个频率数据code unsigned char FREQH[] = {0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,//低音0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,//高音2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};//超高音//频率-半周期数据表低八位code unsigned char FREQL[] = {0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,//低音0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,//高音2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};//超高音//--------------------------------------//世上只有妈妈好数据表要想演奏不同的乐曲,只需要修改这个数据表codeint shengrikuaile[] = {5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,//生日快乐5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4,0,0,0};code int tonghua[]={5,1,2, 5,2,2, 4,2,2,3,2,4, 3,2,2, 4,2,1, 3,2,1, 3,2,4, 3,2,2, 4,2,2,3,2,2, 4,2,2, 3,2,2, 2,2,1, 1,2,1, 1,2,2, 1,2,2, 3,2,2, 5,2,2,6,2,4, 6,2,2, 6,2,1, 5,2,1, 5,2,2, 2,2,2, 2,2,2, 4,2,2,3,2,8, 1,2,2, 3,2,2, 5,2,2,6,2,4, 6,2,2, 6,2,1, 5,2,1, 2,2,2, 2,2,2, 4,2,2,3,2,2, 4,2,2, 3,2,2, 2,2,1, 1,2,1, 1,2,4, 2,2,2, 3,2,2,6,1,4, 6,1,2, 1,2,2, 1,2,2, 7,1,2, 7,1,2, 1,2,1, 1,2,16,0,0,0};//童话//一个音符有三个数字。
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。