找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1633|回復: 17
打印 上一主題 下一主題
收起左側(cè)

一個51單片機如何控制16個LED和16個數(shù)碼管?

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1143173 發(fā)表于 2025-1-18 13:56 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:858964 發(fā)表于 2025-1-18 15:09 | 只看該作者
用8255,擴展I/O口,參考圖中電路:

回復

使用道具 舉報

板凳
ID:1143113 發(fā)表于 2025-1-18 15:36 | 只看該作者
首先,STC/AT89C51正好4*8=32個I/O,如果不加擴展芯片可以16個I/O,只剩下16個I/O要控制16個數(shù)碼管,則需要用擴展芯片,比如譯碼器或串并轉(zhuǎn)換芯片。如果數(shù)碼管的位選用3/8譯碼器74LS138控制,則需要兩片,6個I/O進行兩組3-8譯碼分別控制16個LED的使能,外加兩個I/O控制兩片74138的使能,這樣16個數(shù)碼管的位選就需要8個I/O,最后剩下8個I/O控制數(shù)碼管的8個段碼。當然,擴展I/O的方法還有很多,此處不展開說。
回復

使用道具 舉報

地板
ID:1109793 發(fā)表于 2025-1-18 15:46 | 只看該作者
TM1640驅(qū)動數(shù)碼管,如果不用小數(shù)點,把小數(shù)點連接到發(fā)光管上面就可以了。否則數(shù)碼管另外弄,或者兩個1638,發(fā)光管接多出的段碼上。
回復

使用道具 舉報

5#
ID:879348 發(fā)表于 2025-1-18 16:05 | 只看該作者
用掃描控制,這是學習單片機基礎(chǔ)課程,一般是做時鐘之類的會學到
回復

使用道具 舉報

6#
ID:69038 發(fā)表于 2025-1-18 16:18 | 只看該作者
老51就要考慮擴展IO,或復用。新的增強型51,比如某C的51,64腳的最多有60個IO,夠你折騰的了。
按你的需求,掃描模式,16+8+2=26,想必32腳的MCU就夠你用了。也不必擴展IO口。
回復

使用道具 舉報

7#
ID:807591 發(fā)表于 2025-1-18 17:02 | 只看該作者
這個不需要輸入,只是輸出,用595可能最便宜,甚至不妨再來一片單片機,畢竟可能只要2塊錢 多出60+IO
回復

使用道具 舉報

8#
ID:1133081 發(fā)表于 2025-1-18 17:17 | 只看該作者
所選芯片IO口足夠沒有任何問題,IO口不夠16個數(shù)碼管用TM1640,只要2個IO口,16個LED查理復用只要5個IO口(最多驅(qū)動20個LED)。就是編程麻煩點。
回復

使用道具 舉報

9#
ID:1129662 發(fā)表于 2025-1-18 22:30 | 只看該作者
用sm16306,直接全部驅(qū)動led,數(shù)碼管都省掉了
回復

使用道具 舉報

10#
ID:332444 發(fā)表于 2025-1-19 08:24 | 只看該作者
使用鎖存器芯片或595
回復

使用道具 舉報

11#
ID:1110945 發(fā)表于 2025-1-19 09:55 | 只看該作者
這么多的二極管和數(shù)碼管,因為電流太大,不可以IO口直接驅(qū)動,
可以用專用驅(qū)動芯片,也可以用74HC164或595驅(qū)動。
一片164或595有8個輸出口,硬件上可以分成4+4,軟件上可以做到
4x4=16的效果,就是說一片就可對付16個LED燈。16個數(shù)碼管總計
有16個位碼線,8個段碼(每個都有的abcdefgh),理論上三片就可以
驅(qū)動16個數(shù)碼管,考慮驅(qū)動速度可能沒有那么快(以消除人眼可見的
閃爍),兩片就能很好的驅(qū)動8個數(shù)碼管。
五片164可以串接起來,單片機只要兩個(595要三個)IO口就可以完美
控制16個LED和16個數(shù)碼管了。
回復

使用道具 舉報

12#
ID:161164 發(fā)表于 2025-1-19 22:29 | 只看該作者

回復

使用道具 舉報

13#
ID:92781 發(fā)表于 2025-1-20 09:19 | 只看該作者
用tm1640芯片試試,簡單易用,直接控制的數(shù)碼管太多,處理程序時候會亮度低或者閃爍。
回復

使用道具 舉報

14#
ID:584814 發(fā)表于 2025-1-20 11:41 | 只看該作者
通常的I/O口不夠,擴展就可以,用專用驅(qū)動芯片也是一種擴展。
回復

使用道具 舉報

15#
ID:57657 發(fā)表于 2025-1-21 22:57 | 只看該作者
16位數(shù)碼管(帶小數(shù)點)1位有8個段碼LED,再加上16個LED=16*8+16=144個LED 144的平方根=12,把它看成12*12的點陣,行列各12個總共24個IO口就可以驅(qū)動。
回復

使用道具 舉報

16#
ID:1143454 發(fā)表于 2025-1-31 14:57 | 只看該作者
可以通過連接一個三位的編碼器來控制
回復

使用道具 舉報

17#
ID:137736 發(fā)表于 2025-2-1 14:14 | 只看該作者
用595,164等器件擴展端口。盡量不要再用8255等太老的器件。
回復

使用道具 舉報

18#
ID:1073399 發(fā)表于 2025-2-6 19:27 | 只看該作者
1. 確定單片機型號和資源:
   檢查51單片機的具體型號,確認其I/O端口數(shù)量及是否支持內(nèi)部驅(qū)動器。
   假設單片機具有24個I/O端口,并且每個I/O可以控制一個外設。

2. 配置外設接線:
   將16個LED連接到16個不同的I/O輸出端口,確保每個端口能夠驅(qū)動至少5mA的電流。
   將16個數(shù)碼管的相應輸入線(如G、D、C)連接到剩余的I/O端口上。

3. 編寫軟件代碼:
   使用Keil C編譯器創(chuàng)建項目,設置定時器中斷,每個外設對應一個中斷。
   為每個外設定義中斷服務例程,控制其亮度和閃爍時間。

4. 實現(xiàn)定時器驅(qū)動:
   在主循環(huán)中初始化定時器,并注冊中斷處理程序。
   設置每個外設的閃爍周期和間隔,使用不同的定時器值避免沖突。

5. 測試系統(tǒng):
   通過控制臺輸出查看LED和數(shù)碼管是否正常工作。
   檢查各個外設的亮度和閃爍頻率,確保沒有異;蚋蓴_。

6. 優(yōu)化代碼:
   如有必要,將中斷服務例程簡化,避免冗余操作。
   確保每個外設能夠獨立工作,并且系統(tǒng)運行流暢。

7. 部署并驗證:
   將電路組裝完畢,連接電源并測試整個系統(tǒng)。
   檢查是否有錯誤信息或異常情況出現(xiàn),及時修正問題。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表