04 51單片機之數碼管顯示

文章目錄

  • 1、前言
  • 2、數碼管
  • 3、單個數碼管引腳定義
    • 3-1、單個共陰極
    • 3-2、單個共陽極
    • 3-3、單個數碼管引腳定義
  • 4、四位一體數碼管引腳定義
    • 4-1、四位一體共陰極數碼管
    • 4-2、四位一體共陽極數碼管
    • 4-3、四位一體數碼管引腳定義
  • 5、數碼管原理圖
  • 6、C51數組(補充知識點)
  • 7、C51子函數(補充知識點)
  • 8、靜態數碼管顯示
    • 8-1、基礎版本
    • 8-2、數碼管段碼表
    • 8-3、靜態數碼管顯示Plus
    • 8-4、實驗現象
  • 9、動態數碼管顯示
    • 9-1、基礎版本
    • 9-2、實驗現象
    • 9-3、動態數碼管顯示(消影)
    • 9-4、實驗現象
  • 10、數碼管驅動方式


1、前言

在前面的文章中介紹了51單片機之獨立按鍵控制LED狀態,今天介紹單片機的數碼管,下面將介紹數碼管的顯示其中包含了動態數碼管靜態數碼管兩種。


2、數碼管

數碼管其實就是由多個發光二極管封裝在一起組成“8”字型的器件當分別點亮這些發光二極管時就可以組成不同的數字顯示出來。
在這里插入圖片描述

Figure1. 數碼管

3、單個數碼管引腳定義

3-1、單個共陰極

所有LED的陰極連接在一起,通過控制陽極的高電平來點亮對應的段
在這里插入圖片描述

Figure2. 單個共陰極數碼管

3-2、單個共陽極

所有LED的陽極連接在一起,通過控制陰極的低電平來點亮對應的段

在這里插入圖片描述

Figure3. 單個共陽極數碼管

3-3、單個數碼管引腳定義

數碼管通常由7個或8個LED組成,分別對應數字0到9和英文字母A到F等字符的顯示方式。每個LED可以看作是一個“像素”,通過點亮不同的LED組合,可以展示不同的字符或圖形。

在這里插入圖片描述

Figure4. 單個數碼管引腳定義

4、四位一體數碼管引腳定義

4-1、四位一體共陰極數碼管

在這里插入圖片描述

Figure5. 四位一體共陰極數碼管

4-2、四位一體共陽極數碼管

在這里插入圖片描述

Figure6. 四位一體共陽極數碼管

4-3、四位一體數碼管引腳定義

在這里插入圖片描述

Figure7. 四位一體數碼管引腳定義

舉例說明:假設四位一體數碼管需要顯示數字為()()(1)(),則在Figure6. 四位一體共陰極數碼管途中,將DIG3設置為低電平(置0),DIG1、DIG2、DIG4為高點平(置1);然后引腳7、4設置為高點平(置1),其余引腳(11、2、1、10、5、3)設置為低電平(置0)


5、數碼管原理圖

從下圖可以知道8個數碼管通過了一個74HC245芯片單片機的P00-P07相連接。74HC138譯碼器通過P22-P24輸出的相對于的電平選擇控制哪個具體的數碼管。由于3-8譯碼器是輸出低電平有效,則原理圖中的四位一體數碼管是共陰極連接。74HC245芯片主要是用于數據緩沖功能,其中DIR表述傳輸方向,若是高電平,則是將Ax的數據傳輸給Bx;否則,則是將Bx的數據傳輸給Ax。OE表示使能引腳(低電平有效)。

在這里插入圖片描述

Figure8. 數碼管原理圖

Table1. 3-8譯碼器輸出表(低有效)
C(P2_4)B(P2_3)A(P2_2)YLED
000Y0LED0
001Y1LED1
010Y2LED2
011Y3LED3
100Y4LED4
101Y5LED5
110Y6LED6
111Y7LED7

6、C51數組(補充知識點)

數組:把相同類型的一系列數據統一編制到某一個組別中,可以通過數組名+索引號簡單快捷的操作大量數據。

int x[3]; //定義一組變量(3個)
int x[]={1,2,3}; //定義一組變量并初始化
x[0] //引用數組的第0個變量
x[1] //引用數組的第1個變量
x[2] //引用數組的第2個變量

引用×[3]時,數組會越界。讀出的數值不確定,應避免這種操作。


7、C51子函數(補充知識點)

子函數:將完成某一種功能的程序代碼單獨抽取出來形成一個不模塊在主函數中可隨時調用此模塊,以達到代碼的復用和優化程序結構的目的

void Function(unsigned char x, y)
{}
返回值函數名(形參)
{函數體
}

8、靜態數碼管顯示

8-1、基礎版本

在這里插入圖片描述

Figure9. 數碼管顯示數字程序One

#include <REGX52.H>void main()
{unsigned int i = 0;/* Select LED6 to light up. set /Y5. */P2_2 = 1;P2_3 = 0;P2_4 = 1;/* Control LED6 show number(6), set a,c,d,e,f,g. */P0 = 0x7D;while(1){}
}

注意:讓LED6的數碼管顯示數字6,則需要點亮a,c,d,e,f,g等六個端口,則如下圖所示:
在這里插入圖片描述

Figure10. 數碼管顯示數字設置

8-2、數碼管段碼表

Table2. 數碼管段碼表(0~F)
數字abcdefgdp段碼
0111111000x3F
1011000000x06
2110110100x5B
3111100100x4F
4011001100x66
5101101100x6D
6101111100x7D
7111000000x07
8111111100x7F
9111101100x6F
A111011100x77
B001111100x7C
C100111000x39
D011110100x5E
E100111100x79
F100011100x71
None000000000x00

8-3、靜態數碼管顯示Plus

在這里插入圖片描述

Figure11. 數碼管顯示數字程序Plus

#include <REGX52.H>unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};void Nixie(unsigned char Location, Number)
{switch (Location){case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break; // LED8case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break; // LED7case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break; // LED6case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break; // LED5case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break; // LED4case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break; // LED3case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break; // LED2case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break; // LED1}P0 = NixieTable[Number];
}void main()
{Nixie(2,4);while(1){}}

8-4、實驗現象

在這里插入圖片描述

Figure12. 數碼管顯示數字2(LED7)

9、動態數碼管顯示

9-1、基礎版本

在這里插入圖片描述

Figure13. 數碼管動態顯示數字程序

#include <REGX52.H>unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};void DelayMs(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void Nixie(unsigned char Location, Number)
{switch (Location){case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break; // LED8case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break; // LED7case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break; // LED6case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break; // LED5case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break; // LED4case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break; // LED3case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break; // LED2case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break; // LED1}P0 = NixieTable[Number];
}void main()
{unsigned int i;while(1){for(i = 1; i <= 8; i++){Nixie(i,i+1);DelayMs(i);}		}
}

9-2、實驗現象

動態數碼管顯示


9-3、動態數碼管顯示(消影)

在這里插入圖片描述

Figure14. 數碼管動態顯示數字程序(消影)

#include <REGX52.H>unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};void DelayMs(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void Nixie(unsigned char Location, Number)
{switch (Location){case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break; // LED8case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break; // LED7case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break; // LED6case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break; // LED5case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break; // LED4case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break; // LED3case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break; // LED2case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break; // LED1}P0 = NixieTable[Number];DelayMs(1);P0 = 0x00;
}void main()
{unsigned int i;while(1){for(i = 1; i <= 8; i++){Nixie(i,i+1);DelayMs(i);}		}
}

9-4、實驗現象

動態數碼管顯示(消影)


10、數碼管驅動方式

  1. 單片機直接掃描:硬件設備簡單,但會耗費大量的單片機CPU時間。
  2. 專用驅動芯片:內部自帶顯存、掃描電路,單片機只需告訴它顯示什么即可。
    在這里插入圖片描述
Figure15. 數碼管專用驅動芯片

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

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

相關文章

【LLM】OpenRouter調用Anthropic Claude上下文緩存處理

背景 在使用OpenRouter調用Anthropic Claude大模型時&#xff0c;部分模型支持上下文緩存功能。當緩存命中時&#xff0c;調用成本會顯著降低。雖然像DeepSeek這類模型自帶上下文緩存機制&#xff0c;但本文主要針對構建Agent場景下&#xff0c;需要多次調用Anthropic Claude時…

【C++】第十七節—二叉搜索樹(概念+性能分析+增刪查+實現+使用場景)

好久不見&#xff0c;我是云邊有個稻草人 《C》本文所屬專欄—持續更新中—歡迎訂閱 目錄 一、二叉搜索樹的概念 二、二叉搜索樹的性能分析 三、二叉搜索樹的插入 SearchBinaryTree.h test.cpp 四、?叉搜索樹的查找 【只有一個3】 【有多個3】 五、?叉搜索樹的刪除…

Redis都有哪些數據結構,使用場景與原理解析

? String&#xff1a;字符串&#xff08;最常用、最簡單的類型&#xff09;&#x1f4cc; 應用場景&#xff1a;計數器&#xff08;如&#xff1a;頁面瀏覽量、點贊數、轉發數等&#xff09;緩存單個值&#xff08;如&#xff1a;token、驗證碼、用戶昵稱&#xff09;分布式鎖…

將EXCEL或者CSV轉換為鍵值對形式的Markdown文件

# 創建命令行參數解析器parser argparse.ArgumentParser(description將 CSV 或 Excel 文件轉換為帶標頭的 Markdown 格式)# 必需參數parser.add_argument(input_file, help輸入文件路徑 (CSV 或 Excel))parser.add_argument(output_file, help輸出 Markdown 文件路徑)# 可選參…

MySQL 配置性能優化實操指南:分版本5.7和8.0適配方案

在 MySQL 性能優化中&#xff0c;不同版本的特性差異會直接影響優化效果。本文基于 MySQL 5.7 和 8.0 兩個主流版本&#xff0c;通過版本適配的配置代碼、場景舉例和通俗解釋&#xff0c;讓優化方案更精準落地。一、硬件與系統配置優化&#xff08;基礎層優化&#xff09;1. 服…

【STM32實踐篇】:串口通信

文章目錄1. 串行通信與并行通信2. 異步通信與同步通信3. 單工&#xff0c;半雙工和全雙工通信4. 通信速率和接口標準5. USART 結構框圖6. 串口電路6.1 串口之間的連接6.2 串口與 RS232 的轉換和連接6.3 串口與 RS485 的轉換和連接6.4 串口與 USB 的轉換和連接7. USART 字符說明…

Trae IDE評測體驗:通過 MCP Server - Figma AI Bridge 一鍵將 Figma 轉為前端代碼

Trae IDE評測體驗&#xff1a;通過 MCP Server - Figma AI Bridge 一鍵將 Figma 轉為前端代碼 在現代前端開發中&#xff0c;從設計稿到可用頁面的交付往往需要大量重復勞動&#xff1a;切圖、手寫樣式、布局調整……而借助 MCP Server - Figma AI Bridge&#xff0c;我們可以…

文獻閱讀 250715-Atmospheric rivers cause warm winters and extreme heat events

Atmospheric rivers cause warm winters and extreme heat events 來自 <Atmospheric rivers cause warm winters and extreme heat events | Nature> ## Abstract: Definition: Atmospheric rivers (ARs) are narrow regions of intense water vapour transport in the …

線上協同辦公時代:以開源AI大模型等工具培養網感,擁抱職業變革

摘要&#xff1a;在提倡線上協同辦公的時代背景下&#xff0c;職場人需迅速提升工作能力以適應職業變革。培養網感成為時代所需&#xff0c;它為快速連接時代奠定基礎。本文深入探討了開源AI大模型、AI智能名片、S2B2C商城小程序源碼等工具在培養網感過程中的重要作用&#xff…

Netty網絡聊天室及擴展序列化算法

一、前言Netty是一個基于Java的高性能、事件驅動的網絡應用框架&#xff0c;廣泛應用于各種網絡通信場景。本文將介紹如何使用Netty構建一個簡單的網絡聊天室&#xff0c;并擴展序列化算法來提高數據傳輸效率和靈活性。二、Netty網絡聊天室的實現1. 項目結構我們將使用Maven構建…

基于單片機金沙河糧倉環境監測系統設計與實現

摘 要 本文圍繞基于單片機的金沙河糧倉環境監測系統展開設計與實現研究。系統以單片機為核心&#xff0c;集成 DHT11、MQ - 135 等傳感器&#xff0c;可實時精準監測糧倉溫濕度、氣體成分等關鍵環境參數。借助 LoRa、ESP8266 實現數據的可靠傳輸與遠程通信 &#xff0c;OLED 屏…

如何解決Android Studio安裝時無法下載SDK的問題(Windows、Linux、Mac解決方案大全)

如何解決Android Studio安裝時無法下載SDK的問題&#xff08;Windows、Linux、Mac解決方案大全&#xff09; 前言 對于全棧開發者而言&#xff0c;安裝 Android Studio 是邁向 Android 開發的第一步&#xff0c;但在 Windows、Linux、macOS 等不同平臺上&#xff0c;經常會遇…

SQL Server從入門到項目實踐(超值版)讀書筆記 21

9.5 數據的內連接查詢連接是關系數據庫模型的主要特點&#xff0c;連接查詢是關系數據庫中最主要的查詢&#xff0c;主要包括內連接、外連接等。內連接查詢操作列出與連接條件匹配的數據行&#xff0c;它使用比較運算符比較被鏈接列的列值。具體語法格式如下&#xff1a;SELECT…

瑞芯微7月17日舉辦開發者大會,多款AIoT新品發布,觸覺智能RK方案商報導

瑞芯微第九屆開發者大會RKDC 2025將有多款新品發布。 據瑞芯微電子Rockchip此前宣布&#xff1a;該企業的本年度開發者大會RKDC 2025將于7月17~18日在福建福州海峽國際會展中心舉行。本次瑞芯微開發者大會以“AIoT模型創新重做產品”為主題&#xff0c;關注傳統IoT功能設備向場…

Eureka+Ribbon實現服務注冊與發現

目錄 一、相關文章 二、兼容說明 三、服務注冊 四、服務發現 一、相關文章 基礎工程&#xff1a;gradle7.6.1springboot3.2.4創建微服務工程-CSDN博客 Eureka服務端啟動&#xff1a;https://blog.csdn.net/cherishSpring/article/details/149473554 Ribbon負載均衡&#…

數據庫、HTML

一、數據庫 數據庫文件與普通文件區別: 普通文件對數據管理(增刪改查)效率低2.數據庫對數據管理效率高&#xff0c;使用方便 常用數據庫: 1.關系型數據庫: 將復雜的數據結構簡化為二維表格形式 大型:0racle、DB2 中型:MySq1、sQLServer 小型:Sqlite 2.非關系型數據庫以鍵值對…

RCE隨筆(1)

哪些是可以執行代碼執行&#xff1a;php代碼。eval如&#xff1a;eval:<?php eval($_post[key]);eval&#xff1a;php中不被叫做函數叫動態執行命令assert&#xff1a;執行函數call_user_func_array<?php call_user_func_array(assert,array($_REQUEST[shu]));傳入xxs-…

FPGA——ZYNQ7020學習日記(PS端)4(開始PS控制VGA顯示)

1.DMA 我們的整體VGA顯示分為幾步&#xff1a;比如先導入VIDEO TIMING CONTROL來做對輸入數據的時序“對齊”&#xff0c;這里開源騷客寫的很詳細&#xff0c;先用了一個虛擬IO&#xff08;VIO)來作為輸入&#xff0c;導入了一個簡單的RTL模塊&#xff08;當VTL的使能信號有效…

AGX Xavier 搭建360環視教程【補充一:魚眼去畸變(Fisheye Undistortion)】

對每路幀做魚眼去畸變除了用cv::cuda::remap是否有更好的辦法呢&#xff1f;確實 cv::cuda::remap 不是唯一可選項&#xff0c;甚至未必是最高效或最適合實際業務量級的方案。&#x1f3af; 1?? 去畸變的原理魚眼相機&#xff08;或者大廣角相機&#xff09;會把直線拉彎&…

tomato靶機練習

下載完靶機后&#xff0c;直接運行&#xff0c;選擇安裝路徑后將虛擬機的網絡設置為nat模式&#xff0c;設置完成后重啟虛擬機掃描同一網段&#xff0c;查找主機&#xff0c;這里我們使用kali的nmap&#xff0c;既能找到主機&#xff0c;也能查看開啟的端口依次嘗試&#xff0c…