74HC595在【8x8LED點陣】中的使用
阿新 • • 發佈:2019-01-01
前幾天學了點陣的顯示,今天按自己的思路來總結一下。
首先介紹一下點陣的顯示原理。點陣的電路圖和之前學過的矩陣按鍵的電路圖是相似的。
每個燈就相當於座標圖中的一個點,具有唯一獨特的座標位置,這樣就可以通過引腳的訊號來控制每個燈的關和開
col管腳連線的是P0的八個引腳,row管腳連線的是595的八位並行輸出端。
實驗中採取的是逐列顯示,通過P0控制八列每列逐列顯示,其間通過595位移快取器控制每列要亮的led燈。
74HC595是串入並出帶有鎖存功能移位暫存器.如圖:
形象來說,14引腳是搬運工,11是進廠守門員,12是出廠守門員,
11出現上升沿時,從14引腳輸入一位資料,一共重複八次
12引腳上升沿時,將之前進來的八位資料分別從1到7引腳輸出
OE為使能端,低電平時使輸出有效,所以實驗的時候接GND就行
10為主復位,低電平時有效,實驗時讓它為高
附74HC595真值表
用筆對著點陣描摹的愛心,然後一列一列轉成二進位制碼
愛心點陣,親測有效。
#include "reg51.h" #include<intrins.h> typedef unsigned int u16; typedef unsigned char u8; sbit SRCLK=P3^6; sbit RCLK=P3^5; sbit SER=P3^4; u8 ledduan[]={0x38,0x44,0x42,0x21,0x42,0x44,0x38,0x00}; u8 ledwei[]={0x7f ,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; void delay(u16 i) { while(i--); } void Hc595SendByte(u8 dat) { u8 a; SRCLK=0; RCLK=0; for(a=0;a<8;a++) { SER=dat>>7; dat<<=1; SRCLK=1; _nop_(); _nop_(); SRCLK=0; } RCLK=1; _nop_(); _nop_(); RCLK=0; } void main() { u8 i; while(1) { P0=0x7f; for(i=0;i<8;i++) { P0=ledwei[i]; //位選 Hc595SendByte(ledduan[i]); //傳送段選資料 delay(100); //延時 Hc595SendByte(0x00); //消隱 } } }