1、LED點(diǎn)陣簡(jiǎn)介
1.1、什么是LED點(diǎn)陣
(1)外觀
(2)作用
LED點(diǎn)陣通過(guò)LED(發(fā)光二極管)組成,以燈珠亮滅來(lái)顯示文字、圖片等,LED點(diǎn)陣顯示被廣泛應(yīng)用于各種公共場(chǎng)合,如汽車(chē)報(bào)站器、廣告屏以及公告牌等。
1.2、如何驅(qū)動(dòng)LED點(diǎn)陣
以8*8LED點(diǎn)陣為例。
(1)單片機(jī)端口直接驅(qū)動(dòng)。驅(qū)動(dòng)8*8的點(diǎn)陣需要2個(gè)IO端口(16個(gè)IO口)。
(2)使用串轉(zhuǎn)并移位鎖存器驅(qū)動(dòng)。如74HC595驅(qū)動(dòng),這種方式可以節(jié)約大量IO端口。
2、原理圖
?P595A接點(diǎn)陣COL(列) PIN(LED陰極),P595B接點(diǎn)陣ROW(行) PIN(LED陽(yáng)極)。
3、74HC595芯片介紹
只是簡(jiǎn)略介紹,具體詳細(xì)部分可結(jié)合數(shù)據(jù)手冊(cè)和示例代碼了解。
3.1、74HC595核心引腳
RCLK引腳:鎖存時(shí)鐘
SRCLK引腳:移位時(shí)鐘
SER引腳:串行輸入引腳
QA~QH引腳:并行輸出引腳
QH`:串行輸出口引腳,74HC595A的QH`輸出引腳接74HC585B的SER串行輸入引腳。
3.2、單片機(jī)與74HC595通信時(shí)序簡(jiǎn)介
(1)芯片與芯片之間進(jìn)行通信,都是按照一定的時(shí)序進(jìn)行的。
(2)時(shí)序就是芯片與芯片之間的通信引腳上電平變化,變化以時(shí)間軸為參考的變化順序。
(3)時(shí)序是通信雙方事先定義好的,通信的發(fā)送方必須按照時(shí)序來(lái)發(fā)送有意義的信息,通信的接收放按照時(shí)序去接收解析發(fā)送方發(fā)來(lái)的電平變化信息,然后就知道發(fā)送方要給接收方發(fā)送什么東西了。
(4)我們編程時(shí):發(fā)送方是單片機(jī),接收方是74HC595。因?yàn)?95芯片本身不能編程,它的時(shí)序出廠時(shí)已經(jīng)設(shè)定好了。因此單片機(jī)需要遷就595芯片,按照595線片的時(shí)序來(lái)給他發(fā)信息。
(5)74HC595芯片手冊(cè)上有她的時(shí)序描述,參考描述便可明白595芯片的時(shí)序規(guī)則,然后將其用編程語(yǔ)言表述出來(lái)就是程序了。
(6)74HC595的時(shí)序關(guān)鍵是:SRCLK和RCLK。SRCLK是移位時(shí)鐘,595芯片內(nèi)部在每個(gè)SCLK的上升沿會(huì)對(duì)SER引腳進(jìn)行一次采樣輸入,就向595內(nèi)部輸入了1位,如此循環(huán)8次就輸入了8位二進(jìn)制。RCLK是鎖存時(shí)鐘。
4、編程
4.1、編程點(diǎn)亮最上面一排
#include "reg52.h"
/*引腳位定義*/
sbit SER = P3^4; /*74HC595串行數(shù)據(jù)輸入引腳*/
sbit RCLK_595 = P3^5; /*74HC595的鎖存時(shí)鐘引腳*/
sbit SRCLK = P3^6; /*74HC595的移位時(shí)鐘*/
void main(void)
{
unsigned char i = 0;
unsigned char P595A_OUT = 0x01; // 接LED點(diǎn)陣行,陽(yáng)級(jí)。
unsigned char P595B_OUT = 0x00; // 接LED點(diǎn)陣列,陰極。
SER =0;
RCLK_595 = 0;
SRCLK = 0;
for(i=0; i<8; i++)
{
SER = (P595A_OUT>>(7-i)) & 0x01;
SRCLK = 0;
SRCLK = 1; // 上升沿進(jìn)行一次數(shù)據(jù)移入
}
for(i=0; i<8; i++)
{
SER = (P595B_OUT>>(7-i)) & 0x01;
SRCLK = 0;
SRCLK = 1; // 上升沿進(jìn)行一次數(shù)據(jù)移入
}
RCLK_595 = 0;
RCLK_595 = 1; // 鎖存時(shí)鐘
while(1)
{
}
}
注:keil中就算while循環(huán)中沒(méi)有內(nèi)容也需要嘉while,因?yàn)椴患訒?huì)導(dǎo)致程序跑飛,不斷重啟循環(huán),導(dǎo)致結(jié)果與預(yù)期不符。
4.2、封裝LED點(diǎn)陣顯示函數(shù)
#include "reg52.h"
/*宏定義*/
#define uchar unsigned char
/*引腳位定義*/
sbit SER = P3^4; /*74HC595串行數(shù)據(jù)輸入引腳*/
sbit RCLK_595 = P3^5; /*74HC595的鎖存時(shí)鐘引腳*/
sbit SRCLK = P3^6; /*74HC595的移位時(shí)鐘*/
/*函數(shù)聲明*/
void LedLattice_Display(uchar P595A_OUT, uchar P595B_OUT); /*LEE點(diǎn)陣顯示*/
void main(void)
{
//LedLattice_Display(0x0f,0x00); /*顯示上面四行*/
//LedLattice_Display(0xf0,0x00); /*顯示下面四行*/
//LedLattice_Display(0xff,0xfe); /*顯示左邊一列*/
//LedLattice_Display(0xff,0x7f); /*顯示右邊一列*/
LedLattice_Display(0x01,0xfe); /*點(diǎn)亮左上角一顆,0x01選擇第一行,0x7f選擇第一列*/
while(1)
{
}
}
/*
*功能:LED點(diǎn)陣顯示
*參數(shù):
* P595A_OUT:LED點(diǎn)陣行,陽(yáng)極,最低為表示最上面一行 從上到下
* P595B_OUT:LED點(diǎn)陣列,陰極,最低位表示最左邊一列 從左到右
*返回值:無(wú)
*/
void LedLattice_Display(uchar P595A_OUT, uchar P595B_OUT)
{
unsigned char i = 0;
//unsigned char P595A_OUT = 0x80; // 接LED點(diǎn)陣行,陽(yáng)級(jí)。
//unsigned char P595B_OUT = 0x00; // 接LED點(diǎn)陣列,陰極。
SER =0;
RCLK_595 = 0;
SRCLK = 0;
for(i=0; i<8; i++)
{
SER = (P595A_OUT>>(7-i)) & 0x01;
SRCLK = 0;
SRCLK = 1; // 上升沿進(jìn)行一次數(shù)據(jù)移入
}
for(i=0; i<8; i++)
{
SER = (P595B_OUT>>(7-i)) & 0x01;
SRCLK = 0;
SRCLK = 1; // 上升沿進(jìn)行一次數(shù)據(jù)移入
}
RCLK_595 = 0;
RCLK_595 = 1; // 鎖存時(shí)鐘
}
4.3、顯示 “中” 字
(1)什么是字模
為了記錄組成字的LED點(diǎn)陣亮滅信息,就是用取模軟件生成這些信息。8*8的點(diǎn)陣一共64個(gè)點(diǎn),一次需要64位二進(jìn)制,即8個(gè)字節(jié)來(lái)記錄這些信息。
(2)取模軟件介紹。
(3)取模方式
分為橫向取模和縱向取模。
(4)代碼。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-435080.html
在不熟練是可以先顯示一行,在顯示兩行,找到規(guī)律后再用循環(huán)來(lái)進(jìn)行顯示。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-435080.html
#include "reg52.h"
/*宏定義*/
#define uchar unsigned char
/*引腳位定義*/
sbit SER = P3^4; /*74HC595串行數(shù)據(jù)輸入引腳*/
sbit RCLK_595 = P3^5; /*74HC595的鎖存時(shí)鐘引腳*/
sbit SRCLK = P3^6; /*74HC595的移位時(shí)鐘*/
/*全局變量*/
uchar zhong[8] = {0x08,0x08,0x3E,0x2A,0x2A,0x3E,0x08,0x08}; /*橫向取模*/
/*函數(shù)聲明*/
void LedLattice_Display(uchar P595A_OUT, uchar P595B_OUT); /*LEE點(diǎn)陣顯示*/
void main(void)
{
uchar i = 0;
while(1)
{
for(i=0; i<8; i++)
{
LedLattice_Display(0x01<<i,~zhong[i]);
}
}
}
/*
*功能:LED點(diǎn)陣顯示
*參數(shù):
* P595A_OUT:LED點(diǎn)陣行,陽(yáng)極,最低為表示最上面一行 從上到下
* P595B_OUT:LED點(diǎn)陣列,陰極,最低位表示最左邊一列 從左到右
*返回值:無(wú)
*/
void LedLattice_Display(uchar P595A_OUT, uchar P595B_OUT)
{
unsigned char i = 0;
//unsigned char P595A_OUT = 0x80; // 接LED點(diǎn)陣行,陽(yáng)級(jí)。
//unsigned char P595B_OUT = 0x00; // 接LED點(diǎn)陣列,陰極。
SER =0;
RCLK_595 = 0;
SRCLK = 0;
for(i=0; i<8; i++)
{
SER = (P595A_OUT>>(7-i)) & 0x01;
SRCLK = 0;
SRCLK = 1; // 上升沿進(jìn)行一次數(shù)據(jù)移入
}
for(i=0; i<8; i++)
{
SER = (P595B_OUT>>(7-i)) & 0x01;
SRCLK = 0;
SRCLK = 1; // 上升沿進(jìn)行一次數(shù)據(jù)移入
}
RCLK_595 = 0;
RCLK_595 = 1; // 鎖存時(shí)鐘
}
到了這里,關(guān)于三、51單片機(jī)用74HC595控制LED點(diǎn)陣的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!