单片机流水灯原理及实现方法

1.这部分代码定义了两个新的数据类型,uchar和uint,分别表示无符号字符型和无符号整型。这里使用了#define预处理指令,将uchar和uint分别定义为unsigned char和unsigned int的别名,方便在代码中使用。

另外,还声明了两个变量i和j,i是一个无符号整型变量,j是一个无符号字符型变量。这些变量在程序中用于计数、循环等操作。这里使用了unsigned关键字,将变量定义为无符号类型,即只能表示非负数,可以增加程序的稳定性和可移植性。同时P1.0引脚对应的LED灯。

 #include <reg52.h>.
 #include <intrins.h>
 #define  uchar unsigned char
 #define  uint unsigned int

 uint i	;
 uchar j ;

 sbit led=P1^0;

2.延时部分
uint k中的变量k是表示延时的时间,单位是毫秒(ms)。在函数delay()中,循环次数的计算是通过一个嵌套的for循环来实现的。内层的for循环用来控制延时的时间,外层的for循环则用来重复执行内层的循环,以实现总的延时时间。
具体来说,内层的for循环中的变量j用来计数,每循环一次就增加1,当j的值达到230时,for循环结束,就意味着已经延时了一定的时间(因为在运行单片机程序时,每个循环的时间是一定的,因此可以通过控制循环次数来实现精确的延时)。而外层的for循环则用来重复内层的延时操作,即执行多次内层的循环以实现总的延时时间。内层循环的次数由参数k来控制,每执行一次外层的循环,变量i就增加1,直到i的值达到k为止,整个延时过程就结束了。因此,函数delay()的参数k实际上是用来控制延时时间的。在main()函数中调用delay()时,传入的参数值就是控制LED灯闪烁间隔的时间,也就是1秒,即delay(1000)。内层循环中的空语句{ ; }不做任何操作,只是用来占用一定的CPU时间,产生一个粗略的延时效果。

 void delay(uint k)
 {
 for (i=0;i<k;i++)
 {
  for (j=0;j<230;j++)
  {
  ;
  }
 }
 }

3.流水灯部分主程序
这段代码是一个简单的流水灯程序,使用了单片机控制输出端口P1上的LED灯。程序开始时将P1口设置为0xfe(1111 1110),这将使P1口的最低位的LED灯关闭。然后等待1秒钟,读取P1的值并将其存储在变量b中。
接下来,程序进入一个无限循环中,通过使用_crol_和_cror_函数将变量b中的值左移和右移,从而使LED灯在P1口上按顺序点亮和熄灭。在每个循环迭代中,程序等待1秒钟,以控制流水灯的速度。主要是循环左移,右移,赋值和延时。

main()
{
uchar a,b;
P1=0xfe;
delay_ms(1000) ;
b=P1  ;

while(1)
{
for(a=0;a<7;a++)
{
   b=_crol_(b,1) ;
   P1=b;
   delay_ms(1000);
}
for(a=0;a<7;a++)
{
   b=_cror_(b,1) ;
   P1=b;
   delay_ms(1000);
}

}

}
物联沃分享整理
物联沃-IOTWORD物联网 » 单片机流水灯原理及实现方法

发表回复