版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
-.z.AVR單片機595驅(qū)動數(shù)碼管顯示一、電路實現(xiàn)8位數(shù)碼管的電路如下圖所示數(shù)碼管是一種半導體發(fā)光器件,其基本單元是發(fā)光二極管。數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管(還有一種“米”字型的數(shù)碼管,其段數(shù)更多),八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管單元(多一個小數(shù)點顯示),其基本原理是:將所有LED的一端(正極、負極均可)連在一起作為一個公共端,然后通過分別控制這組LED的另一個端口來使部分LED點亮,從而達到顯示一定字形的目的。數(shù)碼管的分類:按能顯示多少個“8”可分為1位、2位、4位等等數(shù)碼管;按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極()的數(shù)碼管。共陽數(shù)碼管在應用時應將公共極接到+5V,當*一字段發(fā)光二極管的陰極為低電平時,相應字段就點亮。當*一字段的陰極為高電平時,相應字段就不亮。。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極()的數(shù)碼管。共陰數(shù)碼管在應用時應將公共極接到地線GND上,當*一字段發(fā)光二極管的陽極為高電平時,相應字段就點亮。當*一字段的陽極為低電平時,相應字段就不亮。我們在實際使用中一定要搞清楚數(shù)碼管是共陰極的還是共陽極的。數(shù)碼管段、位引腳的確定(以4位8段數(shù)碼管為例),我們在實際應用中購買的數(shù)碼管不像電阻、電容、集成等元件那樣有數(shù)據(jù)手冊或者直接在元件上標明管腳序號和用途,并且市場上數(shù)碼管的管腳排列順序并不是一致的,所以我們購買回來的數(shù)碼管一般都要親自測量一下各個引腳的用途,怎么測量呢?數(shù)碼管引腳測量分三步:極性判斷(共陽極還是共陰極)、公共端判斷(位選端口)、段碼端判斷(段選端口)。首先要確定數(shù)碼管是共陰極還是共陽極的:找一個3到5V的直流電源,準備幾個1K或者幾百歐姆的電阻。將電源的正極串接一個電阻后連在數(shù)碼管的任意一個腳上,然后將電源的負極逐個接到數(shù)碼管的其余引腳上,觀察數(shù)碼管的*一段是否會點亮,如果全部引腳試過都沒有亮的,則將電源正極(串電阻)換一個引腳再試,直到有一個LED發(fā)光,這時固定電源負極不動,電源正極(串電阻)逐個接到數(shù)碼管的其余引腳上,如果有8段LED都亮,說明該數(shù)碼管是共陰極的。相反,按住電源正極不動,電源負極逐個接到數(shù)碼管的其余引腳上,如果有8個數(shù)碼管全亮,則該數(shù)碼管是共陽極的。確定了數(shù)碼管的極性后,下面該確定數(shù)碼管的位選端口了。仍舊按照第一步的測量方法,如果測量過程中發(fā)現(xiàn)當一個引腳固定后,逐個連接到其余端口上的時候,會有一個數(shù)碼管的所有段都被點亮了,則這個固定端就是一個位選端。依照這種方法依次找出其余的3個位選端即可。最后確定段選端口,根據(jù)數(shù)碼管的極性將電源正極(串電阻)或負極固定在一個位選端上,然后將電源的另一端逐個連接數(shù)碼管的位選端口以外的引腳,當接到一個引腳上數(shù)碼管的哪一段點亮,就能夠確定該引腳對應那一段了,依次量出全部8段分別對應那個引腳。經(jīng)過上面的步驟后,我們就完成了數(shù)碼管引腳的確定,其實在實際使用過程中,操作熟練的話是不必經(jīng)過這么繁瑣的步驟來確定數(shù)碼管的引腳的。數(shù)碼管的驅(qū)動方式:數(shù)碼管要正常顯示,就要用驅(qū)動電路來驅(qū)動數(shù)碼管的各個段碼,從而顯示出我們要的數(shù)字,根據(jù)數(shù)碼管的驅(qū)動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。①靜態(tài)顯示驅(qū)動:靜態(tài)驅(qū)動也稱直流驅(qū)動。靜態(tài)驅(qū)動是指將公共端接到電源正極或者電源地上,每個數(shù)碼管的每一個段碼都由一個單片機的I/O端口進行驅(qū)動,或者使用如BCD碼二-十進制譯碼器譯碼進行驅(qū)動。靜態(tài)驅(qū)動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O端口多,如驅(qū)動5個數(shù)碼管靜態(tài)顯示則需要5×8=40根I/O端口來驅(qū)動,要知道一個89S51單片機可用的I/O端口才32個呢:),實際應用時必須增加譯碼驅(qū)動器進行驅(qū)動,增加了硬件電路的復雜性。②動態(tài)顯示驅(qū)動:數(shù)碼管動態(tài)顯示接口是單片機中應用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共極增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對位選通端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的的端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點亮時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應,盡管實際上各位數(shù)碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。在實際使用中,通常都是采用動態(tài)顯示驅(qū)動的方法。在本實例中我們就是采用的動態(tài)驅(qū)動的方法。數(shù)碼管的性能參數(shù):電流:靜態(tài)時,推薦使用10-15mA;動態(tài)時,16/1動態(tài)掃描時,平均電流為4-5mA,峰值電流50-60mA。電壓:查引腳排布圖,看一下每段的芯片數(shù)量是多少?當紅色時,使用1.9V乘以每段的芯片串聯(lián)的個數(shù);當數(shù)碼管的LED為綠色時,使用2.1V乘以每段的芯片串聯(lián)的個數(shù)。74HC595功能描述在本實例中我們使用了一片74HC595來驅(qū)動8位數(shù)碼管的位選端口,下面就簡單介紹一下74HC595的功能。74HC595是帶鎖存功能的三態(tài)輸出的8位串行輸入/并行輸出的移位寄存器。由于它自帶鎖存器,所以其數(shù)據(jù)在移位寄存器中的移位與鎖存器的輸出是獨立的,當數(shù)據(jù)移位時,可以保持鎖存器輸出的數(shù)據(jù)不改變,等所有8位數(shù)據(jù)全部串入完成移位操作后,一次性的將數(shù)據(jù)打入鎖存器中,從而實現(xiàn)了并行輸出的同步改變。另外該芯片可以進行級聯(lián),能夠?qū)崿F(xiàn)8*n個并口擴展。下圖是74HC595的邏輯功能表74HC595管腳描述:QA--QH:八位并行輸出端,可以直接控制數(shù)碼管的8個段。QH':級聯(lián)輸出端。我將它接下一個595的SI端。SI:串行數(shù)據(jù)輸入端。74595的控制端說明:/SCLR(10腳):復位引腳,低電平時將移位寄存器的數(shù)據(jù)清零。一般情況下接Vcc。SCK(11腳):時鐘引腳,上升沿時數(shù)據(jù)寄存器的數(shù)據(jù)移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器數(shù)據(jù)不變。(脈沖寬度:5V時,大于幾十納秒就行了。RCK(12腳):鎖存引腳,上升沿時移位寄存器的數(shù)據(jù)進入數(shù)據(jù)存儲寄存器,下降沿時存儲寄存器數(shù)據(jù)不變。通常將RCK置為低電平,當移位結束后,在RCK端產(chǎn)生一個正脈沖(5V時,大于幾十納秒就行了),更新顯示數(shù)據(jù)。/G(13腳):使能引腳。高電平時禁止輸出(高阻態(tài))。如果單片機的引腳不緊,用一個引腳控制它,可以方便地產(chǎn)生閃爍和熄滅效果。比通過數(shù)據(jù)端移位控制要省時省力,通常可以直接接地GND。A(14腳):數(shù)據(jù)串入引腳。74595的主要優(yōu)點是具有數(shù)據(jù)存儲寄存器,在移位的過程中,輸出端的數(shù)據(jù)可以保持不變。這在串行速度慢的場合很有用處,數(shù)碼管沒有閃爍感。74HC595還具有SPI功能,但在本例中我們先不使用,我們直接用單片機的普通I/O口模擬74HC595的時序來實現(xiàn)數(shù)據(jù)的串入并出功能。從74HC595的邏輯功能表中我們可以分析出74HC595的工作過程:數(shù)據(jù)的串入和部數(shù)據(jù)移位的操作由SCLK控制。SCLK的上升沿將移位寄存器中的數(shù)據(jù)由Qa向Qh依次移動一位,同時將數(shù)據(jù)線上的電平打入Qa,而最高位的數(shù)據(jù)Qh從SQh端移出。如果把SQh與另一片74HC595的數(shù)據(jù)端連接,則SQh的串行輸出就是第2片74HC595的串行數(shù)據(jù)輸入,從而實現(xiàn)級聯(lián)。74HC595在移位的過程中并不影響其鎖存器的輸出,移位寄存器中的數(shù)據(jù)是通過鎖存端的上升沿打入到鎖存器中的。正是由于74HC595具備了鎖存功能,因而可以保證并行輸出數(shù)據(jù)的穩(wěn)定和數(shù)據(jù)同步改變的功能。經(jīng)過以上分析我們可以得出74HC595控制數(shù)據(jù)輸入輸出的實現(xiàn)步驟:1、在SCLK上升沿期間將數(shù)據(jù)端串入的數(shù)據(jù)經(jīng)過發(fā)送到移位寄存器中,如果需要發(fā)送8位的數(shù)據(jù),則需要8個SCLK上升沿才能將8位數(shù)據(jù)全部輸入到移位寄存器中。2、使鎖存端產(chǎn)生一個上升沿,從而將移位寄存器中的數(shù)據(jù)打入到鎖存器中并輸出。本實例中8位數(shù)碼管顯示電路的工作原理:8位數(shù)碼管的8個段選端口全部并聯(lián)接到單片機的PB口上。74HC595控制8位數(shù)碼管的8個位選端,當*位選通后,點亮該位的數(shù)碼管,使它顯示相應的數(shù)字。今天就講到這里吧,下一節(jié)我們再介紹8位數(shù)碼管顯示的程序?qū)崿F(xiàn)。我們接著來完成8位數(shù)碼管的顯示實驗?,F(xiàn)在我們開始動手編寫程序;根據(jù)前面的介紹,我們應該已經(jīng)能夠知道編寫一個AVR單片機的C語言程序的基本步驟和方法了。下面給出這個程序的主程序文件,在這個程序中我們應該能夠知道這個程序都包含了那幾塊,具體來說我們應該能夠在這個程序中把以下幾個部分找出來:預編譯語句、全局變量的定義、函數(shù)的聲明、主函數(shù)、函數(shù)定義。如果你還不能夠準確找出這幾部分,則需要把前面的容再詳細閱讀一下。主程序代碼*include<avr/io.h>//io端口寄存器配置文件,必須包含*include<util/delay.h>//GCC中的延時函數(shù)頭文件*include"hc595.h"http://unsignedcharLed_Disbuf[10]={0*3F,0*06,0*5B,0*4F,0*66,0*6D,0*7D,0*07,0*7F,0*6F};//共陰極unsignedcharLed_Disbuf[10]={0*C0,0*F9,0*A4,0*B0,0*99,0*92,0*82,0*F8,0*80,0*90};//共陽極unsignedcharBuf[8]={0*01,0*02,0*04,0*08,0*10,0*20,0*40,0*80};//函數(shù)聲明e*ternvoidDelayus(unsignedintlus);//us延時函數(shù)e*ternvoidDelayms(unsignedintlms);//ms延時函數(shù)intmain(void)//GCC中main文件必須為返回整形值的函數(shù),沒有參數(shù){unsignedchari;PORTB=0*ff;//PORTB輸出低電平,使LED熄滅DDRB=0*FF;//配置端口PB全部為輸出口HC595_port_init();while(1){for(i=0;i<8;i++){PORTB=Led_Disbuf[i];//送段碼HC595_Send_Data(Buf[i]);//選通位選端口Delayus(70);//延時HC595_Send_Data(0*00);//位選通關閉}}}//us級別的延時函數(shù)voidDelayus(unsignedintlus){while(lus--){_delay_loop_2(4);//_delay_loop_2(1)是延時4個時鐘周期,參數(shù)為4則延時16//個時鐘周期,本實驗用16M晶體,則16個時鐘周期為16/16=1us}}//ms級別的延時函數(shù)voidDelayms(unsignedintlms){while(lms--){Delayus(1000);//延時1ms}}在這個主程序文件中有人可能會注意到有一些我們前面沒有介紹過的容,比如e*tern這個單詞,它在這里起什么作用?這就牽涉到C語言的關鍵字了,關于C語言的關鍵字,我們可以到相關的C語言教材中去做詳細了解,在這里我們只針對e*tern這個關鍵字作出解釋,我們注意到e*tern用在一個函數(shù)聲明的地方,它的作用就是把這個函數(shù)聲明為外部函數(shù),這樣我們在整個項目的所有文件中就都可以調(diào)用這個函數(shù)了。同理e*tern也可以用來聲明一個變量為外部變量。我們可能還會有一個疑惑:*include"hc595.h"這個頭文件包含語句中的hc595.h有什么作用,它是GCC提供的還是我們自己編寫的?這里我們就要學習C語言中的一個重要的概念:模塊化程序設計。何為模塊化程序設計?它實現(xiàn)什么功能?如果要鋪開來講的話,可能需要一本書的容。我們耗不起這個時間和精力。其實我們只需要知道,模塊化程序設計是為了簡化程序容量而采取的一種將一個程序分成不同的模塊,然后通過特定的方法將這些模塊組合起來共同完成同一個目標。通俗的說就是化整為零。在我們剛開始學習單片機的時候,我們編寫的程序都很簡單,程序量也不大,所以往往涉及不到模塊化程序設計,但是這是一種很好的編程思路,我們有必要掌握。本實例就是采用的這種方法。模塊化程序設計的思路是:將實現(xiàn)相同功能的程序單獨編寫,然后實現(xiàn)一個綜合的功能,舉個例子,我們想實現(xiàn)一個液晶顯示的溫度測量程序,則我們可以把液晶顯示相關的程序放在一個文件中,把溫度測量的程序放在另一個文件中,最后在主程序中調(diào)用這兩個文件來實現(xiàn)整體的功能。通常我們在進行模塊化程序設計的時候,常常將變量定義,端口設置,函數(shù)聲明等部分保存在一個.h文件中,而將函數(shù)定義部分放在一個.c文件中,在編寫主程序文件的時候,用預處理命令*include將.h文件包含起來,而在編譯的時候?qū)⑺杏玫降?c文件一起編譯。這樣就實現(xiàn)了模塊化文件的整合。在本實例中,我們將74HC595相關的變量定義,端口定義,函數(shù)聲明放在74HC595.h文件中,而主程序中的*include"hc595.h"這句話實現(xiàn)了將這個文件包含到主程序中的功能。下面是本實例中模塊化程序設計的.h文件/*****************************74hc595.h***********************************//*74hc595與單片機的引腳連接/MR(10腳)VCC低點平時將移位寄存器的數(shù)據(jù)清零。通常將它接Vcc/OE(13腳)PG4高電平時禁止輸出(高阻態(tài))。如果單片機的引腳不緊,用一個引腳控制它,可以方便地產(chǎn)生閃爍和熄滅效果。比通過數(shù)據(jù)端移位控制要省時省力。ST_CP(12腳)PG1上升沿時移位寄存器的數(shù)據(jù)進入數(shù)據(jù)存儲寄存器,下降沿時存儲寄存器數(shù)據(jù)不變。通常將RCK置為低電平,當移位結束后,在RCK端產(chǎn)生一個正脈沖(5V時,大于幾十納秒就行了。通常都選微秒級),更新顯示數(shù)據(jù)。SH_CP(11腳)PG0上升沿時數(shù)據(jù)寄存器的數(shù)據(jù)移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器數(shù)據(jù)不變。(脈沖寬度:5V時,大于幾十納秒就行了。通常都選微秒級)DS(14)PG2串行數(shù)據(jù)輸入端。*/*ifndef__HC595_H__*define__HC595_H__*include<avr/io.h>//io端口寄存器配置文件,必須包含*include<util/delay.h>//GCC中的延時函數(shù)頭文件*defineHC595_latch(1<<PG1)//上升沿數(shù)據(jù)打入8位鎖存器,下降沿鎖存器數(shù)據(jù)不變*defineHC595_sclk(1<<PG0)//上升沿數(shù)據(jù)移位,下降沿數(shù)據(jù)不變*defineHC595_oe(1<<PG4)//低電平,8位數(shù)據(jù)鎖存器輸出,高電平輸出高組態(tài)*defineHC595_data(1<<PG2)//串行數(shù)據(jù)輸入端*defineSET_HC595_latch(PORTG|=(1<<PG1))*defineCLR_HC595_latch(PORTG&=~(1<<PG1))*defineSET_HC595_sclk(PORTG|=(1<<PG0))*defineCLR_HC595_sclk(PORTG&=~(1<<PG0))*defineSET_HC595_data(PORTG|=(1<<PG2))*defineCLR_HC595_data(PORTG&=~(1<<PG2))*defineSET_HC595_oe(PORTG|=(1<<PG4))*defineCLR_HC595_oe(PORTG&=~(1<<PG4))voidHC595_port_init(void);//595端口初始化voidHC595_Send_Data(unsignedcharbyte);//發(fā)送一個字節(jié)voidHC595_Output_Data(unsignedchardata);//發(fā)送字符串*endif同時我們將與74HC595相關的函數(shù)定義部分放在74HC595.c文件中,如下/********************************74hc595.c**************************************/*include"hc595.h"http://595端口初始化voidHC595_port_init(void){PORTG=0*00;DDRG|=(1<<PG0)|(1<<PG1)|(1<<PG2)|(1<<P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版房屋租賃與裝修改造協(xié)議3篇
- 2025年度智能家電產(chǎn)品售后維修服務協(xié)議書4篇
- 二零二五年度新材料科技公司成立合作協(xié)議范本4篇
- 二零二五年度影視后期制作民間擔保合同范本4篇
- 二零二五年度豬欄租賃與養(yǎng)殖產(chǎn)業(yè)鏈合作合同4篇
- 2024版優(yōu)惠協(xié)議書
- 2025年度新能源汽車電池組件供應合同范本4篇
- 二零二五年度大學教授學術項目評估聘用合同3篇
- 二零二五版電子信息產(chǎn)業(yè)董事會一致行動人信息安全協(xié)議3篇
- 二零二五年度國際物流倉儲設施承包合同3篇
- 2022年湖北省武漢市中考數(shù)學試卷含解析
- TLFSA 003-2020 危害分析與關鍵控制點(HACCP)體系調(diào)味面制品生產(chǎn)企業(yè)要求
- LY/T 2244.3-2014自然保護區(qū)保護成效評估技術導則第3部分:景觀保護
- 紀律教育月批評與自我批評五篇
- GB/T 26480-2011閥門的檢驗和試驗
- GB/T 13342-2007船用往復式液壓缸通用技術條件
- 藥店員工教育培訓資料
- GB 20371-2016食品安全國家標準食品加工用植物蛋白
- 【英語手寫體】26英文字母手寫體描紅書寫字帖
- 實習護生壓瘡相關知識掌握情況及預防態(tài)度的調(diào)查問卷
- 《駱駝祥子》第(9、10、11、12)章檢測題
評論
0/150
提交評論