【51單片機系列】74HC595實現對LED點陣的控制

本文是關于LED點陣的使用,使用74HC595模塊實現對LED點陣的控制。

文章目錄

  • 一、8x8LED點陣的原理
    • 1.1 LED點陣顯示原理
    • 1.2 LED點陣內部結構圖
    • 1.3 開發板上的LED點陣原理圖
    • 1.4 74HC595芯片
  • 二、使用74HC595模塊實現流水燈效果
  • 三、 使用74HC595模塊控制LED點陣對角線亮

一、8x8LED點陣的原理

1.1 LED點陣顯示原理

LED點陣是由發光二極管排列組成的顯示器件,被廣泛應用于汽車報站器、廣告屏等。如下所示:

image-20231208092451292

proteus中的8x8點陣如下:

PROTEUS中的LED點陣

通常應用較多的是8x8點陣,使用多個8x8點陣可組成不同分辨率的LED點陣顯示屏,比如16x16點陣可以使用4個8x8點陣構成。

1.2 LED點陣內部結構圖

8x8LED點陣內部結構圖如下,這兩種圖片只是接法不同,要點亮LED,左圖需要行置為高電平,列置為低電平;右圖則需要行置為低電平,列置為高電平。

8x8LED點陣內部結構圖

8x8點陣共由64個發光二極管組成,且每個發光二極管是放置在行線和列線的交叉點上,當對應的某一行置高電平,某一列置低電平,則相應的二極管將點亮。

比如對于左圖,如果要將第一個點點亮,則將第一行的⑨腳接高電平,第一列的13腳接低電平,第一個點就會點亮;如果要將第一行點亮,則第一行的⑨腳接高電平,所有列(13、3、4、10、6、11、15、16腳)接低電平,第一行就會點亮;如果要將第一列點亮,則第一列的13腳接低電平,所有行(9、14、8、12、1、7、2、5腳)接高電平,第一列就會點亮;如果要將對角線點亮,可以動態顯示,首先點亮第一個點,然后點亮第2行第2列的點…這樣依次循環點亮,就可以顯示對角線的點。

如果要顯示數字或字符,在需要的位置點亮,比如顯示0(如下),可以循環點亮如下位置的LED。

LED點陣顯示0

1.3 開發板上的LED點陣原理圖

開發板上使用了74HC595芯片實現串轉并,接到LED點陣模塊,原理圖如下:

LED點陣原理圖

74HC595起到了擴展IO口的功能,從原理圖可以看到74HC595使用3個IO口輸入,有8個IO口輸出。這8個IO口控制LED點陣的行(從第一行到最后一行分別是D7-D0),使用P0口控制LED點陣的列(從第一列到最后一列分別是P07-P00)。

比如對于如上結構圖左圖所示,如果要點亮第一個LED,那么P0口應該置為0x7f,D7-D0應該置為0x80。

1.4 74HC595芯片

74HC595芯片具有8為串行輸入/輸出或者并行輸出移位寄存器,具有三態輸出(高電平、低電平、高阻態)。是總線驅動的并行輸出。通常用于串行輸入到并行輸出的數據轉換。

74HC595引腳說明如下:

符號引腳描述
Q0…Q7(QA…QH)15,1-7并行數據輸出
GND8邏輯地
Q7’9串行數據輸出
/MR(/SRCLR)10主復位(低電平有效),接到GND就處于復位狀態,要接到電源處于高電平狀態
SHCP(SRCLK)11移位寄存器時鐘輸入
STCP(RCLK)12存儲寄存器時鐘輸入
/OE13輸出有效(低電平有效),在開發板上有一個端子,如果要使輸出有效,就短接到GND,如果要使輸出無效,就短接到VCC。也可以連接到一個IO口進行控制。進行LED點陣實驗時要短接到地,使輸出有效。
DS(SER)14串行數據輸入,輸入的數據經過74HC595芯片轉換為并口輸出
VCC16電源

74HC595功能如下,H=高電平,L=低電平,↑=上升沿,↓=下降沿,Z=高阻態,NC=無變化,X=無效

輸入輸入輸入輸入輸入輸出輸出功能
SHCPSTCPOEMRDSQ7’Qn
XXLXLNCMR為低電平時僅影響移位寄存器
XLLXLL移位寄存器到輸出寄存器,STCP上升沿會將數據輸出
XXHLXLZ清空移位寄存器,并行輸出為高阻態
XLHHQ6’NC邏輯高電平移入移位寄存器狀態0,包含所有的移位寄存器狀態移入
XLHXNCQn移位寄存器的內容到達存儲寄存器并從并口輸出
LHXQ6’Qn’移位寄存器內容移入,先前的移位寄存器的內容到達存儲寄存器并輸出

從上表可以知道,當主復位MR為高電平,輸出使能OE為低電平時,數據在SHCP上升沿進入移位寄存器,在STCP上升沿輸出到并行端口。

74HC595的數據端:

Q0-Q7:八位并行輸出端,可以直接控制數碼管的8個段。

Q7’:級聯輸出端,可以接下一個595的SER端。

SER:串行數據輸入端。

74HC595控制端說明

  • /SCLR(10腳):主復位腳,低電平時清空移位寄存器,通常接VCC。
  • SCK(11腳):上升沿數據寄存器移位,下降沿移位寄存器數據保持不變。
  • RCK(12腳):上升沿時移位寄存器的數據進入存儲寄存器,下降沿存儲寄存器數據不變。
  • /OE(13腳):輸出使能,高電平時禁止輸出。

二、使用74HC595模塊實現流水燈效果

在proteus中硬件設計如下,實現的功能為使用74HC595芯片實現流水燈效果。

74HC595實現流水燈效果

根據上面對74HC595的介紹,DS引腳是輸入的串行數據,SHCP上升沿會進行移位寄存器的移位操作,STCP上升沿時會將數據輸出到并行端口。

軟件代碼如下:

/*實現功能:74HC595芯片控制LED點陣實現LED流水燈的效果[2023-12-08] zoya
*/
#include "reg52.h"
#include "intrins.h"typedef unsigned char u8;
typedef unsigned int u16;sbit DS = P3^4;  // 74HC595輸入數據端口
sbit STCP = P3^5;  // 74HC595存儲寄存器端口,上升沿時移位寄存器進入存儲寄存器
sbit SHCP = P3^6;  // 74hc595移位寄存器端口,上升沿時移入數據// 延時函數,i=1延時10us
void Delay(u16 i)
{while(i--);
}// 74HC595芯片將輸入的串行數據轉換為并行數據輸出
void HC595SendByte(u8 dat)
{u8 i;STCP = 1;  // 高電平時存儲寄存器數據保持不變SHCP = 1;  // 高電平時移位寄存器數據保持不變for(i=0;i<8;i++){DS = dat >> 7;  // 每次輸入最高位數據dat <<= 1;  // 移位后將dat數據左移一位,保證下一次移入的數據在最高位// 實現移位寄存器的時序,需要SHCP有一個上升沿,所以先將SHCP置0,然后置1SHCP = 0;_nop_();  // 空指令,不做任何操作,當做延時使用_nop_();SHCP = 1;}// 數據已經在移位寄存器了,現在將移位寄存器的數據輸出到存儲寄存器// STCP上升沿時將數據從移位寄存器輸出到存儲寄存器STCP = 0;_nop_();_nop_();STCP = 1;
}void main()
{u8 ledNum = ~0x01;  // 首先點亮D0// HC595SendByte(0xff);while(1){HC595SendByte(ledNum);ledNum = _crol_(ledNum,1);  // 左移,逐個點亮D0-D7Delay(50000);}
}

仿真結果:

74HC595實現LED流水燈效果

三、 使用74HC595模塊控制LED點陣對角線亮

在proteus中設計如下LED點陣,實現使用74HC595控制LED點陣對角線燈亮的功能。

image-20231208151820036

代碼實現如下:

/*實現功能:74HC595芯片控制LED點陣實現對角線點亮[2023-12-08] zoya
*/
#include "reg52.h"
#include "intrins.h"#define GPIO_LED P0  // LED點陣列控制IO口typedef unsigned char u8;
typedef unsigned int u16;sbit DS = P3^4;  // 74HC595輸入數據端口
sbit STCP = P3^5;  // 74HC595存儲寄存器端口,上升沿時移位寄存器進入存儲寄存器
sbit SHCP = P3^6;  // 74hc595移位寄存器端口,上升沿時移入數據
u8 ledNum = 0x01;// 延時函數,i=1時延時10us
void Delay(u16 i)
{while(i--);
}// 74HC595芯片將輸入的串行數據轉換為并行數據輸出
void HC595SendByte(u8 dat)
{u8 i;STCP = 1;  // 高電平時存儲寄存器數據保持不變SHCP = 1;  // 高電平時移位寄存器數據保持不變for(i=0;i<8;i++){DS = dat >> 7;  // 每次輸入最高位數據dat <<= 1;  // 移位后將dat數據左移一位,保證下一次移入的數據在最高位// 實現移位寄存器的時序,需要SHCP有一個上升沿,所以先將SHCP置0,然后置1SHCP = 0;_nop_();  // 空指令,不做任何操作,當做延時使用_nop_();SHCP = 1;}// 數據已經在移位寄存器了,現在將移位寄存器的數據輸出到存儲寄存器// STCP上升沿時將數據從移位寄存器輸出到存儲寄存器STCP = 0;_nop_();_nop_();STCP = 1;
}void main()
{// 點亮LED點陣的第一個燈,P00=0,其它為1u8 dNum = ~0x01;GPIO_LED = ledNum;while(1){HC595SendByte(dNum);GPIO_LED = ledNum;Delay(200);dNum = _crol_(dNum,1);ledNum = _crol_(ledNum,1);}
}

仿真結果:

74HC595實現LED點陣對角線亮的效果

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

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

相關文章

python基于DeeplabV3Plus開發構建手機屏幕表面缺陷圖像分割識別系統

Deeplab是圖像分割領域非常強大的模型&#xff0c;在前面的博文中我們也進行過很多相應項目的開發實踐&#xff0c;感興趣的話可以自行移步閱讀即可&#xff1a; 《基于DeepLabv3Plus開發構建人臉人像分割系統》 《基于DeepLabV3實踐路面、橋梁、基建裂縫裂痕分割》 《基于D…

【鏈表Linked List】力扣-203 移除鏈表元素

目錄 題目描述 解題過程 題目描述 給你一個鏈表的頭節點 head 和一個整數 val &#xff0c;請你刪除鏈表中所有滿足 Node.val val 的節點&#xff0c;并返回 新的頭節點 。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,6,3,4,5,6], val 6 輸出&#xff1a;[1,2,3,4,5…

快速學會繪制Pyqt5中的所有圖(下)

Pyqt5相關文章: 快速掌握Pyqt5的三種主窗口 快速掌握Pyqt5的2種彈簧 快速掌握Pyqt5的5種布局 快速弄懂Pyqt5的5種項目視圖&#xff08;Item View&#xff09; 快速弄懂Pyqt5的4種項目部件&#xff08;Item Widget&#xff09; 快速掌握Pyqt5的6種按鈕 快速掌握Pyqt5的10種容器&…

鴻蒙原生應用開發——分布式數據對象

01、什么是分布式數據對象 在可信組網環境下&#xff0c;多個相互組網認證的設備將各自創建的對象加入同一個 sessionId&#xff0c;使得加入的多個數據對象之間可以同步數據&#xff0c;也就是說&#xff0c;當某一數據對象屬性發生變更時&#xff0c;其他數據對象會檢測到這…

讓聰明的車連接智慧的路,C-V2X開啟智慧出行生活

“聰明的車 智慧的路”形容的便是車路協同的智慧交通系統&#xff0c;從具備無鑰匙啟動&#xff0c;智能輔助駕駛和豐富娛樂影音功能的智能網聯汽車&#xff0c;到園區的無人快遞配送車&#xff0c;和開放的城市道路上自動駕駛的公交車、出租車&#xff0c;越來越多的車聯網應用…

thinkphp lists todo

來由&#xff1a; 數據庫的這個字段我想返回成&#xff1a; 新奇的寫法如下&#xff1a; 邏輯層的代碼&#xff1a; public function goodsDetail($goodId){$detail $this->good->where(id, $goodId)->hidden([type_params,user_id])->find();if (!$detail) {ret…

springboot(ssm出租車管理網站 出租車公司管理系統Java系統

springboot(ssm出租車管理網站 出租車公司管理系統Java系統 開發語言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服務器&#xff1a;tomcat 數據庫&#xff1a;mysql 5.7&#xff08;或8.0&#xff09;…

如何使用PostMan進行并發測試?

如何使用PostMan進行并發測試&#xff1f; &#x1f440;(Postman 的 runner 實際上是串行執行的&#xff0c;因此不能作為并發測試&#xff0c; 只是批量測試&#xff0c;本文如下稱為并發的是錯誤的) 文章目錄 如何使用PostMan進行并發測試&#xff1f;POST篇流程Pre-req 腳…

Conda常用命令總結

使用conda或anaconda的小伙伴們都知道&#xff0c;圖形界面時不靠譜的&#xff0c;而在命令行下&#xff0c;所有的操作就會穩定很多&#xff0c;且極少出現問題。因此&#xff0c;熟記conda的命令行就變得十分有用。但對于我這樣近50歲依舊奮斗在代碼第一線的大齡程序員而已&a…

攔截 open調用 (進程白名單,文件白名單)

攔截 open 文章目錄 攔截 open第一個需求文件結構進程白名單文件白名單 測試代碼第一個版本版本二代碼演示 增加一個日志記錄代碼解釋 gcc -shared -fPIC -o libintercept.so intercept.c -ldlLD_PRELOAD./libintercept.so ./processA在Linux中&#xff0c;我們可以使用LD_PREL…

ZooKeeper學習二

ZooKeeper的java客戶端 zk自帶zkclient及Apache開源的Curator Chubby是google的&#xff0c;完全實現paxos算法&#xff0c;不開源&#xff0c;ZooKeeper是chubby的開源實現&#xff0c;使用zab協議&#xff0c;paxos算法的變種。 ZooKeeper常用命令&#xff1a; Is get set …

MySQL:1118 - Row size too large(行大小不能超過 65535 問題)

文章目錄 問題原因問題復現環境 & 版本復現過程 解決方案調整列大小調整列類型 個人簡介 問題 當我們創建表或新增字段時&#xff0c;我們可能遇到下面這個問題&#xff1a; 1118 - Row size too large. The maximum row size for the used table type, not counting BLO…

12.Mysql 多表數據橫向合并和縱向合并

Mysql 函數參考和擴展&#xff1a;Mysql 常用函數和基礎查詢、 Mysql 官網 Mysql 語法執行順序如下&#xff0c;一定要清楚&#xff01;&#xff01;&#xff01;運算符相關&#xff0c;可前往 Mysql 基礎語法和執行順序擴展。 (8) select (9) distinct (11)<columns_name…

【力扣熱題100】287. 尋找重復數(弗洛伊德的烏龜和兔子方法)

【力扣熱題100】287. 尋找重復數 寫在最前面理解解決 "尋找重復數" 問題的算法問題描述弗洛伊德的烏龜和兔子方法為什么這個方法有效&#xff1f; 代碼復雜度 總結回顧 寫在最前面 刷一道力扣熱題100吧 難度中等 https://leetcode.cn/problems/find-the-duplicate-…

HTML 常用表單元素使用以及注解

一、表單的用途 HTML 表單用于收集用戶的輸入信息。 HTML 表單表示文檔中的一個區域&#xff0c;此區域包含交互控件&#xff0c;將用戶收集到的信息發送到 Web 服務器。 一個表單有三個基本組成部分&#xff1a; 表單標簽&#xff1a;這包含了處理表單數據所用的URL以及數據…

vue使用$router.push()或者$router.go(),重新返回上一頁不走生命周期

是因為在App.vue中&#xff0c;vue路由&#xff08;router-view&#xff09;組件使用路由緩存組件(keep-alive)包裹著&#xff0c;導致不重新走生命周期&#xff0c;這樣可以提高運行效率&#xff0c;但有時候&#xff0c;我們需要重新加載生命周期刷新數據。 解決方案&#x…

Java Web應用小案例 - 實現用戶登錄功能

文章目錄 一、使用純JSP方式實現用戶登錄功能&#xff08;一&#xff09;項目概述&#xff08;二&#xff09;實現步驟1、創建Web項目2、創建登錄頁面 二、使用JSPServlet方式實現用戶登錄功能三、使用JSPServletDB方式實現用戶登錄功能 一、使用純JSP方式實現用戶登錄功能 &a…

ubuntu22.04安裝 nvidia-cudnn

nvidia-cudnn 是 NVIDIA CUDA 深度神經網絡庫&#xff08;CUDA Deep Neural Network library&#xff09;的縮寫。這是一個由 NVIDIA 提供的庫&#xff0c;用于加速深度學習應用程序。它包含了針對深度神經網絡中常用操作&#xff08;如卷積、池化、歸一化、激活層等&#xff0…

【工具】機器之間傳輸文件的常用方式

0、背景 QA的工作工程中,在不同服務器或者本地機器與服務器之間進行文件或目錄的上傳或者下載是非常普遍的場景,為此本文將常用的好用的工具一并做個總結,大家有其他的利器也歡迎評論區留言。 1、 scp命令 這是平常使用最多的命令,可以在相互連通的服務之間拷貝文件。命…

【Linux】如何清空某個文件的內容

cat /dev/null > file1 清空某個文件的內容使用cat /dev/null > file1&#xff0c;它將 /dev/null 的內容&#xff08;空內容&#xff09;重定向到 file1。 如下所示&#xff0c;file1文件里的內容被清空。 錯誤寫法 錯誤寫法是&#xff1a;cat file1 > /dev/null&…