AVR单片机函数解读
哪位高手能给解读一下各条语句的意思啊voidmain(void){sint8i,j;uint8k,temp=0;LED_DDR=0XFF;while(1){for(i=7...
哪位高手能给解读一下各条语句的意思啊
void main(void)
{
sint8 i,j;
uint8 k,temp=0;
LED_DDR=0XFF;
while(1)
{
for(i=7;i>=0;i--)
{
k=0x01;
for(j=i;j>=0;j--)
{
LED_PORT = temp|k;
delay50ms(5);
k<<=1;
}
temp = LED_PORT;
}
}
} 展开
void main(void)
{
sint8 i,j;
uint8 k,temp=0;
LED_DDR=0XFF;
while(1)
{
for(i=7;i>=0;i--)
{
k=0x01;
for(j=i;j>=0;j--)
{
LED_PORT = temp|k;
delay50ms(5);
k<<=1;
}
temp = LED_PORT;
}
}
} 展开
4个回答
展开全部
void main(void)
{
// 定义传送数据的位置标示
sint8 i,j;
// k:用做左移的寄存器,1的位置在哪里,对应的那个位置的灯就亮
// temp:上次LED端口的值,暂存
uint8 k,temp=0;
LED_DDR=0XFF; //设置端口全为输出状态
while(1) //保证所有的for循环结束后程序从头开始
{
for(i=7;i>=0;i--) //控制8次循环
{
k=0x01; //初始值为点亮第0位的LED
for(j=i;j>=0;j--) //n个LED每隔250ms点亮(n=7,6,5,4...0,7,6..循环)
{
LED_PORT = temp|k; //端口赋值
delay50ms(5); //估计是5*50=250ms延时
k<<=1; //移动一位至左边
}
temp = LED_PORT; //存储当前亮的灯(7,6,5,4...)
}
}
}
/***************************************************************/
从程序上看上,先以8个LED以250ms的间隔逐一点亮;然后LED7常亮,LED6~LED0再逐一点亮;然后LED7LED6常亮,LED5~LED0逐一点亮;然后LED7~LED5常亮,LED4~LED0逐一点亮.............,直至全亮。temp变量再也没有被初始化过。
{
// 定义传送数据的位置标示
sint8 i,j;
// k:用做左移的寄存器,1的位置在哪里,对应的那个位置的灯就亮
// temp:上次LED端口的值,暂存
uint8 k,temp=0;
LED_DDR=0XFF; //设置端口全为输出状态
while(1) //保证所有的for循环结束后程序从头开始
{
for(i=7;i>=0;i--) //控制8次循环
{
k=0x01; //初始值为点亮第0位的LED
for(j=i;j>=0;j--) //n个LED每隔250ms点亮(n=7,6,5,4...0,7,6..循环)
{
LED_PORT = temp|k; //端口赋值
delay50ms(5); //估计是5*50=250ms延时
k<<=1; //移动一位至左边
}
temp = LED_PORT; //存储当前亮的灯(7,6,5,4...)
}
}
}
/***************************************************************/
从程序上看上,先以8个LED以250ms的间隔逐一点亮;然后LED7常亮,LED6~LED0再逐一点亮;然后LED7LED6常亮,LED5~LED0逐一点亮;然后LED7~LED5常亮,LED4~LED0逐一点亮.............,直至全亮。temp变量再也没有被初始化过。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void main(void)
{
sint8 i,j;
uint8 k,temp=0; 定义几个数
LED_DDR=0XFF; 设置端口为输出模式(置1输出0输入)
while(1) 死循环
{
for(i=7;i>=0;i--)
{
k=0x01;
for(j=i;j>=0;j--)
{
LED_PORT = temp|k;
delay50ms(5);
k<<=1;
}
temp = LED_PORT;
}
}
}
你这就是个流水灯的程序,是定义一个数据K,然后进行循环,每一次循环方K和端口值“或”一次,然后左移,实现流水循环。
LED_PORT和LED_DDR要定义,前面加上头文件,否则不好使。
这个程序太复杂,给你一个简单的。
#include<avr/io.h>
#include<avr/delay.h>
void main(void)
{
LED_DDR=0XFF;
char i;
for(i=0;i<8;i++)
{
LED_PORT|=(1<<i);
_delay_ms(50);
LED_PORT=0xff;
}
}
完事了,就这么几行。原理是:吧LED的输出端口先置一,然后依次清零,实现流水,很简单的,还有什么疑问加我的Q274297534
{
sint8 i,j;
uint8 k,temp=0; 定义几个数
LED_DDR=0XFF; 设置端口为输出模式(置1输出0输入)
while(1) 死循环
{
for(i=7;i>=0;i--)
{
k=0x01;
for(j=i;j>=0;j--)
{
LED_PORT = temp|k;
delay50ms(5);
k<<=1;
}
temp = LED_PORT;
}
}
}
你这就是个流水灯的程序,是定义一个数据K,然后进行循环,每一次循环方K和端口值“或”一次,然后左移,实现流水循环。
LED_PORT和LED_DDR要定义,前面加上头文件,否则不好使。
这个程序太复杂,给你一个简单的。
#include<avr/io.h>
#include<avr/delay.h>
void main(void)
{
LED_DDR=0XFF;
char i;
for(i=0;i<8;i++)
{
LED_PORT|=(1<<i);
_delay_ms(50);
LED_PORT=0xff;
}
}
完事了,就这么几行。原理是:吧LED的输出端口先置一,然后依次清零,实现流水,很简单的,还有什么疑问加我的Q274297534
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void main(void)
{
sint8 i,j;
uint8 k,temp=0;
LED_DDR=0XFF; //设置端口全为输出状态
while(1) //死循环
{
for(i=7;i>=0;i--) //控制8次循环
{
k=0x01;
for(j=i;j>=0;j--)
{
LED_PORT = temp|k; //端口赋值
delay50ms(5);
k<<=1;
}
temp = LED_PORT;
}
}
}
要是把这个程序完全做解释是没意义的,但可以说明最终效果:开始点亮1个LED,过去50ms后点亮二个LED,再过去50ms后点亮三个LED……当点亮8个LED之后过去50ms就全灭,然后重复上述过程。
{
sint8 i,j;
uint8 k,temp=0;
LED_DDR=0XFF; //设置端口全为输出状态
while(1) //死循环
{
for(i=7;i>=0;i--) //控制8次循环
{
k=0x01;
for(j=i;j>=0;j--)
{
LED_PORT = temp|k; //端口赋值
delay50ms(5);
k<<=1;
}
temp = LED_PORT;
}
}
}
要是把这个程序完全做解释是没意义的,但可以说明最终效果:开始点亮1个LED,过去50ms后点亮二个LED,再过去50ms后点亮三个LED……当点亮8个LED之后过去50ms就全灭,然后重复上述过程。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询