找回密码
 立即注册
查看: 74|回复: 1

【虹星宝典】I0口操作-点亮LED

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:347
  • 最近打卡:2025-05-01 08:57:33
已绑定手机

30

主题

111

回帖

1659

积分

荣誉版主

Rbowlystar

积分
1659
发表于 2025-4-20 13:39:07 | 显示全部楼层 |阅读模式



今天(2025-04-10)学习了一下点亮LED。
学会点灯是学习单片机的第一步,即学会操作IO口。


首先,需要看一下原理图,找到操作LED的IO口是哪些,想要点亮一颗LED灯需要如何操作电路的电平。

截图202504201242377754.jpg

很好,这是一个共阳极的8路LED电路图,LED的阳极通过一个PNP三极管控制,以决定是否为8个LED输送电能。
当LED_ON为低电平时,即PNP三极管的基极为低电平时,三极管将导通,3.3V的电源流过三极管,为后继的8个LED提供有效的电源。
此时,LED的阳极已经为高电平了,只需要将LED的阴极设置为低电平,既可导通点亮LED。
也就是说,想要点亮LED20,我们只需要将P20这个引脚设置为低电平既可。



截图202504201243044606.jpg
当然也不要忘了,将LED_ON(P07)设置为低电平以打开LED的总电源。

不出意外的话,你点亮一个LED的代码应该是这样的,也将成功点亮一个LED
    P07 = 0;    // 打开LED电源
    P20 = 0;        // LED P20 On



很棒,当你成功点亮一颗LED灯时,离流水灯、跑马灯...还会远吗?
自己试一下应该怎么操作吧~!
我的实例代码中提供了4种实现跑马灯的程序,
如果你学会了,请尝试在AI8051U实验箱中复刻出来。


注:本次例程使用了USB-CDC,后续将改用串口下载。


方案一
最简单易懂的跑马灯程序,单独循环控制每个灯的亮灭,实现跑马灯
截图202504201245136181.jpg



方案二
使用C语言库中的循环右移函数,相比方案一,只需要两行代码,程序十分简洁

截图202504201246008465.jpg



方案三
与方案二一样,只是跑马灯的移动方向相反

截图202504201246075134.jpg



方案四
与方案一的方式一致,不同的是,使用宏定义的方式进行控制,代码可读性更强。

截图202504201246227248.jpg
截图202504201246345093.jpg


1-LED.zip (314.5 KB, 下载次数: 0)



回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-20 13:43:00 | 显示全部楼层
虹星宝典】I0口操作-点亮LED  
2025-04-10  

点亮LED:单片机入门的第一步  

点亮LED是学习单片机开发的基础操作,也是掌握IO口控制的关键技能。本文将以共阳极8路LED电路为例,详细讲解如何通过控制IO口实现LED的点亮。  

1. 电路原理分析  
首先,我们需要明确电路的工作原理。根据提供的原理图,这是一个共阳极的8路LED电路,其核心控制元件为PNP三极管。  
共阳极结构:8个LED的阳极通过PNP三极管连接至33V电源,阴极分别连接到单片机的IO口。  
三极管控制:当PNP三极管的基极(LEDON)为低电平时,三极管导通,33V电源为LED提供工作电压。  
LED点亮条件:LED的阳极已为高电平,只需将对应阴极的IO口设置为低电平,即可点亮LED。  

具体到本例:  
LEDON(P07):控制PNP三极管的基极,低电平时导通,为LED供电。  
P20:控制LED20的阴极,低电平时点亮LED20。  

2. 代码实现  
根据上述原理,点亮LED20的代码如下:  
  1. c
  2. P07 = 0;    // 打开LED电源,使PNP三极管导通
  3. P20 = 0;    // 将P20设置为低电平,点亮LED20
复制代码


代码解析:  
1. P07 = 0:将P07引脚设置为低电平,使PNP三极管导通,为LED提供电源。  
2. P20 = 0:将P20引脚设置为低电平,使LED20的阴极与阳极形成电位差,点亮LED。  

3. 扩展与优化  
在实际开发中,点亮LED的操作可以进一步优化和扩展:  

3.1 多LED控制  
如果需要同时点亮多个LED,只需将对应IO口设置为低电平。例如,点亮LED20、LED21和LED22:  
  1. c
  2. P07 = 0;    // 打开LED电源
  3. P20 = 0;    // 点亮LED20
  4. P21 = 0;    // 点亮LED21
  5. P22 = 0;    // 点亮LED22
复制代码


3.2 延时与闪烁  
通过添加延时函数,可以实现LED的闪烁效果。例如,让LED20以1秒间隔闪烁:  
  1. c
  2. while (1) {
  3.     P20 = 0;    // 点亮LED20
  4.     delay(1000); // 延时1秒
  5.     P20 = 1;    // 熄灭LED20
  6.     delay(1000); // 延时1秒
  7. }
复制代码


3.3 封装函数  
为了提高代码的可读性和复用性,可以将点亮LED的操作封装为函数:  
  1. c
  2. void LEDOn(int pin) {
  3.     P07 = 0;    // 打开LED电源
  4.     pin = 0;    // 点亮指定LED
  5. }
  6. void LEDOff(int pin) {
  7.     pin = 1;    // 熄灭指定LED
  8. }
复制代码


4. 注意事项  
在实际操作中,需注意以下几点:  
1. IO口配置:确保相关IO口已配置为输出模式。  
2. 电源电压:确认LED的电源电压(本例为33V)与电路设计匹配。  
3. 电流限制:LED的电流需通过限流电阻控制在安全范围内。  
4. 代码调试:若LED未点亮,可通过万用表测量IO口电平,排查硬件或代码问题。  

5. 总结  
通过本文的学习,我们掌握了如何通过控制IO口点亮LED,并了解了共阳极LED电路的工作原理。点亮LED是单片机开发的基础操作,也是后续复杂功能开发的起点。希望本文能为您的学习提供帮助,祝您在单片机开发的道路上不断进步!  

国芯人工智能  
2025-04-10

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 20:53 , Processed in 0.583781 second(s), 58 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表