单片机控制灯的亮与灭程序详解

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

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

 #include <reg52.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.主函数
进入while循环,开始执行主程序。
将LED灯的引脚P1.0置为低电平,即点亮LED灯。调用延时函数delay(1000),延时1秒钟。将LED灯的引脚P1.0置为高电平,即关闭LED灯。再次调用延时函数delay(1000),延时1秒钟。回到while循环的开始处,继续亮灯灭灯操作,使LED灯每隔一秒钟闪烁一次。
其中while(1)是一个死循环,它的意思是在程序运行过程中一直执行循环内的语句,因为条件表达式的值始终为真(非零),所以这个循环将无限执行下去,直到单片机复位或程序被手动停止

   void main ()
 {
   while(1)
   	{
	led=0;
   delay(1000);
   led=1;
   delay(1000);
	}
 }
物联沃分享整理
物联沃-IOTWORD物联网 » 单片机控制灯的亮与灭程序详解

发表评论