數碼管LED顯示屏矩陣驅動技術詳解

1. 矩陣驅動原理

矩陣驅動是LED顯示屏常用的一種高效驅動方式,利用COM(Common,公共端)和SEG(Segment,段選)線的交叉點控制單個LED的亮滅。相比直接驅動,矩陣驅動可以顯著減少所需I/O引腳數量。

基本原理

- **直接驅動**:每個LED需要一個獨立的I/O引腳
- **矩陣驅動**:N×M矩陣只需N+M個I/O引腳

例如,驅動16個LED:
- 直接驅動:需要16個I/O引腳
- 4×4矩陣驅動:只需8個I/O引腳(4個COM + 4個SEG)

?2. COM-SEG引腳對應關系

標準7段數碼管引腳定義

    a---
f |   | b| g |---
e |   | c|   |---d    ? dp

每個段與數據位的對應關系:
- bit0 → a段
- bit1 → b段
- bit2 → c段
- bit3 → d段
- bit4 → e段
- bit5 → f段
- bit6 → g段
- bit7 → dp段(小數點)

硬件連接方式

在4位數碼管(常見配置)中:
- COM線連接到每個數碼管的公共端(可能是共陽或共陰)
- SEG線并聯連接到所有數碼管的對應段

COM0 → 數碼管1公共端
COM1 → 數碼管2公共端
COM2 → 數碼管3公共端
COM3 → 數碼管4公共端SEG0 → 所有數碼管的a段
SEG1 → 所有數碼管的b段
...
SEG7 → 所有數碼管的dp段

?3. 掃描刷新機制

矩陣驅動采用時分復用技術,通過快速掃描實現視覺上的"同時顯示":

1. 激活COM0,設置SEG0-7的狀態,點亮數碼管1
2. 關閉COM0,激活COM1,設置SEG0-7的狀態,點亮數碼管2
3. 依此類推,循環重復

刷新過程人眼不可察覺,通常刷新頻率需>60Hz。

4. 代碼實現示例

初始化設置

void User_LED_Init()
{LED_InitStruct.Instance = LED_LCD;LED_InitStruct.Init.COMdriveLock = LED_LCD_COMNOLOCK; //COM口大電流不開啟LED_InitStruct.Init.SegIOSel = 0x00ff; //LED segl口選擇LED_InitStruct.Init.ComIOSel = 0x0f; ? //COMl口選擇(使用COM0-COM3四個口)LED_InitStruct.Init.ScanWidth = 0x05; ?//LED周期配置LED_InitStruct.Init.DutySel = LED_DUTYSEL_4_8; //占空比設置為4/8HAL_LED_Init(&LED_InitStruct);HAL_LED_StartScan(&LED_InitStruct); //啟動LED循環掃描模式
}

?段碼定義

// 定義0-9數字對應的段碼
uint32_t Led_arr_num[10] = {0x3F, // 0: 0011 1111 - 點亮a,b,c,d,e,f0x06, // 1: 0000 0110 - 點亮b,c0x5B, // 2: 0101 1011 - 點亮a,b,d,e,g0x4F, // 3: 0100 1111 - 點亮a,b,c,d,g0x66, // 4: 0110 0110 - 點亮b,c,f,g0x6D, // 5: 0110 1101 - 點亮a,c,d,f,g0x7D, // 6: 0111 1101 - 點亮a,c,d,e,f,g0x07, // 7: 0000 0111 - 點亮a,b,c0x7F, // 8: 0111 1111 - 點亮a,b,c,d,e,f,g0x6F  // 9: 0110 1111 - 點亮a,b,c,d,f,g
};

數據更新

// 所有數碼管顯示相同數字
void display_same_number(uint8_t number) {if(number > 9) return; // 驗證輸入HAL_LED_ARR_Data(LED_LCD_COM_0, Led_arr_num[number]);HAL_LED_ARR_Data(LED_LCD_COM_1, Led_arr_num[number]);HAL_LED_ARR_Data(LED_LCD_COM_2, Led_arr_num[number]);HAL_LED_ARR_Data(LED_LCD_COM_3, Led_arr_num[number]);
}// 顯示4位數字(范圍0-9999)
void display_number(uint16_t number) {uint8_t digit1 = number % 10;uint8_t digit2 = (number / 10) % 10;uint8_t digit3 = (number / 100) % 10;uint8_t digit4 = (number / 1000) % 10;HAL_LED_ARR_Data(LED_LCD_COM_0, Led_arr_num[digit1]);HAL_LED_ARR_Data(LED_LCD_COM_1, Led_arr_num[digit2]);HAL_LED_ARR_Data(LED_LCD_COM_2, Led_arr_num[digit3]);HAL_LED_ARR_Data(LED_LCD_COM_3, Led_arr_num[digit4]);
}// 顯示帶小數點的數字
void display_with_decimal(uint16_t number, uint8_t decimal_pos) {uint8_t digit1 = number % 10;uint8_t digit2 = (number / 10) % 10;uint8_t digit3 = (number / 100) % 10;uint8_t digit4 = (number / 1000) % 10;HAL_LED_ARR_Data(LED_LCD_COM_0, Led_arr_num[digit1]);HAL_LED_ARR_Data(LED_LCD_COM_1, Led_arr_num[digit2]);HAL_LED_ARR_Data(LED_LCD_COM_2, Led_arr_num[digit3]);HAL_LED_ARR_Data(LED_LCD_COM_3, Led_arr_num[digit4]);// 在指定位置添加小數點(0為最右側數碼管)if(decimal_pos < 4) {uint32_t current_value = 0;switch(decimal_pos) {case 0: current_value = HAL_LED_Read_Data(LED_LCD_COM_0);HAL_LED_ARR_Data(LED_LCD_COM_0, current_value | 0x80);break;case 1: current_value = HAL_LED_Read_Data(LED_LCD_COM_1);HAL_LED_ARR_Data(LED_LCD_COM_1, current_value | 0x80);break;case 2: current_value = HAL_LED_Read_Data(LED_LCD_COM_2);HAL_LED_ARR_Data(LED_LCD_COM_2, current_value | 0x80);break;case 3: current_value = HAL_LED_Read_Data(LED_LCD_COM_3);HAL_LED_ARR_Data(LED_LCD_COM_3, current_value | 0x80);break;}}
}

5. 掃描頻率與占空比

關鍵參數說明:

1. **掃描寬度(ScanWidth)**:
? ?- 決定COM口掃描時間:period = (scan_width+1) × 16us
? ?- 示例:掃描寬度5對應96us的COM周期

2. **占空比(DutySel)**:
? ?- 定義COM口導通時間占周期的比例
? ?- 常見配置:4/8(50%)占空比

這兩個參數影響顯示的亮度和功耗。

6. 應用實例:時鐘顯示

void display_clock(uint8_t hours, uint8_t minutes) {uint8_t hour_tens = hours / 10;uint8_t hour_units = hours % 10;uint8_t min_tens = minutes / 10;uint8_t min_units = minutes % 10;// 顯示時間格式: HH:MM (小數點作為冒號)HAL_LED_ARR_Data(LED_LCD_COM_0, Led_arr_num[min_units]);HAL_LED_ARR_Data(LED_LCD_COM_1, Led_arr_num[min_tens]);HAL_LED_ARR_Data(LED_LCD_COM_2, Led_arr_num[hour_units] | 0x80); // 添加小數點作為冒號HAL_LED_ARR_Data(LED_LCD_COM_3, Led_arr_num[hour_tens]);
}

7. 矩陣驅動優缺點

優點
- 顯著減少I/O引腳需求
- 降低功耗
- 簡化PCB設計

缺點
- 需要軟件不斷刷新
- 同一時刻只有一位數碼管點亮
- 亮度受刷新頻率和占空比影響

?8. 結論

矩陣驅動技術是數碼管和LED顯示應用中的基礎技術,通過時分復用實現多位數顯示,平衡了硬件復雜度和顯示效果。掌握COM-SEG對應關系和掃描機制,可以輕松實現各種數字、字符甚至自定義圖形的顯示。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77633.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77633.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【上位機——MFC】菜單類與工具欄

菜單類 CMenu&#xff0c;封裝了關于菜單的各種操作成員函數&#xff0c;另外還封裝了一個非常重要的成員變量m_hMenu(菜單句柄) 菜單使用 添加菜單資源加載菜單 工具欄相關類 CToolBarCtrl-》父類是CWnd&#xff0c;封裝了關于工具欄控件的各種操作。 CToolBar-》父類是CC…

liunx中常用操作

查看或修改linux本地mysql端口 cat /etc/my.cnf 如果沒有port可以添加&#xff0c;有可以修改 查看本地端口占用情況 bash netstat -nlt | grep 3307 HADOOP集群 hdfs啟動與停止 # 一鍵啟動hdfs集群 start-dfs.sh # 一鍵關閉hdfs集群 stop-dfs.sh #除了一鍵啟停外&#x…

衡石chatbi如何通過 iframe 集成

iframe 集成方式是最簡單的一種&#xff0c;您只需要在您的 HTML 文件中&#xff08;或 Vue/React 組件中&#xff09;添加一個 iframe 元素&#xff0c;并設置其 src 屬性為 AI 助手的 URL。 <iframesrc"https://develop.hengshi.org/copilot"width"100%&q…

Java集合框架深度解析:HashMap、HashSet、TreeMap、TreeSet與哈希表原理詳解

一、核心數據結構總覽 1. 核心類繼承體系 graph TDMap接口 --> HashMapMap接口 --> TreeMapSet接口 --> HashSetSet接口 --> TreeSetHashMap --> LinkedHashMapHashSet --> LinkedHashSetTreeMap --> NavigableMapTreeSet --> NavigableSet 2. 核心特…

HTTP 1.0 和 2.0 的區別

HTTP 1.0 和 2.0 的核心區別體現在性能優化、協議設計和功能擴展上&#xff0c;以下是具體對比&#xff1a; 一、核心區別對比 特性HTTP 1.0HTTP 2.0連接方式非持久連接&#xff08;默認每次請求新建 TCP 連接&#xff09;持久連接&#xff08;默認保持連接&#xff0c;可復用…

gnome中刪除application中失效的圖標

什么是Application 這一塊的東西應該叫application&#xff0c;準確來說應該是applications。 正文 系統級&#xff1a;/usr/share/applications 用戶級&#xff1a;~/.local/share/applications ying192 ~/.l/s/applications> ls | grep xampp xampp.desktoprm ~/.local…

OpenFeign 使用教程:從入門到實踐

文章目錄 一、什么是 OpenFeign&#xff1f;1、什么是 OpenFeign&#xff1f;2、什么是 Feign&#xff1f;3、OpenFeign 與 Feign 的關系4、為什么選擇 OpenFeign&#xff1f;5、總結 二、OpenFeign 的使用步驟1. 導入依賴2. 啟用 OpenFeign3. 配置 Nacos 三、FeignClient 參數…

藍橋杯 16.對局匹配

對局匹配 原題目鏈接 題目描述 小明喜歡在一個圍棋網站上找別人在線對弈。這個網站上所有注冊用戶都有一個積分&#xff0c;代表他的圍棋水平。 小明發現&#xff0c;網站的自動對局系統在匹配對手時&#xff0c;只會將積分差恰好是 K 的兩名用戶匹配在一起。如果兩人分差小…

C#常用LINQ

在開發時發現別人的代碼使用到了LINQ十分便捷且清晰&#xff0c;這里記錄一下常用LINQ和對應的使用。參考鏈接&#xff1a;LINQ 菜鳥教程 使用的學生類和字符串用于測試 public class Student {public int StudentID;public string StudentName;public int Age; }Student[] st…

單例模式(線程安全)

1.什么是單例模式 單例模式&#xff08;Singleton Pattern&#xff09;是一種創建型設計模式&#xff0c;旨在確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來訪問該實例。這種模式涉及到一個單一的類&#xff0c;該類負責創建自己的對象&#xff0c;同時確保只有單…

Python 之 __file__ 變量導致打包 exe 后路徑輸出不一致的問題

現象 做項目的時候&#xff0c;一直使用 os.path.dirname(os.path.abspath(__file__)) 來獲取當前目錄。然而&#xff0c;最近卻遇到了一個路徑相關的問題。直接運行 py 文件是正常的&#xff0c;但是打包成 exe 之后&#xff0c;卻顯示因為路徑問題導致程序報錯無法繼續執行。…

PH熱榜 | 2025-04-21

1. Google Whisk 2.0 標語&#xff1a;將圖像轉換為八秒的動畫短片。 介紹&#xff1a;Whisk 是谷歌實驗室的一項新創新&#xff0c;現在推出了 Whisk Animate——它可以將你的圖片轉換成生動的8秒視頻&#xff0c;采用了 Veo 2 技術。此功能現已在60多個國家的 Google One A…

AI大模型 —— 國產大模型 —— 華為大模型

有這么一句話&#xff0c;那就是AI大模型分兩種&#xff0c;一種是大模型&#xff1b;另一種是華為大模型。 如果從技術角度來分析&#xff0c;華為的技術不論是在軟件還是硬件都比國外的大公司差距極大&#xff0c;甚至有些技術評論者認為華為的軟硬件技術至少落后2.5代&#…

FPGA 中 XSA、BIT 和 DCP 文件的區別

在 FPGA&#xff08;現場可編程門陣列&#xff09;開發中&#xff0c;XSA、BIT 和 DCP 文件是常見的文件類型&#xff0c;它們在功能、用途、文件內容等方面存在明顯區別&#xff0c;以下是詳細介紹&#xff1a; 1. XSA 文件 定義與功能 XSA&#xff08;Xilinx Shell Archiv…

MH2103系列coremark1.0跑分數據和優化,及基于arm2d的優化應用

CoreMark 1.0 介紹 CoreMark 是由 EEMBC&#xff08;Embedded Microprocessor Benchmark Consortium&#xff09;組織于 2009 年推出的一款用于衡量嵌入式系統 CPU 或 MCU 性能的標準基準測試工具。它旨在替代陳舊的 Dhrystone 標準&#xff08;Dhrystone 容易受到各種libc不同…

云原生與AI的關系是怎么樣的?

云原生與AI的結合正在重塑現代應用的開發與部署模式&#xff0c;兩者相輔相成&#xff0c;共同推動技術創新與產業升級。以下是兩者的核心概念、結合點及未來趨勢的詳細解析&#xff1a; 一、云原生與AI的核心概念 云原生&#xff08;Cloud Native&#xff09; ? 定義&#…

【CentOs】構建云服務器部署環境

(一) 服務器采購 2 CPU4G 內存40G 系統盤 80G 數據盤 (二) 服務器安全組和端口配置 (三) 磁盤掛載 1 登錄 root 2 查看目前磁盤使用情況 df -h 3 查看磁盤掛載情況 識別哪些磁盤沒掛載 fdisk -l 4 對未掛載磁盤做分區 fdisk /dev/vdb 輸入m&#xff0…

LangChain4j語言模型選型指南:主流模型能力全景對比

LangChain4j語言模型選型指南&#xff1a;主流模型能力全景對比 前言 在大語言模型應用開發中&#xff0c;選擇合適的底層模型提供商是架構設計的關鍵決策。LangChain4j作為Java生態的重要AI框架&#xff0c;其支持的20模型提供商各有獨特的優勢場景。本文通過功能矩陣深度解…

2025.4.21日學習筆記 JavaScript String、Array、date、math方法的使用

1. String&#xff08;字符串&#xff09; String 對象用于處理和操作文本數據。 length&#xff1a;返回字符串的長度。 const str "Hello"; console.log(str.length); // 輸出: 5 charAt(index)&#xff1a;返回指定索引位置的字符。 const str "Hello…

(14)VTK C++開發示例 --- 將點投影到平面上

文章目錄 1. 概述2. CMake鏈接VTK3. main.cpp文件4. 演示效果 更多精彩內容&#x1f449;內容導航 &#x1f448;&#x1f449;VTK開發 &#x1f448; 1. 概述 計算一個點在一個平面上的投影。 vtkPlane 是 VTK&#xff08;Visualization Toolkit&#xff09;庫中的一個類&…