实现单片机信号灯1-8依次循环点亮的程序怎么写

如题所述

把各个花样写在子函数,中断中对变量加1,在判断是否大于5,大于5就对变量清零。因为你要5种花样。主函数判断变量的值,1时执行从左到右依次点亮,2时执行从左到右逐个依次熄灭。依次下去

# include "reg51.h"                   // 包含头文件

#define uchar unsigned char

void  delay02s(void)                 // 延时0.2s子程序

{

unsigned  char i,j,k;

for ( i=2;i>0;i-- )

for (j=200;j>0;j-- )

for (k=250;k>0;k-- );

}

void  main (void)                    // 主函数

{

uchar i,j;

while (1)                           // 死循环

{

j=0x01;                         // j初始化为0x01,左移初始值

for(i=0;i<8;i++)                 // for循环语句,完成8个循环

{

P1= ~ j;                       // 对变量j 中的值按位取反后,从P1口输出

delay02s( );                    // 延时0.2s

j= j<<1;                       // 左移1位

}

j=0x80;                          // 设置右移初始值j为0x80

for (i=0;i<8;i++)

{

P1= ~ j;

delay02s( );

j= j>>1;                       // 右移1位

}

}

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-03-31

把各个花样写在子函数,中断中对变量加1,在判断是否大于5,大于5就对变量清零。因为你要5种花样。主函数判断变量的值,1时执行从左到右依次点亮,2时执行从左到右逐个依次熄灭。依次下去

# include "reg51.h"                   // 包含头文件

#define uchar unsigned char

void  delay02s(void)                 // 延时0.2s子程序

{

unsigned  char i,j,k;

for ( i=2;i>0;i-- )

for (j=200;j>0;j-- )

for (k=250;k>0;k-- );

}

void  main (void)                    // 主函数

{

uchar i,j;

while (1)                           // 死循环

{

j=0x01;                         // j初始化为0x01,左移初始值

for(i=0;i<8;i++)                 // for循环语句,完成8个循环

{

P1= ~ j;                       // 对变量j 中的值按位取反后,从P1口输出

delay02s( );                    // 延时0.2s

j= j<<1;                       // 左移1位

}

j=0x80;                          // 设置右移初始值j为0x80

for (i=0;i<8;i++)

{

P1= ~ j;

delay02s( );

j= j>>1;                       // 右移1位

}

}

}

本回答被网友采纳
第2个回答  2015-04-22
# include "reg51.h" // 包含头文件
#define uchar unsigned char
void delay02s(void) // 延时0.2s子程序
{
unsigned char i,j,k;
for ( i=2;i>0;i-- )
for (j=200;j>0;j-- )
for (k=250;k>0;k-- );
}

void main (void) // 主函数
{
uchar i,j;
while (1) // 死循环
{
j=0x01; // j初始化为0x01,左移初始值
for(i=0;i<8;i++) // for循环语句,完成8个循环
{
P1= ~ j; // 对变量j 中的值按位取反后,从P1口输出
delay02s( ); // 延时0.2s
j= j<<1; // 左移1位
}
j=0x80; // 设置右移初始值j为0x80
for (i=0;i<8;i++)
{
P1= ~ j;
delay02s( );
j= j>>1; // 右移1位
}
}
}本回答被网友采纳
第3个回答  2015-04-22
寄存器里放0x01,然后延时一段时间后左移,循环。
第4个回答  2015-04-21
就是流水灯的程序。

最简单的了。