以单片机为核心控制器设计一个多功能彩灯控制器

要求:1.开始,8个发光二极管全暗。
2.延时1s后,按D0-D1-D2-D3-D4-D5-D6-D7顺序依次点亮,时间间隔50ms。
3.延时1s后,按D7-D6-D5-D4-D3-D2-D1-D0顺序依次点亮,
时间间隔50ms。
4.延时1s后,按D0-D2-D4-D6-D1-D3-D5-D7顺序依次点亮,
时间间隔50ms。
5.延时1s后,按D1-D3-D5-D7-D0-D2-D4-D6顺序依次点亮,
时间间隔50ms。
6.重复步骤(1)-(5)。

51单片机 12MHz晶振 使用P1端口控制

电路:

程序:

#include<at89x51.h>

#define LED P1

void delay1s(void)
{
    unsigned char a,b,c;
    for(c=167;c>0;c--)
        for(b=171;b>0;b--)
            for(a=16;a>0;a--);
}
void delay50ms(void)  
{
     unsigned char a,b;
    for(b=173;b>0;b--)
        for(a=143;a>0;a--);
}
void main()
{
unsigned char i;
while(1)
{
LED=0xff;//8个二极管全暗
delay1s();
for(i=1;i;i<<=1)//D0-D7
{
LED=~i;
delay50ms();
}
delay1s();
for(i=0x80;i;i>>=1)//D7-D0
{
LED=~i;
delay50ms();
}
delay1s();
for(i=1;i;i<<=2)//D0-D6
{
LED=~i;
delay50ms();
}
for(i=2;i;i<<=2)// D1-D7
{
LED=~i;
delay50ms();
}
delay1s();
for(i=2;i;i<<=2)//D1-D7
{
LED=~i;
delay50ms();
}
for(i=1;i;i<<=2)//D0-D6
{
LED=~i;
delay50ms();
}
delay1s();
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-29
很简单的,对端口的地址操作也可以,左移,右移也可以,用if语句控制也可以,用switch语句控制也可以,用while语句控制也可以,用do......while语句控制也可以,当然还要看是神马内核的单片机