51单片机流水灯实验(改)

51单片机流水灯可以通过移位函数_crol_、移位运算符、数组等方法来实现。

看原理图

普通的51单片机开发板的LED模块的灯都是通过接电阻与单片机的IO口直接相连,一般连在P2口上也有其他IO口等等,写代码前要先看原理图灯连在哪里。
我的是连在P2上,如图:
图片: 在这里插入图片描述

代码如下

#include "reg52.h" 
#include<intrins.h> //包含移位函数的头文件
typedef unsigned char u8;
#define led P2   //流水灯要是接在其他IO口就把P2改过去
u8 tap[] = {0xe7,0xdb,0xbd,0x7e};
u8 tap1[] = {0x7e,0xbd,0xdb,0xe7};
static u8 a;
void Delay()	//延时函数	
{
	u8 i, j;

	for(i=0;i<255;i++)
	 for(j=0;j<255;j++);
}

void zuoyi()  //左移函数
{

  for(a=0;a<7;a++) 
    {
      led=_crol_(led, 1);
      Delay(); 
    }
}

void youyi()  //右移函数
{

   for(a=0;a<7;a++) 
     { 
       led=_cror_(led,1);
       Delay();
     }
}

void zuoyoutonshiyi()  //左右同时移动
{
	 
   for(a=0;a<4;a++)
    {
		led = tap1[a];
		Delay();
	}
		led = 0xff; 
		Delay();
		for(a=0;a<4;a++)
    {
		led = tap[a];
		Delay();
	}
		led = 0xff; 
}
void pingshan()  //八颗灯分别闪两下
{
   for(a=0;a<2;a++)
	  {
	     led = 0x0f;
	     Delay();
		 led = 0xf0;
		 Delay();
	  }

}
//可以通过主函数改变调用子函数顺序来实现花样流水灯
void main()  
{
	P0 = 0x00;  //关闭数码管的显示
    Delay();
    while(1)
     {
	   led=~0x01;  
       zuoyi();
	   Delay();
       youyi();
	   Delay();  
	   zuoyoutonshiyi();
	   Delay();
	   pingshan();
	   Delay();
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值