任務52點陣的原理及驅動_第1頁
任務52點陣的原理及驅動_第2頁
任務52點陣的原理及驅動_第3頁
任務52點陣的原理及驅動_第4頁
任務52點陣的原理及驅動_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、5.2 點陣的原理及驅動5.2 綜合練習點陣5.2.1 任務要求點陣LED在我們的生活中到處可見,如商家門前的廣告牌、電梯運行指示、廣場上的大LED屏等。點陣LED的優點是既可以顯示數字,又可以顯示漢字、圖形,同時顯示亮度高。本節的任務是:在開發板的點陣塊上顯示1個用于電梯中指示向上運行的箭頭“”,并讓箭頭向上移動動起來。5.2.2 知識準備1、8×8點陣LED原理8×8LED點陣由8行×8列共64個發光二極管按矩陣形式排列而成,每一行上的發光管有一個公共的陰極(或陽極),每一列上的發光管有一個公共的陽(或陰極),如圖5.2.1所示。 (a)行共陰列共陽 (b)

2、圖5.2.1 8×8點陣內部結構圖開發板上的8×8點陣內部結構圖如圖5.2.1中的(b)所示。行接發光二極管的陽極,列接發光二極管的陰極。當列置低電平,對應的行置高電平,則行列交叉所對應的二極管點亮。我們可以讓點陣在某一時間段只亮一列(一行),然后逐行(逐列)點亮,當掃描時間足夠快,由于人的眼睛的視覺暫留性,看起來點陣是在全屏顯示(類似于動態數碼管掃描)。點陣屏是由很多個8*8點陣塊構成,一塊8*8點陣有16個引腳,則一個點陣屏需要驅動的引腳成千上百個。單片機顯然提供不了這么多的I/O。在點陣屏驅動電路中,通常借助移位寄存器(74HC595)來擴展I/O。我們先來了解一下7

3、4HC595的使用。2、移位寄存器(74HC595)(1)74HC595原理74HC595內部具有8位串入并出移位寄存器和帶有三態輸出的存儲器,移位寄存器和存儲器具有各自的時鐘。74HC595內部結構如圖5.2.2所示。 圖5.2.2 74HC595內部結構圖74HC595的內部結構中分成兩部分:上半部分是8個首尾連接的D觸發器構成的移位寄存器,在時鐘脈沖的驅動下,實現數據的串行移動;下半部分是8個并行D觸發器構成的鎖存器。先來看一下移位寄存器的原理。舉個例子:路比較寬,4車道,4輛汽車并行行駛,前面突發事故,3個車道被隔離,只剩下1個車道允許車輛通過。4輛并行的汽車改變行駛方式,一輛接一輛的

4、通過車道,行駛出隔離帶后,4輛車又可以并行行駛了。74HC595的串行移位原理和這個例子比較相似。DS是移位寄存器的數據輸入端,接第1個D觸發器的輸入。8個D觸發器的時鐘端(CP)連接在一起為移位脈沖輸入端(SH_CP)。每來1個移位脈沖(上升沿),8個D觸發器的輸入端數據會被送到各自的輸出端。把待發送的8位數據,按照順序逐位取出來放到DS端,每放入DS端1位數據,送出1移位脈沖,經過8次移位后,待發送的數據的8個位被送到每個D觸發器的輸出端。是D觸發器的數據清除端(低電平使能),由于任務中不需要清除D觸發器的數據,開發板的電路中接高電平。在74HC595內部結構中,移位寄存器的數據輸出端和7

5、4HC595的輸出端之間還有兩級門檻:D觸發器構成的鎖存器和三態門。是三態門的控制端,當=1時,三態門為高阻狀態,當=0是,三態門使能(輸出=輸入),開發板電路中,被接低電平。當移位器寄存器完成全部數據移位后,還需要觸發鎖存器(ST_CP上升沿脈沖),輸出才能到達74HC595的輸出端。這樣可以避免74HC59的輸出端在移位過程中出現短暫的亂碼。表5.2.1是4位2進制數據“1010”在移位寄存器中移位的情況。表5.2.1 移位寄存器移位狀態轉換 DS端送入數據移位命令Q0Q1Q2Q3(0b1010)第1位0第1次移位0×××(0b1010)第2位1第2次移位10

6、××(0b1010)第3位0第3次移位010×(0b1010)第4位1第4次移位101074HC595可以實現多片級聯,其連接方式為:第一片的Q7連接第二片的DS端,移位時鐘和鎖存器時鐘并聯。(2)74HC595驅動程序弄明白74HC595的原理,驅動程序的編寫就簡單多了。圖5.2.3是74HC595驅動三個數碼管的電路圖。數碼管是三個獨立的共陰數碼管,公共端接地,每一個數碼管的段分別與其對應的74HC595的輸出端相連。 圖5.2.3 74HC595驅動3位數碼管利用移位寄存器(74HC595)驅動多位靜態數碼管。可以極大的節省IO口,CPU負擔輕,缺點是是每個

7、數碼管需要1片74HC595,成本高。在圖5.2.3電路中,3片74HC595的移位時鐘SHcp和存儲器時鐘STcp分別連接在一起,然后與單片機的P21引腳和P22引腳相連。第一個74HC595的的數據輸入端DS和單片機的P20腳相連,其余兩片74HC595的DS端分別接前一個74HC595的Q7。程序比較簡單,沒有考慮模塊化和可移植性。程序如下:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit HC595_DS=P20; /數據輸入sbit HC595_SHcp=P21; /移位脈沖

8、sbit HC595_STcp=P22; /鎖存脈沖 /共陰數碼管段碼uchar code Seg7Code=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar DispBuffer3; /顯示緩沖區 /*函數名稱:HC595Shift()*功能 :74HC595驅動*入口參數:待發送數值*出口參數:無*說明 :74HC595串轉并,實現8位數據的移位*/void HC595_Shift(uchar num) uchar i; for(i=0;i<8;i+) HC595_SHcp=0; /SHcp時鐘拉低 HC595_DS=nu

9、m&0x80; /取num的最高位數據HC595_SHcp=1; /SHcp時鐘拉高,上升沿num=num<<1; /待發送位變成最高位,為下一次發送做準備 /*函數名稱:Seg7Display()*功能 :通過74HC595實現3位數碼管的顯示*入口參數:無*出口參數:無*說明 :STcp時鐘由低變高后,移位后的數據才能到達74HC595的輸出端*/void Seg7Display() HC595_STcp=0; /STcp拉低 HC595_Shift(Seg7CodeDispBuffer0); /送數1 HC595_Shift(Seg7CodeDispBuffer1);

10、 /送數2 HC595_Shift(Seg7CodeDispBuffer2); /送數3 HC595_STcp=1; /STcp拉高,上升沿/*函數名稱:main()*功能 :主函數*入口參數:無*出口參數:無*說明 :*/ void main() DispBuffer0=3; DispBuffer1=2; DispBuffer2=1; /向緩沖區送數據 Seg7Display(); /3位靜態數碼管顯示 while(1);3、開發板8×點陣驅動電路開發板上的8×8點陣由兩片74HC595驅動,其中一片74HC595的輸出接點陣的行,另一片的輸出接點陣的列,電路如圖5.2.

11、4所示。另外,JP27是跳線,在做點陣實驗時,接上短路冒。 圖5.2.4 LED8×8電路圖5.3.3 任務實施1、點陣靜態顯示本節的任務是實現一個動態的向上運行的“”,要實現動態顯示,首先要從靜態顯示開始。圖5.2.4是利用點陣取模軟件取出“”字模, 圖5.2.4 “”字模“”的字模為(0x10,0x38,0x7C,0xFE,0x38,0x38,0x38,0x38),我們把這些值定義在數組中。每一個值代表一行中各列電平,如字模的第一個值0x10,其二進制為0B00010000,表示第一行中第四列的LED點亮,第一行中的其余列不點亮。需要注意的是字模中的取值是以共陰型點陣為準的,即列

12、高電平,行低電平。開發板中的點陣正好相反,行高電平,列點低電平才能點亮點陣LED,因此用軟件取出字模后,在使用的過程中,應取字模的反碼,程序中驅動模塊包含定時器模塊和點陣掃描模塊,工程結構如下:(1) 主函數#include<reg52.h>#include"MicroDefine.h"#include"Timer.h"#include"Led8Scan.h"void main(void) Timer0Init(); /定時器0初始化 while(1) if(FlagSystem1Ms=1) FlagSystem1Ms=0

13、; Led8Scan(); /1ms掃描一次點陣 主函數的任務很簡單,系統每間隔1ms掃描一次點陣。1ms時標信號由定時器產生。(2) 點陣掃描模塊Led8Scan.h#ifndef _LED8SCAN_H_#define _LED8SCAN_H_#include<reg52.h>#include"MicroDefine.h"/列驅動74HC595接口定義sbit HC595A_DS=P03;sbit HC595A_STcp=P04;sbit HC595A_SHcp=P05;#define HC595A_DSReset HC595A_DS=0#define HC

14、595A_DSSet HC595A_DS=1#define HC595A_STcpReset HC595A_STcp=0#define HC595A_STcpSet HC595A_STcp=1#define HC595A_SHcpReset HC595A_SHcp=0#define HC595A_SHcpSet HC595A_SHcp=1/行驅動74HC595接口定義sbit HC595B_DS=P00;sbit HC595B_STcp=P01;sbit HC595B_SHcp=P02;#define HC595B_DSReset HC595B_DS=0#define HC595B_DSSet

15、 HC595B_DS=1#define HC595B_STcpReset HC595B_STcp=0#define HC595B_STcpSet HC595B_STcp=1#define HC595B_SHcpReset HC595B_SHcp=0#define HC595B_SHcpSet HC595B_SHcp=1extern void Led8Scan(); /點陣掃描函數聲明 #endif Led8Scan.c#include"Led8Scan.h"uchar code Led8Row8=0x10,0x38,0x7C,0xFE,0x38,0x38,0x38,0x38

16、; /列碼 uchar code Led8Colum8=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80; /行碼/*函數名稱:HC595A_Shift()*功能 :74HC595驅動*入口參數:待發送數值*出口參數:無*說明 :列碼值74HC595串入并出*/void ColumShift(uchar Num) uchar i; HC595A_STcpReset; for(i=0;i<8;i+) HC595A_SHcpReset; if(Num&0x80) HC595A_DSSet; /取Num的最高位數據 else HC595A_DSReset;

17、 HC595A_SHcpSet; /SHcp上升沿數據移位Num=Num<<1; /待發送位變成最高位,為下一次發送做準備 HC595A_STcpSet; /STcp上升沿送出數據 /*函數名稱:HC595B_Shift()*功能 :74HC595驅動*入口參數:待發送數值*出口參數:無*說明 :行碼值74HC595串入并出*/void RowShift(uchar Num) uchar i; HC595B_STcpReset; for(i=0;i<8;i+) HC595B_SHcpReset; if(Num&0x80) /取Num的最高位數據 HC595B_DSSe

18、t; else HC595B_DSReset; HC595B_SHcpSet; /SHcp上升沿數據移位Num=Num<<1; /待發送位變成最高位,為下一次發送做準備 HC595B_STcpSet; /STcp上升沿送出數據 /*函數名稱:Led8_Scan()*功能 :8*8點陣掃描函數*入口參數:無*出口參數:無*說明 :*/void Led8Scan() static uchar i=0; RowShift(0x00); /消隱 ColumShift(Led8Rowi); /送列碼 RowShift(Led8Columi); /送行碼 if(+i>=8) i=0;在Led8_Scan.c中,分別寫了行移位和列移位函數,然后再Led8_Scan()函數中實現點陣的行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論