试试这个吧!刚调试了下,应该没问题。。其实初学单片机应该尝试模块化自己的程序,比如这里就可以写个延时程序,用delay()来调用。
#include
#define uint unsigned int
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);}
void main ()
{
int i=0,p1_7;
P1_0=0;
delay(200);
P1_1=0;
delay(200);
P1_2=0;
delay(200);
P1_3=0;
delay(200);
P1_4=0 ;
delay(200);
P1_5=0 ;
delay(200);
P1_6=0 ;
delay(200);
P1_7=0;
delay(200);
P1=0xff;
while(1);
}
希望能帮到你!
/*****************************************/
/*广州一丁自动化设备有限公司020-28969088 */
/*****************************************/
/*
//P1口低电平点亮LED(常用做法)
#include
void delay_1(unsigned int j0 ) //1毫秒延时程序(22.1184M)
{
unsigned int j1;
unsigned int j2;
for(j1=0;j1<4*j0;j1++)
for(j2=0;j2<40;j2++)
;
}
void main ()
{
unsigned int i,num;
num=0xff;
for(i=0;i<8;i++)
{
num=num<<1;
P1=num;
delay_1(100);
}
P1=0xff;
while(1);
}
*/
//P1口高电平点亮LED(实际运用时很少这样设计)
#include
void delay_1(unsigned int j0 ) //1毫秒延时程序(22.1184M)
{
unsigned int j1;
unsigned int j2;
for(j1=0;j1<4*j0;j1++)
for(j2=0;j2<40;j2++)
;
}
void main ()
{
unsigned int i,num;
num=0;
for(i=0;i<8;i++)
{
num=num<<1;
num++;
P1=num;
delay_1(100);//延时100毫秒
}
P1=0;
while(1);
}
按照楼主的思路,一位一位的发光、最后全都熄灭,确实是可以办到的。
如果这一位一位的LED,都是安装在同一个接口,使用循环结构,将会简单的多。
#include
#define uint unsigned int
#define uchar unsigned char
void delay(uint x)
{
uint i, j;
for(i = x; i > 0; i--) for(j = 110; j > 0; j--);
}
void main()
{
char a, i;
a = 0xfe;
for (i = 0; i < 8; i++) { //循环8次.
P1 = a; delay(900);
a = a << 1; //左移1位.
}
P1 = 255;
while(1);
}
#include
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
void main ()
{
int i=0;
P1=0xff;
P1_0=0; //=0时 对应2极管点亮 ,别接反了
for (i=0;i<2507;i++);
P1_1=0;
for (i=0;i<2507;i++);
P1_2=0;
for (i=0;i<2507;i++);
P1_3=0;
for (i=0;i<2507;i++);
P1_4=0 ;
for (i=0;i<2507;i++);
P1_5=0 ;
for (i=0;i<2507;i++);
P1_6=0 ;
for (i=0;i<2507;i++);
P1_7=0;
for (i=0;i<2507;i++);
P1=0xff;
}
#include
#include
void main ()
{
int j=2507;
//初始状态
p1=0xff;
for(int i=0;i<8;i++)
{
j=2507;
p1=0x7f;//点亮第一个D0
while(j--);
p1=_cror_(p1,1);//不知道你的原理图是怎么接的,如果反了就改成 p1=_crol_(p1,1);
}
p1=0xff;
}