【51单片机快速入门指南】2.4:74HC595、LED点阵屏及其SPI控制
目錄
- 硬知識
- IO 口擴展方式-串轉并
- 74HC595 芯片介紹
- 硬件設計
- 測試源碼
- HC74595.c
- HC74595.h
- main.h
- 實驗現象
- SPI控制
普中51-單核-A2
STC89C52
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0
硬知識
選自《普中51單片機開發攻略_V1.2》
IO 口擴展方式-串轉并
???????使用的芯片是 74HC595。開發板板載 1 個 74HC595 芯片,僅需單片機 3 個 IO 口即可擴展 8 個,如果需要還可以將 2 個 74HC595 級聯擴展出 16 個 IO,這就實現用少數 IO 資源控制多個設備。
74HC595 芯片介紹
???????74HC595 是一個 8 位串行輸入、并行輸出的位移緩存器,其中并行輸出為三 態輸出(即高電平、低電平和高阻抗)。
15 和 1 到 7 腳 QA–QH:并行數據輸出
9 腳 QH 非:串行數據輸出
10 腳 SCLK 非( MR) : 低電平復位引腳
11 腳 SCK( SHCP) : 移位寄存器時鐘輸入
12 腳 RCK( STCP) : 存儲寄存器時鐘輸入
13 腳 G 非( OE) : 輸出有效
14 腳 SER( DS) : 串行數據輸入
???????74HC595 具有 8 位移位寄存器和一個存儲器,三態輸出功能。移位寄存器和存儲器是單獨的時鐘。數據在 SCK 的上升沿輸入,在 RCK 的上升沿進入到存 儲器中。如果兩個時鐘連在一起,則移位寄存器總是比存儲器早一個脈沖。移位寄存器有一個串行輸入(DS),和一個串行輸出(Q7 非),和一個異步的低電 平復位,存儲寄存器有一個并行8 位、具有三態的總線輸出,當 MR 為高電平,OE 為低電平時,數據在 SHCP 上升沿進入移位寄存器,在 STCP 上升沿輸出到并行端口。
硬件設計
???????74HC595 需要用到的控制管腳 SER、RCLK、SRCLK 直接連接到 51 單片機的 P3.4~P3.6 IO 口上,輸出端則是直接連接到 LED 點陣模塊的行端口上,即為 LED 發光二極管的陽極,LED 點陣的列則為發光二極管的陰極。
???????要想控制 LED 點陣,可以將單片機管腳按照 74HC595 芯片的通信時序要求來傳輸數據,這樣即可控制 LED 點陣的行數據。根據 LED 發光二極管導通原理,當陽極為高電平,陰極為低電平則點亮,否則熄滅。因此通過單片機 P0 口可控制點陣列,74HC595 可控制點陣行。
測試源碼
修改自官方例程
stdint.h見【51單片機快速入門指南】1:基礎知識和工程創建
HC74595.c
#include <REGX52.H> #include "intrins.h" #include "stdint.h"#define Rows P0uint8_t Mat[8][8] = {1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1, };void HC74595_Delay() //10us @11.0592MHz {unsigned char i;i = 2;while (--i); }//定義74HC595控制管腳 sbit SRCLK_74595 = P3^6; //移位寄存器時鐘輸入 sbit RCLK_74595 = P3^5; //存儲寄存器時鐘輸入 sbit SER_74595 = P3^4; //串行數據輸入/******************************************************************************* * 函 數 名 : hc595_write_data(uint8_t dat) * 函數功能 : 向74HC595寫入一個字節的數據 * 輸 入 : dat:數據 * 輸 出 : 無 *******************************************************************************/ void hc595_write_data(uint8_t dat) {uint8_t i=0;for(i=0;i<8;i++)//循環8次即可將一個字節寫入寄存器中{SER_74595=dat>>7;//優先傳輸一個字節中的高位dat<<=1;//將低位移動到高位SRCLK_74595=0;HC74595_Delay();SRCLK_74595=1;HC74595_Delay();//移位寄存器時鐘上升沿將端口數據送入寄存器中 }RCLK_74595=0;HC74595_Delay();RCLK_74595=1;//存儲寄存器時鐘上升沿將前面寫入到寄存器的數據輸出 }void imshow(uint8_t mat[8][8]) {uint8_t i, j, Row_Pix;for(i=0; i<8; ++i){ hc595_write_data(0x00);//消除前面寄存器緩存數據for(j = 0, Row_Pix = 0; j < 8; ++j)Row_Pix |= mat[i][j] << (7-j);Rows = ~Row_Pix;hc595_write_data(0x80>>i);//寫入新的數據HC74595_Delay();} }HC74595.h
#ifndef HC74595_H_ #define HC74595_H_#include "stdint.h"extern uint8_t Mat[8][8];void hc595_write_data(uint8_t dat); void imshow(uint8_t mat[8][8]);#endifmain.h
#include <REGX52.H> #include "intrins.h" #include "stdint.h" #include "HC74595.h"void main(void) { while(1){imshow(Mat);} }實驗現象
如圖,成功將Mat中的二值圖像打印在8x8的點陣屏上
SPI控制
SPI控制代碼見【51單片機快速入門指南】5:軟件SPI
SPI使用模式2
總結
以上是生活随笔為你收集整理的【51单片机快速入门指南】2.4:74HC595、LED点阵屏及其SPI控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: B2B电子商务网站杂谈
- 下一篇: html读写txt文件,JS读写文本文件