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); }
}
这样就可以代替你的主程序了。