找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1887|回复: 17
收起左侧

一个51单片机如何控制16个LED和16个数码管?

  [复制链接]
ID:1143173 发表于 2025-1-18 13:56 | 显示全部楼层 |阅读模式
谢谢大家
回复

使用道具 举报

ID:1073399 发表于 2025-2-6 19:27 | 显示全部楼层
1. 确定单片机型号和资源:
   检查51单片机的具体型号,确认其I/O端口数量及是否支持内部驱动器。
   假设单片机具有24个I/O端口,并且每个I/O可以控制一个外设。

2. 配置外设接线:
   将16个LED连接到16个不同的I/O输出端口,确保每个端口能够驱动至少5mA的电流。
   将16个数码管的相应输入线(如G、D、C)连接到剩余的I/O端口上。

3. 编写软件代码:
   使用Keil C编译器创建项目,设置定时器中断,每个外设对应一个中断。
   为每个外设定义中断服务例程,控制其亮度和闪烁时间。

4. 实现定时器驱动:
   在主循环中初始化定时器,并注册中断处理程序。
   设置每个外设的闪烁周期和间隔,使用不同的定时器值避免冲突。

5. 测试系统:
   通过控制台输出查看LED和数码管是否正常工作。
   检查各个外设的亮度和闪烁频率,确保没有异常或干扰。

6. 优化代码:
   如有必要,将中断服务例程简化,避免冗余操作。
   确保每个外设能够独立工作,并且系统运行流畅。

7. 部署并验证:
   将电路组装完毕,连接电源并测试整个系统。
   检查是否有错误信息或异常情况出现,及时修正问题。
回复

使用道具 举报

ID:137736 发表于 2025-2-1 14:14 | 显示全部楼层
用595,164等器件扩展端口。尽量不要再用8255等太老的器件。
回复

使用道具 举报

ID:1143454 发表于 2025-1-31 14:57 | 显示全部楼层
可以通过连接一个三位的编码器来控制
回复

使用道具 举报

ID:57657 发表于 2025-1-21 22:57 | 显示全部楼层
16位数码管(带小数点)1位有8个段码LED,再加上16个LED=16*8+16=144个LED 144的平方根=12,把它看成12*12的点阵,行列各12个总共24个IO口就可以驱动。
回复

使用道具 举报

ID:584814 发表于 2025-1-20 11:41 | 显示全部楼层
通常的I/O口不够,扩展就可以,用专用驱动芯片也是一种扩展。
回复

使用道具 举报

ID:92781 发表于 2025-1-20 09:19 | 显示全部楼层
用tm1640芯片试试,简单易用,直接控制的数码管太多,处理程序时候会亮度低或者闪烁。
回复

使用道具 举报

ID:161164 发表于 2025-1-19 22:29 | 显示全部楼层
GIF_250119_222839.gif
回复

使用道具 举报

ID:1110945 发表于 2025-1-19 09:55 | 显示全部楼层
这么多的二极管和数码管,因为电流太大,不可以IO口直接驱动,
可以用专用驱动芯片,也可以用74HC164或595驱动。
一片164或595有8个输出口,硬件上可以分成4+4,软件上可以做到
4x4=16的效果,就是说一片就可对付16个LED灯。16个数码管总计
有16个位码线,8个段码(每个都有的abcdefgh),理论上三片就可以
驱动16个数码管,考虑驱动速度可能没有那么快(以消除人眼可见的
闪烁),两片就能很好的驱动8个数码管。
五片164可以串接起来,单片机只要两个(595要三个)IO口就可以完美
控制16个LED和16个数码管了。
回复

使用道具 举报

ID:332444 发表于 2025-1-19 08:24 | 显示全部楼层
使用锁存器芯片或595
回复

使用道具 举报

ID:1129662 发表于 2025-1-18 22:30 | 显示全部楼层
用sm16306,直接全部驱动led,数码管都省掉了
回复

使用道具 举报

ID:1133081 发表于 2025-1-18 17:17 | 显示全部楼层
所选芯片IO口足够没有任何问题,IO口不够16个数码管用TM1640,只要2个IO口,16个LED查理复用只要5个IO口(最多驱动20个LED)。就是编程麻烦点。
回复

使用道具 举报

ID:807591 发表于 2025-1-18 17:02 | 显示全部楼层
这个不需要输入,只是输出,用595可能最便宜,甚至不妨再来一片单片机,毕竟可能只要2块钱 多出60+IO
回复

使用道具 举报

ID:69038 发表于 2025-1-18 16:18 | 显示全部楼层
老51就要考虑扩展IO,或复用。新的增强型51,比如某C的51,64脚的最多有60个IO,够你折腾的了。
按你的需求,扫描模式,16+8+2=26,想必32脚的MCU就够你用了。也不必扩展IO口。
回复

使用道具 举报

ID:879348 发表于 2025-1-18 16:05 | 显示全部楼层
用扫描控制,这是学习单片机基础课程,一般是做时钟之类的会学到
回复

使用道具 举报

ID:1109793 发表于 2025-1-18 15:46 | 显示全部楼层
TM1640驱动数码管,如果不用小数点,把小数点连接到发光管上面就可以了。否则数码管另外弄,或者两个1638,发光管接多出的段码上。
回复

使用道具 举报

ID:1143113 发表于 2025-1-18 15:36 | 显示全部楼层
首先,STC/AT89C51正好4*8=32个I/O,如果不加扩展芯片可以16个I/O,只剩下16个I/O要控制16个数码管,则需要用扩展芯片,比如译码器或串并转换芯片。如果数码管的位选用3/8译码器74LS138控制,则需要两片,6个I/O进行两组3-8译码分别控制16个LED的使能,外加两个I/O控制两片74138的使能,这样16个数码管的位选就需要8个I/O,最后剩下8个I/O控制数码管的8个段码。当然,扩展I/O的方法还有很多,此处不展开说。
回复

使用道具 举报

ID:858964 发表于 2025-1-18 15:09 | 显示全部楼层
用8255,扩展I/O口,参考图中电路: 15-6-22-8255电路图.jpg

回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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