51单片机4种流水灯

51单片机4种流水灯4种流水灯:1、先从右到左逐个亮灭;再从左到右逐个亮灭;2、由两侧向中间,再中间向两侧亮灭;3、先右再左逐个亮起,不熄灭;再从左到右逐个熄灭;4、先左再右逐个亮起,不熄灭;再从右到左逐个熄灭;

大家好,又见面了,我是你们的朋友全栈君。

  • 程序说明: LED连接在P2引脚上。
  • 程序现象:
    1、先从右到左逐个亮灭;再从左到右逐个亮灭;
    2、由两侧向中间,再中间向两侧亮灭;
    3、先右再左逐个亮起,不熄灭;再从左到右逐个熄灭;
    4、先左再右逐个亮起,不熄灭;再从右到左逐个熄灭;
#include "reg52.h" 

#define led P2	//对整个P2端口进行操作

/*	延时函数		*/
void delay(unsigned int del) 	//10ms * del
{
	unsigned int i,j;
	for(i=0; i<del; i++)
	for(j=0; j<1827; j++)      
	    ;
}

void  Led_Pipeline_1() //先从右到左逐个亮灭;再从左到右逐个亮灭;
{
	unsigned  char i;	
	delay(10); 
	led=0xfe;	//初始状态将LED0点亮

	for(i=0;i<8;i++)//	1111 1110
	{
		P2=~(0x01<<i);	 //将0000 0001左移i位,然后将结果取反赋值到P2口
		delay(20); 	//大约延时200ms
	}
//	led=0xFF; //熄灭所有LED
//	delay(20); 
	for(i=1;i<8;i++)
	{
		P2=~(0x80>>i);	 //将1右移i位,然后将结果取反赋值到P2口
		delay(20); 
	}	
//	led=0xFF; //熄灭所有LED
}
void Led_Pipeline_2() //两侧向中间,再中间向两侧亮灭
{
	unsigned  char i,High,Low;
	delay(20);
	led=0x7E;	//初始状态将两侧点亮
	High=led&0xF0;	//高四位 0111 0000
	Low=led&0x0F;	//低四位 0000 1110 
	delay(30);
	for(i=0;i<3;i++)
	{
		High=~(~High>>1);	 //将0x8F右移1位 0100 0111, 1011 1000
		Low=~(~Low<<1);	     //将0xFE左移1位
		
		led=(High&0xF0)|(Low&0x0F);//保证高位、低位不受到移位影响
		delay(30);
	}	
//	led=0xFF; //熄灭所有LED
//	delay(20);
//	led=0xE7;//初始状态将中间两颗LED点亮
//	delay(30);
	for(i=0;i<3;i++)
	{						 //1110 0111
		High=~(~High<<1);	 //将0x1*左移i位
		Low=~(~Low>>1);	 	 //将0x*8右移i位  
		
		led=(High&0xF0)|(Low&0x0F);//保证高位、低位不受到移位影响
		delay(30);
	}	
	led=0xFF; //熄灭所有LED
}

void Led_Pipeline_3() //先右再左逐个亮起,不熄灭;再从左到右逐个熄灭;
{
	unsigned  char i;	
	delay(20);
	led=0xfe;	//初始状态将LED0点亮
	delay(10);
	for(i=0;i<8;i++)
	{
		P2=0xFE<<i;	 //将1111 1110左移i位,然后将结果赋值到P2口
		delay(10); 	//大约延时100ms
	}
	led=0xFF; //熄灭所有LED
	for(i=0;i<8;i++)
	{
		P2=~(0xFF>>i);	 //将1111 1111右移i位,然后将结果取反赋值到P2口
		delay(10); 
	}	
	led=0xFF; //熄灭所有LED
}

void Led_Pipeline_4() //先左再右逐个亮起,不熄灭;再从右到左逐个熄灭;
{
	unsigned  char i;	
	delay(20);
	led=0x7F;	
	delay(10);
	for(i=0;i<8;i++)
	{
		P2=0x7F>>i;	 
		delay(10); 
	}
	led=0xFF; 
	for(i=0;i<8;i++)
	{
		P2=~(0xFF<<i);
		delay(10); 
	}	
	led=0xFF; //熄灭所有LED
}
void main()
{
	while(1)
	{
		Led_Pipeline_1();
		Led_Pipeline_2();
		Led_Pipeline_3();
		Led_Pipeline_4();
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132933.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手表英文月份缩写对照表_日期缩写格式

    手表英文月份缩写对照表_日期缩写格式一月份=JAN.Jan.=January二月份=FEB.Feb.=February三月份=MAR.Mar.=March四月份=APR.Apr.=April五月份=MAYMay=May

    2022年8月5日
    2
  • K8S(V1.10.1)高可用集群超详细版本(包含Dashboard、Rancher)

    K8S(V1.10.1)高可用集群超详细版本(包含Dashboard、Rancher)

    2021年5月30日
    125
  • 精选目标检测3——yolo1、yolo2、yolo3和SSD的网络结构汇总对比

    精选目标检测3——yolo1、yolo2、yolo3和SSD的网络结构汇总对比学习前言各个网络的结构图与其实现代码1、yolo12、yolo23、yolo34、SSD总结学习前言……最近在学习yolo1、yolo2和yolo3,事实上它们和SSD网络有一定的相似性,我准备汇总一下,看看有什么差别。各个网络的结构图与其实现代码1、yolo1在这里插入图片描述由图可见,其进行了二十多次卷积还有四次最大池化,其中3×3卷积用于提取特征,1×1卷积用于压缩特征,最后将图像压缩到7x7xfilter的大小,相当于将整个图像划分为7×7

    2022年6月15日
    32
  • nginx转发mysql连接

    nginx转发mysql连接场景:访问UAT环境,只能使用客户电脑访问,太难用了,于是就需要在自己电脑上跑代码,通过客户电脑中转来访问uat环境的数据库。选用nginx进行转发。配置如下:stream{upstreamcloudsocket{hash$remote_addrconsistent;server192.168.182.155:3306weight=5max_fails=3fail_timeout=30s;}server{

    2022年10月19日
    0
  • datax(22):任务分配规则

    datax(22):任务分配规则前面学习了一些源码和datax的执行,其中有一个重要的流程任务切分。今天梳理下;一、概述Datax根首先据配置文件,确定好channel的并发数目。然后将整个job分成一个个小的task,然后划分成组。从JobContainer的start()方法开始,进入split()方法,split方法里执行后续所有的切分;二、总体流程切分任务channel数目的确定reader的切分Writer的切分合并配置分配任务三、切分任务JobContainer的split负责将整个jo.

    2022年5月17日
    90
  • 绑定运行计划sql_plan_baseline[通俗易懂]

    绑定运行计划sql_plan_baseline

    2022年1月23日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号