Step1 :【C51】LED灯闪烁、跑马灯、流水灯、实现每次亮两个灯的流水灯

本文详细介绍使用C51语言实现LED灯的各种显示效果,包括闪烁、跑马灯及流水灯等。通过具体的代码示例,讲解如何控制LED灯实现不同效果,并介绍位操作和移位操作的相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

S t e p 1 Step1 Step1 :【C51】LED灯闪烁、跑马灯、流水灯、实现每次亮两个灯的流水灯

在我所使用的开发板中,LED采用共阳极接法,即所有LED阳极管脚接电源VCC,其阴极管脚接到P2口上。因此,LED发光时,其对应的阴极管脚应为低电平;LED熄灭时,其对应的阴极管脚应为高电平。

LED模块( L E D 0 − 7 LED_{0-7} LED07,8个LED灯):

LED0LED1LED2LED3LED4LED5LED6LED7

LED灯闪烁

​ 要求:点亮LED0并让其闪烁。

​ 实现方法:循环让LED灯亮一段时间、熄灭一段时间。(需要用到延时函数)

​ 实现代码:

#include<reg52.h>
sbit LED0=P2^0;
void delay(int n);//延时函数
void main()
{
	while(1)//一个死循环,循环执行LED1亮、灭灯操作
	{
		LED0=0;//亮灯
		delay(1000);//延时约1s
		LED0=1;//灭灯
		delay(1000);
	}
}
void delay(int n)
{
	int i,j;
	for(i=1;i<=n;i++)
		for(j=0;j<100;j++);
}

LED跑马灯

​ 要求:实现LED跑马灯,需要循环让LED0-LED7逐个点亮。

​ 实现方法:移位方法实现跑马灯。(方法不唯一)

​ LED灯具体亮灭情况如下表:

P2端口值LED0LED1LED2LED3LED4LED5LED6LED7
0xFE
0xFD
0xFB
0xF7
0xEF
0xDF
0xBF
0x7F

​ 实现代码:

#include<reg52.h>
#include<intrins.h>//进行移位操作的头文件
void delay(int times);
void main()
{
	int i;
	while(1)
	{
		 P2=0xFE;//P2口的8个引脚被赋值成1111,1110,代表只有P2^0口是低电平,其余都是高电平。
                 //即只有LED0亮,其余LED灯处于熄灭状态。 
                 //8个引脚与0xFE的2进制分别对应!
		 for(i=0;i<8;i++)
		 {
		  	P2=_crol_(P2,1);//每次循环左移一位。
			delay(1000);
		 }
	}
}
void delay(int times)
{
	times=times*10000;
	while(times--);
}

LED流水灯

​ 要求:实现LED流水灯,需要循环让LED0-LED7依次点亮。

​ 实现方法:移位方法实现流水灯。(方法不唯一)

​ LED灯具体亮灭情况如下表:

P2端口值LED0LED1LED2LED3LED4LED5LED6LED7
0xFE
0xFD
0xFB
0xF7
0xEF
0xDF
0xBF
0x7F

​ 实现代码:

#include<reg52.h>
void delay(int times);
void main()
{
	int i;
	while(1)
	{
		 for(i=0;i<8;i++)
		 {
		  	P2=0xFE<<i;//每次逻辑左移i位
		  			   //注意逻辑移位和循环移位的区别(本文末有提及)
			delay(1000);
		 }
	}
}
void delay(int times)
{
	times=times*10000;
	while(times--);
}

实现每次亮两个灯的流水灯

​ 要求:每次亮起相邻两个灯,闪烁三次后,移动一位。

​ 实现方法:结合LED灯闪烁和流水灯实验所用的方法,稍加改动即可。

​ 实现代码:

#include<reg52.h>
#include<intrins.h>
void delay(int times);
void main()
{
	int i,temp,times;
	while(1)
	{
		 P2=0xFC;//11111100->LED0、LED1亮
		 for(i=0;i<8;i++)
		 {
		 	temp=_crol_(P2,1);
		 	times=3;
			while(times--!=0)//闪烁三次
			{
				P2=temp;
				delay(1000);
				P2=0xFF;//11111111->所有LED灯熄灭
				delay(1000);
				P2=temp;//因为进行熄灭操作时将P2赋值为了0xFF,即11111111
					    //若不引入temp变量暂存当前P2的值,之后的移位操作将毫无意义
					    //你会发现LED灯一直不会亮(因为P2的8个引脚全为1了,咋移都亮不了)
			}
		 }
	}
}
void delay(int times)
{
	times=times*10000;
	while(times--);
}

补充知识

①bit 和 sbit 型

​它们在内存中都只占一个二进制位,其值可以是“1”或“0”。其中:用 bit 定义的位变量在C51编译器编译时,在不同的时候位地址是可以变化的,而用 sbit 定义的位变量必须与51单片机的一个可以寻址位单元或可位寻址的字节单元中的某一位联系在一起,在C51编译器编译时,其对应的位地址是不可变化的。

bit— 位变量声明,当定义一个位变量时可使用此符号。

sbit— 特殊功能位声明, 也就是声明某一个特殊功能寄存器中的某一位。

sfr-对单字节的特殊功能寄存器的数据声明,声明一个8位的寄存器。

sfr16—对双字节的特殊功能寄存器的数据声明。

②C51的移位操作

循环移位:

_crol_:字符循环左移。将char型变量循环向左移动指定位数后返回(将高位补低位)

_cror_:字符循环右移。将char型变量循环向左移动指定位数后返回(将高位补低位)

_irol_:整数循环左移。将int型变量循环向左移动指定位数后返回(将高位补低位)

_iror_:整数循环右移。将int型变量循环向右移动指定位数后返回(将低位补高位)

逻辑移位:

<<:逻辑左移。左移时,低位补0;高位移出的部分舍弃。

>>:逻辑右移。右移时,高位补0;低位移出的部分舍弃。

在 macOS 上安装 nginx 的第三方模块可以使用 Homebrew 包管理器来简化过程。以下是安装第三方模块的步骤: 1. 首先,确保您已经安装了 Homebrew。如果您还没有安装,可以在终端中运行以下命令来安装 Homebrew: ``` /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` 2. 安装 nginx。在终端中运行以下命令来使用 Homebrew 安装 nginx: ``` brew install nginx ``` 3. 找到您想要安装的第三方 nginx 模块。您可以通过在搜索引擎上搜索或访问模块的官方网站来找到合适的模块。 4. 下载并解压第三方模块的源代码。将源代码解压到一个您可以方便访问的位置。 5. 进入解压后的模块源代码目录,并使用 `./configure` 命令配置编译选项。在这个命令中,您可以通过添加 `--add-dynamic-module=/path/to/module` 来指定要安装的模块。例如: ``` ./configure --add-dynamic-module=/path/to/module ``` 请将 `/path/to/module` 替换为您要安装的模块的实际路径。 6. 完成配置后,运行 `make` 命令编译 nginx。 7. 编译完成后,在终端中运行以下命令将编译好的模块复制到 nginx 的模块目录: ``` cp objs/*.so /usr/local/Cellar/nginx/{version}/libexec/modules/ ``` 请将 `{version}` 替换为您当前安装的 nginx 版本号。 8. 在终端中运行以下命令启动 nginx: ``` brew services start nginx ``` 现在,您已经成功安装了第三方模块,并且可以在 nginx 的配置文件中启用和配置它们。 请注意,安装第三方模块可能需要一些编译工具和依赖项。如果出现任何错误或依赖项缺失,您可能需要安装相应的工具和库。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值