用ATC51单片机的P2口控制8个Led的流水灯的C程序...

发布网友 发布时间:2022-04-22 08:20

我来回答

5个回答

热心网友 时间:2024-08-30 01:36

#include <REGX52.H>
void Delay1ms(unsigned int count) /*延时函数,延迟时间为count×1ms)*/
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}

main()
{
unsigned char LEDIndex = 0; /*声明8位变量LEDIndex,用来指示8个LED中哪个被点亮,初始值为00000000*/
bit LEDDirection = 1; /*声明位变量LEDDirection,用来指示点亮的方向,初始值为1*/
while(1) /*一直循环执行大括号里面的语句*/
{
if(LEDDirection) /*当LEDDirection=1时,0000 0001左移LEDIndex位,取反后送给P2端口,点亮一个LED*/
P2 = ~(0x01<<LEDIndex);
else /*当LEDDirection=0时,1000 0000右移LEDIndex位,取反后送给P2端口,点亮一个LED*/

P2 = ~(0x80>>LEDIndex);
if(LEDIndex==7) /*当一次循环结束时,把LEDDirection取反,下次循环时将以相反的顺序点亮*/
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%8; /*LEDIndex+1对8取余,保证LEDIndex在0~7之间*/
Delay1ms(500); /*延时500ms,即LED的点亮间隔为0.5s*/
}
}

热心网友 时间:2024-08-30 01:35

1000
0000右移LEDIndex位,延迟时间为count×1ms)*/j++),点亮一个LED*/,把LEDDirection取反;*延时函数;REGX52;LEDIndex);j<
/
for(i=0;
}
main()
{
unsigned
char
LEDIndex
=
0.H>*声明位变量LEDDirection;>
P2
=
~(0x80&gt.5s*/<*当一次循环结束时,用来指示点亮的方向;count,下次循环时将以相反的顺序点亮*/i++)
for(j=0,即LED的点亮间隔为0;*LEDIndex+1对8取余,保证LEDIndex在0~7之间*/120;
{
if(LEDDirection)
/*延时500ms,初始值为00000000*/*当LEDDirection=1时,取反后送给P2端口;
void
Delay1ms(unsigned
int
count)
/,初始值为1*/*声明8位变量LEDIndex;
{
unsigned
int
i;
while(1)
/
/
P2
=
~(0x01<
bit
LEDDirection
=
1;
/
if(LEDIndex==7)
/*一直循环执行大括号里面的语句*/
Delay1ms(500);
LEDIndex
=
(LEDIndex+1)%8,j;
else
/,点亮一个LED*/!LEDDirection;*当LEDDirection=0时,取反后送给P2端口;
LEDDirection
=
;LEDIndex),0000
0001左移LEDIndex位;i&lt,用来指示8个LED中哪个被点亮;
/#include
&lt

热心网友 时间:2024-08-30 01:38

#include
<REGX52.H>
void
Delay1ms(unsigned
int
count)
/*延时函数,延迟时间为count×1ms)*/
{
unsigned
int
i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
main()
{
unsigned
char
LEDIndex
=
0;
/*声明8位变量LEDIndex,用来指示8个LED中哪个被点亮,初始值为00000000*/
bit
LEDDirection
=
1;
/*声明位变量LEDDirection,用来指示点亮的方向,初始值为1*/
while(1)
/*一直循环执行大括号里面的语句*/
{
if(LEDDirection)
/*当LEDDirection=1时,0000
0001左移LEDIndex位,取反后送给P2端口,点亮一个LED*/
P2
=
~(0x01<<LEDIndex);
else
/*当LEDDirection=0时,1000
0000右移LEDIndex位,取反后送给P2端口,点亮一个LED*/
P2
=
~(0x80>>LEDIndex);
if(LEDIndex==7)
/*当一次循环结束时,把LEDDirection取反,下次循环时将以相反的顺序点亮*/
LEDDirection
=
!LEDDirection;
LEDIndex
=
(LEDIndex+1)%8;
/*LEDIndex+1对8取余,保证LEDIndex在0~7之间*/
Delay1ms(500);
/*延时500ms,即LED的点亮间隔为0.5s*/
}
}

热心网友 时间:2024-08-30 01:37

#include <REGX52.H>
void Delay1ms(unsigned int count) count毫秒的延时函数,count=1,2,3,4…………
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++); 一毫秒
}

main()
{
unsigned char LEDIndex = 0; 声明一个实数变量LEDIndex,初值为0
bit LEDDirection = 1; 声明一个位变量 LEDDirection,初值为1
while(1) 循环语句
{
if(LEDDirection) 如果LEDDirection=1,
P2 = ~(0x01<<LEDIndex); 则 P2口每隔500毫秒从P2.0---P2.7输出低电平
else 如果LEDDirection不等于1,
P2 = ~(0x80>>LEDIndex); 则P2口每隔500毫秒从P2.7---P2.0输出低电平
if(LEDIndex==7) 如果测试到LEDIndex的值为7
LEDDirection = !LEDDirection; LEDDirection取反(是1就为0,是0就为1)
LEDIndex = (LEDIndex+1)%8; LEDIndex从0开始加1,一直加到8,再从0开始加1加到8,一直循环下去
Delay1ms(500); 每加一次1,延时 500毫秒
}
}
回去多看几遍书就明白了,努力吧!!

热心网友 时间:2024-08-30 01:30

看不懂别人编写的C程序,最好的办法是自己动手编写。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com