<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>電子元器件>數碼管>

74hc138控制共陽數碼管 74hc138驅動共陽數碼管顯示詳解

2018年08月07日 14:39 作者:工程師譚軍 用戶評論(0

74hc138驅動共陽數碼管你了解多少呢?74hc138驅動共陽數碼管的方式是什么呢?本文主要關于74hc138驅動共陽數碼管的介紹。

數碼管的基本介紹

74hc138控制共陽數碼管 74hc138驅動共陽數碼管顯示詳解

數碼管原理圖

這是比較常見的數碼管的原理圖,我們板子上一共有6只數碼管。前邊有了LED小燈的學習,數碼管學習就會輕松的多了。從圖1能看出來,數碼管共有a,b,c,d,e,f,g,dp這8個段,而實際上,這8個段每一段都是一個LED小燈,所以數碼管就是由8個LED小燈所組成的。我們看一下數碼管內部結構圖。

74hc138控制共陽數碼管 74hc138驅動共陽數碼管顯示詳解

數碼管分為共陽數碼管和共陰數碼管,所謂的共陰數碼管就是8只LED小燈的陰極是接在一起的,也就是陰極是公共端,由陽極來控制小燈是否亮滅。同理,共陽數碼管就是陽極是接到一起的,大家可以仔細研究下圖1。細心的同學也會發現,數碼管上邊有2個com,實際上就是我們數碼管的公共端。為什么有2個,我個人認為,一方面有2個可以起到對稱的效果,剛好是10個引腳,另外一個方面,公共端通過的電流較大,我們初中就學過,并聯電路電流之和等于總電流,用2個com可以把公共電流平均到2個引腳上去,降低線路承受的電流。

從我們板子的電路圖上能看出來,我們所用的數碼管是共陽數碼管,如圖所示。

74hc138控制共陽數碼管 74hc138驅動共陽數碼管顯示詳解

共陽數碼管電路

74hc138控制共陽數碼管

從上文我們知道,他們的com是接到了正極上,當然了,和LED小燈電路類似,也是由74HC138控制了三極管的導通來控制整個數碼管的電流,我們先來看DS1這個數碼管。原理圖上可以看出來,控制DS1的三極管是Q17,控制Q17的引腳是LEDS0,對應到74HC138上邊就是Y0端的輸出。

74hc138控制共陽數碼管 74hc138驅動共陽數碼管顯示詳解

74HC138控制圖

我們現在的目的是讓LEDS0這個引腳輸出低電平,相信大家現在可以獨立根據前邊學到的內容把ADDR0,ADDR1,ADDR2,ADDR3,ENLED這4個輸入狀態寫出來,現在大家不要偷懶,都去根據138的手冊去寫一下,不需要你記住這些結論,但是遇到就寫一次,鍛煉過幾次后,遇到同類芯片自己就知道如何去解決問題了。

數碼管通常是用來顯示數字的,我們板子上的6個數碼管,習慣上我們稱之為6位,那控制位選擇的就是74HC138了。而數碼管內部的8個LED小燈我們稱之為數碼管的段,那么數碼管的段選擇(即該段的亮滅)是通過P0口控制,經過74HC245驅動,這樣整個電路就完成了。

74hc138控制共陽數碼管程序

#include //包含寄存器的庫文件

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

void main()

{

unsigned char j = 0;

unsigned int i = 0;

ENLED = 0;

ADDR0 = 0;

ADDR1 = 0;

ADDR2 = 0;

ADDR3 = 1; //74HC138開啟三極管Q17

while(1) //程序死循環

{

P0 = 0xF9; //打開數碼管b和c段

}

}

數碼管的靜態顯示

從上文我們了解到74HC138同時一次只能讓一個輸出口為低電平,也就是在一個時刻內,我們只能讓一個數碼管顯示,始終選通數碼管并且可以根據我們的P0總線的信號來改變這個數碼管的值,我們可以理解為數碼管的靜態顯示。

數碼管靜態顯示是對應動態顯示而言的,靜態顯示對于一兩個數碼管還行,多個數碼管,靜態顯示實現的意義就沒有了。這節課我們先用一個數碼管的靜態顯示來實現一個簡單的秒表,為下節課的動態顯示打下基礎。

先來介紹一個51單片機的關鍵字code。我們前邊課程定義變量的時候,一般用到unsigned?char或者unsigned?int這兩個關鍵字,這樣定義的變量都是放在我們的單片機RAM中,我們在程序中可以隨意去改變這個變量的值。但是還有一種常數,我們在程序中要使用,但是卻不進行對這個值的改變,這種值我們可以加一個code關鍵字修飾一下,修飾完畢后,這個值就會存儲到我們的程序空間flash中,這樣可以大大節省我們單片機的RAM的使用量,畢竟我們的RAM空間比較小,而程序空間是很大的。

數碼管的靜態顯示程序:

#include //包含寄存器的庫文件

sbit LED = P0^0;

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

unsigned char code LedChar[] = {

0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8e

}; //用數組來存儲數碼管真值表,下一課詳細介紹數組

void main()

{

unsigned char counter = 0;

unsigned char j = 0;

ENLED = 0; ADDR0 = 0; ADDR1 = 0;

ADDR2 = 0; ADDR3 = 1; P0 = 0XFF; //74HC138和P0初始化部分

TMOD = 0x01; //設置定時器0為模式1

TH0 = 0xB8;

TL0 = 0x00; //定時值初值

TR0 = 1; //打開定時器0

while(1)

{

if(1 == TF0) //判斷定時器0是否溢出

{

TF0 = 0;

TH0 = 0xB8; //溢出后,重新賦值

TL0 = 0x00;

counter++;

if(50 == counter) //判斷定時器0溢出是否達到50次

{

counter = 0; //counter清0,重新計數

P0 = LedChar[j++]; //把數組里的對應值送給P0

if(16 == j) //當顯示到F后,歸0重新開始

{

j = 0;

}

}

}

}

}

結語

關于74hc138控制共陽數碼管的介紹就到這里了,如有不足之處歡迎指正。

非常好我支持^.^

(0) 0%

不好我反對

(13) 100%

( 發表人:金巧 )

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
      <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
      <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
      <acronym id="s8ci2"></acronym>
      <acronym id="s8ci2"><center id="s8ci2"></center></acronym>