单片机原理及应用:流水灯的点亮

流水灯是一种简单的单片机控制电路,由许多LED组成,电路工作时LED会按顺序点亮,类似于流水的效果。

下面是运行在keil上的代码,分别使用了数组,移位符和库函数来表示。

//数组法
#include <reg52.h>     //头文件		
#define uchar unsigned char	
uchar tab[16]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f , 0xbf , 0xdf , 0xef , 0xf7 ,  0xfb , 0xfd , 0xfe };
//因为采用了共阳极接法,所以要点亮哪个灯就给哪一位赋0
//8个灯,对应两个十六进制数的八个数位
//从右到左,再从左到右,奇偶位,内外位修改数字顺序即可
void  delay(  )
{	
	uchar i,j;
   	for(i=0; i<255; i++)//为了让人眼看清灯的闪烁而延时
   	for(j=0; j<255; j++);
}

void  main(  )			//主函数		
{	
	uchar i;
	P1 = 0xff;          //熄灭所有LED,避免上电亮灯
  	while (1)			//永真
  	{	
		for(i=0;i<16; i++)
   		{	
			P1=tab[i]; 	//改变P1口的电位
   			delay( ); 	//延时函数
  		}
  	}
}

//移位符
#include <reg52.h>     		//包含reg52.h头文件
#define uchar unsigned char
void  Delay()           
{
  uchar i, j;
      for (i=0;i<255;i++)
      for (j=0;j<255;j++);
}
void main()
{ 
   uchar i, temp;
   P1 = 0xff;               	//在移位符中会舍弃数位,所以必须赋初值
   while(1)
   {
     temp = 0x01;             	//为了赋值方便,取反码给要点亮的灯赋1
     for (i=0;i<8;i++)			//奇偶位,i改4,<<2
         {
            P1 = ~ temp;      	//temp值取反送P1口
            temp = temp << 1 ; 	//左移一位
         	Delay()
		 }
     
	 temp = 0x80;             
     for (i=0;i<8;i++)			//奇偶位,i改4,>>2
         {
            P1 = ~ temp;      	//temp值取反送P1口
            temp = temp >> 1 ; 	//右移一位
			Delay();
         }
    }
	
}

//库函数
#include <reg52.h>		
#include <intrins.h>	//调用函数库	
#define uchar unsigned char

void  delay()           	
{
  uchar i,j;
      for (i=0;i<255;i++)
      for (j=0;j<255;j++);
}
void main()
{ 
	uchar i,temp;
	P1 = 0xff;               
	while (1)
	{	temp=0x7f;			
		for(i=0; i<8; i++)		  //奇偶项i改成4,temp后改成2
		{  P1=temp;		
		    delay(  );  				
		    temp=_cror_( temp,1) ;//r代表right,右移		
		}
		temp=0xfe;
		for(i=0; i<8; i++)		  //奇偶项i改成4,temp后改成2
		 { P1=temp;				  
		   delay(  );				
		   temp=_crol_( temp,1) ; //l代表left,左移		
		}
	} 
}

编译时要注意修改晶振频率并创建hex文件。

 

点亮效果呈现在proteus上,大家也可以根据仿真电路图去挑选自己需要的元器件组建不同功能的电路。

流水灯演示

谢谢大家。

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值