单片机点亮LED灯程序中,为什么LED=0为亮,LED=1为灭?(含流水灯程序)

其实题目所说的并不是绝对的,这个是需要看外围电路的,不一定是输入低电平LED就会亮,首先我们要知道灯亮是因为两侧有电压差,当LED的正极接到VCC,负极接到单片机的P1.0上,当单片机的P1.0为高电平时,此时LED两端电压一样,电流不会流动,LED不会亮,只有当P1.0为低电平是,电流才会从VCC经过LED流向P1.0,再进过单片机内部形成回路,LED就会亮了,反之一样,当LED负极接GND,正极接P1.0,当P1.0置高电平时,LED也会亮,置于低电平时,LED不会亮。

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
void main()
{
	temp=0xfe;   
	P1=temp;    //表示第一个灯亮
	while(1)
	{
		temp=_crol_(temp,1);    //左移函数
		delay(600);    //延时
		P1=temp;
	}
}
void delay()  //延时函数
{
uint x,y;
for(x=100;x>0;X--)
	for(y=600;y>0;y--);
}

此时是当P1=0时灯亮;对于C51单片机语言,P1有其特定的含义,特指通用输入输出端口(GPIO)的第0组端口。也就是说,P1是和硬件芯片上的一组管脚,共计8个管脚相对应的。

我也是一个正在学习单片机的小白,希望我的笔记能给您带来帮助,如有错误也请指出,谢谢!

  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 好的,下面是一个使用 8051 单片机点亮 LED 流水灯程序: ``` #include <8051.h> void delay(unsigned int t) { while (t--); } void main() { unsigned char i; while (1) { for (i = 0; i < 8; i++) { P1 = 1 << i; delay(50000); } for (i = 7; i > 0; i--) { P1 = 1 << i; delay(50000); } } } ``` 这段代码实现了一个简单的 LED 流水灯效果,其 `P1` 变量代表 8051 单片机的端口 1,用来控制 LED 的亮灭。 希望对您有所帮助。 ### 回答2: 当然可以帮你写一个8051单片机点亮LED流水灯程序。以下是一个基本示例程序: ``` #include <reg51.h> // 包8051单片机头文件 sbit LED1 = P1^0; // 定义LED1为P1.0引脚 sbit LED2 = P1^1; // 定义LED2为P1.1引脚 sbit LED3 = P1^2; // 定义LED3为P1.2引脚 sbit LED4 = P1^3; // 定义LED4为P1.3引脚 void Delay(unsigned int time) // 延时函数 { unsigned int i, j; for(i = 0; i < time; i++) for(j = 0; j < 1275; j++); } void main() // 主函数 { while(1) // 无限循环 { LED1 = 1; // 点亮LED1 Delay(1000); // 延时1秒 LED1 = 0; // 关闭LED1 LED2 = 1; // 点亮LED2 Delay(1000); // 延时1秒 LED2 = 0; // 关闭LED2 LED3 = 1; // 点亮LED3 Delay(1000); // 延时1秒 LED3 = 0; // 关闭LED3 LED4 = 1; // 点亮LED4 Delay(1000); // 延时1秒 LED4 = 0; // 关闭LED4 } } ``` 在上述程序,我们使用了P1口的四个引脚(P1.0-P1.3)来连接四个LED程序的`Delay`函数用于延时,实现流水灯效果。 希望这个程序对你有帮助!如果有任何疑问,请随时提问。 ### 回答3: 当然可以帮你写一个8051单片机点亮LED流水灯程序。以下是一个简单的程序示例: ```c #include <8051.h> #define LED P1 // 用P1口控制LED void delay(unsigned int time) { // 延时函数 unsigned int i,j; for(i=0; i<time; i++) for(j=0; j<1275; j++); } void main() { unsigned char pattern; // 存储带模式 pattern = 0x01; // 初始化带模式,从最低位开始点亮 while(1) { LED = pattern; // 将带模式输出到LED delay(200); // 延时一段时间,可根据需要调整 pattern = pattern << 1; // 带模式左移一位 if(pattern == 0x00) // 如果模式变为0,则重新从最低位开始 pattern = 0x01; } } ``` 这是一个基本的程序,通过调用延时函数来控制LED的亮灭,实现了流水灯效果。程序使用P1口来控制LED,定义了一个延时函数用来控制的亮灭间隔,然后在主函数循环处理LED点亮模式。首先将带模式输出到LED,然后延时一段时间,再将带模式左移一位,如果模式变为0,则重新从最低位开始。这样循环执行,就能实现流水灯效果。 需要注意的是,具体的程序可能会有一些细微的差别,根据不同的开发环境和硬件平台,一些相关的配置和引脚设置可能会有所不同。因此,为了确保程序正常运行,你可能需要根据自己的实际情况进行适当的修改和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值