61单片机用C语言做一个程序 要求:16个灯从右到左依次点亮,全亮后闪烁三次, 然后从左到右依次熄灭 急求

时间间隔0.5秒

流水灯程序是keil的自带例子,你直接跑就是。

void wait (void) { /* wait function */
; /* only to delay for LED flashes */
}
void main (void) {
unsigned int i; /* Delay var */
unsigned char j; /* LED var */
while (1) { /* Loop forever */
for (j=0x01; j< 0x80; j<<=1) { /* Blink LED 0, 1, 2, 3, 4, 5, 6 */
P1 = j; /* Output to LED Port */
for (i = 0; i < 10000; i++) { /* Delay for 10000 Counts */
wait (); /* call wait function */
}
}
for (j=0x80; j> 0x01; j>>=1) { /* Blink LED 6, 5, 4, 3, 2, 1 */
P1 = j; /* Output to LED Port */
for (i = 0; i < 10000; i++) { /* Delay for 10000 Counts */
wait (); /* call wait function */
}
}
}
}

闪烁你可以再加几行。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-08
第2个回答  2018-03-14
sbit key = P1_0;
sbit led = P1_1;
#define led_on 0
main()
{
while( key )
{
led = ! led_on;
}
while(!key)
{
led = led_on;
delay( 100 );
led = ! led_on;
delay( 100 );
}
}
上面这个是按下闪,松开灭的程序,稍微改一下,就可以做到要求的功能。
main()
{
while( ! key )
{
led = ! led_on;
}
while( key )
{
led = ! led_on;
}
while( ! key )
{
led = led_on;
delay( 100 );
led = ! led_on;
delay( 100 );
}
while( key )
{
led = led_on;
delay( 100 );
led = ! led_on;
delay( 100 );
}
}
第3个回答  推荐于2017-12-16
#include<reg51.h>

#define uchar unsigned char
uchar led1,led2;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
uchar i,j;
while(1)
{
led1=0xff;
led2=0xff;
for(i=1;i<9;i++){P0=led1<<i;delay(50);}

for(i=1;i<9;i++){P1=led2<<i;delay(50);}
for(i=0;i<3;i++)
{
P0=0x00;
P1=0x00;
delay(250);
P0=0xff;
P1=0xff;
delay(250);
}
led1=0x00;
led2=0x00;
for(i=1;i<9;i++){led1=(led2>>1)|0x80;P1=led2;delay(50);}
for(i=1;i<9;i++){led1=(led1>>1)|0x80;P0=led1;delay(50);}
}
}本回答被网友采纳
相似回答