求助:实现51单片机P1口LED按依次点亮一个,两个,三个。...
时间:10-02
整理:3721RD
点击:
实现51单片机P1口LED按依次点亮一个,两个,三个。我编了个程序,如下,怎么不行啊,知道的把正确的C程序给一个我,先说声谢谢了!
#include <reg52.h>
#include <math.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
void main()
{unsigned char n;
double i,j,k;
while(1)
{ n=0xff;
for(i=0;i<8;i++)
{k=pow(2,i);
n=n-k;
P1=n;
delay(60000);
}
for(j=7;j>=0;j--)
{k=pow(2,j);
n=n+k;
P1=n;
delay(60000);
}
}
}
void delay(uint z)
{
uint x;
uchar y;
for(x=z;x>0;x--);
for(y=20;y>0;y--);
}
#include <reg52.h>
#include <math.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
void main()
{unsigned char n;
double i,j,k;
while(1)
{ n=0xff;
for(i=0;i<8;i++)
{k=pow(2,i);
n=n-k;
P1=n;
delay(60000);
}
for(j=7;j>=0;j--)
{k=pow(2,j);
n=n+k;
P1=n;
delay(60000);
}
}
}
void delay(uint z)
{
uint x;
uchar y;
for(x=z;x>0;x--);
for(y=20;y>0;y--);
}
没错啊,你看看你的led是否接对了。
你好歹加个注释吧!
假设单片机口为1时点亮LED灯,现在用个最笨的方法,P1口,
P1^1,P1^2,P1^3,P1^4,P1^5,P1^6,P1^7,P1^8依次
点亮1个灯时,P1=0000 0001=0x01;
点亮2个灯时:P1=0000 0011=0x03;
点亮3个灯时:P1=0000 0111=0x07;
点亮4个灯时,P1=0000 1111=0x0f;
点亮5个灯时:P1=0001 1111=0x1f;
点亮6个灯时:P1=0011 1111=0x3f;
点亮7个灯时,P1=0111 1111=0x7f;
点亮8个灯时:P1=1111 1111=0xff;
ok这样就可以依次赋值给P1口,这样不就可以了。
当然还有更简单的方法,你好好想想你上面那个赋值是不是对的,好好计算下
还有把你这部分的原理图贴出来看看
C看不懂。