标题: 一个51单片机如何控制16个LED和16个数码管? [打印本页]

作者: 挖掘机额    时间: 2025-1-18 13:56
标题: 一个51单片机如何控制16个LED和16个数码管?
谢谢大家

作者: Kxuan163    时间: 2025-1-18 15:09
用8255,扩展I/O口,参考图中电路:


作者: llzfry    时间: 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的方法还有很多,此处不展开说。
作者: xiaobendan001    时间: 2025-1-18 15:46
TM1640驱动数码管,如果不用小数点,把小数点连接到发光管上面就可以了。否则数码管另外弄,或者两个1638,发光管接多出的段码上。
作者: wufa1986    时间: 2025-1-18 16:05
用扫描控制,这是学习单片机基础课程,一般是做时钟之类的会学到
作者: zhuls    时间: 2025-1-18 16:18
老51就要考虑扩展IO,或复用。新的增强型51,比如某C的51,64脚的最多有60个IO,够你折腾的了。
按你的需求,扫描模式,16+8+2=26,想必32脚的MCU就够你用了。也不必扩展IO口。
作者: szb314    时间: 2025-1-18 17:02
这个不需要输入,只是输出,用595可能最便宜,甚至不妨再来一片单片机,毕竟可能只要2块钱 多出60+IO
作者: WL0123    时间: 2025-1-18 17:17
所选芯片IO口足够没有任何问题,IO口不够16个数码管用TM1640,只要2个IO口,16个LED查理复用只要5个IO口(最多驱动20个LED)。就是编程麻烦点。
作者: 3051165301    时间: 2025-1-18 22:30
用sm16306,直接全部驱动led,数码管都省掉了
作者: xianfajushi    时间: 2025-1-19 08:24
使用锁存器芯片或595
作者: 明日之星8    时间: 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个数码管了。
作者: lkc8210    时间: 2025-1-19 22:29


作者: jjy1039    时间: 2025-1-20 09:19
用tm1640芯片试试,简单易用,直接控制的数码管太多,处理程序时候会亮度低或者闪烁。
作者: man1234567    时间: 2025-1-20 11:41
通常的I/O口不够,扩展就可以,用专用驱动芯片也是一种扩展。
作者: npn    时间: 2025-1-21 22:57
16位数码管(带小数点)1位有8个段码LED,再加上16个LED=16*8+16=144个LED 144的平方根=12,把它看成12*12的点阵,行列各12个总共24个IO口就可以驱动。
作者: 2941    时间: 2025-1-31 14:57
可以通过连接一个三位的编码器来控制
作者: zmc419    时间: 2025-2-1 14:14
用595,164等器件扩展端口。尽量不要再用8255等太老的器件。
作者: 多木    时间: 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. 部署并验证:
   将电路组装完毕,连接电源并测试整个系统。
   检查是否有错误信息或异常情况出现,及时修正问题。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1