C51单片机- 点亮第一个灯

文章介绍了发光二极管的工作原理,以及如何通过单片机控制P20端口实现LED灯的亮灭,利用排阻限流保护电路。还探讨了延迟函数的计算方法,以及两种方式实现流水灯效果,包括循环计数和使用内置库函数左移、右移操作。

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

原理图

发光二极管原理: 当电流从发光二极管的阳极 流向阴极,则亮。所以当P20为低电平,灯亮 ,P20为高电平,灯灭

PR9 是一个排阻,用于限流,防止电流过大烧坏灯泡

#include "reg52.h"
sbit LED1 = P2^0;
//点亮第一个灯
void main(void){
    while(1){
	    LED1= 0;            //P20设置为低电平
    }
}

延迟的计算:

环境配置:

 然后在程序中打delay_us()函数打断点,查看执行完这一句耗时

时间相减少,大概就时450ms

以此类推delay 1000ms的推算,但是这种方式不精准

灯闪烁的效果:

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LED1 = P2^0;
//使用循环的方式来计算延迟时间
void delay_us(u16 time)		  	
{
while(time--);
}
//点亮第一个灯
void main(void){
    while(1){
	LED1= 0;        //亮
	delay_us(50000);	 //大约450ms
	LED1 =1;
        delay_us(50000);	 //大约450ms
    }
}

流水灯实现:

原理: P2 的0到7口逐渐拉高拉低就可以了

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
//sbit LED1 = P2^0;
#define LED_PORT P2
//使用循环的方式来计算延迟时间
void delay_us(u16 time)		  	
{
while(time--);
}
//点亮第一个灯
void main(void){
    u8 i = 8;
    while(1){
	for(i=0;i<8;i++){
		LED_PORT =~(0x01<<i);   // 0x1111110 表示P2.0亮
		delay_us(50000);
		
	}	
    }
}

使用内置的库函数 cosl cosr 左移 右移来实现流水灯的效果

#include "reg52.h"
#include "intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;
//sbit LED1 = P2^0;
#define LED_PORT P2

//使用循环的方式来计算延迟时间
void delay_us(u16 time)		  	
{
 	while(time--);

}

//点亮第一个灯
void main(void){

	u8 i = 8;
	LED_PORT = 0xfe;  //首先 先让第1个灯为0亮起来,其他为1,0X1111110 
	delay_us(50000);
	while(1){
		for(i=0;i<7;i++){
			LED_PORT = _crol_(LED_PORT,1);  //左移1位
			delay_us(50000);
		}
		for(i=0;i<7;i++){
			LED_PORT = _cror_(LED_PORT,1);  //左移1位
			delay_us(50000);
		}	
	}
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值