用AT89C51单片机的P2口控制8个Led的流水灯的C程序看不懂?

用AT89C51单片机的P2口控制8个Led的流水灯的C程序看不懂?从P2-0到P2-7灯依次单独点亮后,又从P2-7到P2-0灯依次单独点亮如此反复循环,程序如下(低电... 用AT89C51单片机的P2口控制8个Led的流水灯的C程序看不懂?
从P2-0到P2-7灯依次单独点亮后,又从P2-7到P2-0灯依次单独点亮
如此反复循环,程序如下(低电平被点亮):
#include <REGX52.H>
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}

main()
{
unsigned char LEDIndex = 0;
bit LEDDirection = 1;
while(1)
{
if(LEDDirection)
P2 = ~(0x01<<LEDIndex);
else
P2 = ~(0x80>>LEDIndex);
if(LEDIndex==7)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%8;
Delay1ms(500);
}
}
我这程序我真的看不懂,
这个bit LEDDirection = 1;是什么意思?
从主函数开始,麻烦高手帮我解释每一句的意思以及它有用途?
越详细越好!
在下在此先谢谢了!
展开
 我来答
紫翅zhidao
推荐于2017-11-27 · TA获得超过170个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:94.6万
展开全部
#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*/
}
}
缑淑兰印丑
2019-07-07 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:25%
帮助的人:1016万
展开全部
#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*/
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
由佑平仇鸾
2019-08-22 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:30%
帮助的人:1068万
展开全部
1000
0000右移LEDIndex位,延迟时间为count×1ms)*/j++),点亮一个LED*/,把LEDDirection取反;*延时函数;REGX52;LEDIndex);j<
/
for(i=0;
}
main()
{
unsigned
char
LEDIndex
=
0.H>*声明位变量LEDDirection;>
P2
=
~(0x80>.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<,用来指示8个LED中哪个被点亮;
/#include
<
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友cb0059e
2009-03-23 · TA获得超过1091个赞
知道小有建树答主
回答量:882
采纳率:50%
帮助的人:508万
展开全部
看不懂别人编写的C程序,最好的办法是自己动手编写。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
5831387
2009-03-22 · 超过12用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:35.5万
展开全部
#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毫秒
}
}
回去多看几遍书就明白了,努力吧!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式