单片机原理及应用:LED闪烁与延时

上篇文章介绍了流水灯的三种代码架构,这次来分享一下LED剩下的几种点亮模式。

灯组延时闪烁

闪烁主要考察的就是延时函数的应用,书中一共有三种延时函数的设置方式,分别应用于不同的场景,这里介绍的是第一种,用两个for循环嵌套组成,数量级为万。

#include       
//sbit LED=P1^0;           //定义LED是P1.0位对应的变量,这是只有一个灯的情况,注意P要大写
						 //如果是一组led,直接用P1表示

void  Delay()            //延时函数1
{
  unsigned char i, j;
      for (i=0;i<255;i++)	//两个for循环间是嵌套关系,没有分号
      for (j=0;j<255;j++);
}

void  main()			 
{
   while(1)
    {
       //LED = 0;          //如果是共阳极接法,点亮LED需要单片机引脚输出低电位,共阴极则相反
	   P1 = 0;          //51单片机一共有四组引脚,每组引脚都可以控制8个LED
       Delay();          //调用延时函数
       //LED = 1;          //熄灭led灯
	   P1 = 0xff;		 //八个灯分别对应两个16进制数的二进制数位,84218421
       //P1 = ~0x00;     //为了更直观的表示灯点亮的控制码,可以采用取反操作赋值1
       Delay();
    }
}

无论是要实现哪种功能的C51代码,都要具备三条语句,分别是头文件,主函数和永真循环。

而电路里必需的电路有两个,分别是电源电路和晶振电路,在仿真软件中常默认具备以上电路不用另行设置。

单片机原理及应用:LED闪烁与延时_第1张图片

LED及灯组闪烁演示

效果如视频所示,接线有些粗糙,后面会介绍网络标号法,用来处理复杂电路的接线问题。 

高低位、奇偶位、内外位

这三种模式都取决于引脚赋值,其中奇偶位还可以调用移位符达到类似流水灯的效果。 

#include       

void  Delay()            //这几类灯的延时函数均相同
{
  unsigned char i, j;
      for (i=0;i<255;i++)
      for (j=0;j<255;j++);
}

void  main()			 
{
   while(1)
    {
	   P1 = 0xf0;        //高低位模式点亮低位
	   //P1 = 0x55;      //奇偶位模式点亮奇位
	   //P1 = 0x3c;      //内外位模式点亮内位 
       Delay();          
	   P1 = 0x0f;		 //高低位模式点亮高位
	   //P1 = 0xaa;      //奇偶位模式点亮偶位
	   //P1 = 0xc3;      //内外位模式点亮外位
       Delay();
    }
}

LED高低位、奇偶位、内外位演示

 使用移位符可以有效减少赋值的次数,LED点亮效果同上述代码。

#include       
#include 	//库函数会将舍弃的高位补到低位,保证值不丢失
void  Delay()            
{
  unsigned char i, j;
      for (i=0;i<255;i++)
      for (j=0;j<255;j++);
}

void  main()			 
{  P1 = 0x55;        //赋初值点亮奇位
   while(1)
    {         
	   P1 = _crol_(P1,1); //移位符点亮点亮偶位,之后再转为奇位
       Delay();
    }
}

 除了库函数方式外,数组法可以控制奇偶位点亮,移位符由于低位补零的原因不予考虑。

关于LED的点亮方式已经全部介绍完了,之后我们会学习新的外设——数码管,谢谢大家。 

你可能感兴趣的:(单片机原理及应用,单片机,嵌入式硬件,proteus,c语言,51单片机)