5.3 數(shù)碼管的學習
LED小燈是一種簡單的LED,只能通過亮和滅來表達簡單的信息。這節(jié)課學習一種能表達更復雜信息的器件——LED數(shù)碼管。
5.3.1 數(shù)碼管的基本介紹
先提供一張數(shù)碼管原理圖,如圖5-2所示。

圖5-2 數(shù)碼管原理圖
這是比較常見的數(shù)碼管的原理圖,Kingst51開發(fā)板子上一共有6個數(shù)碼管。前邊有了LED小燈的學習,數(shù)碼管學習就會輕松的多了。從圖5-3可以看出,數(shù)碼管共有a、b、c、d、e、f、g、dp這么8個段,而實際上,這8個段每一段都是一個LED小燈,所以一個數(shù)碼管就是由8個LED小燈組成的??匆幌聰?shù)碼管內(nèi)部結(jié)構(gòu)的示意圖,如圖5-3。

圖5-3 數(shù)碼管結(jié)構(gòu)示意圖
數(shù)碼管分為共陽和共陰兩種,共陰數(shù)碼管就是8只LED小燈的陰極是連接在一起的,陰極是公共端,由陽極來控制單個小燈的亮滅。同理,共陽數(shù)碼管就是陽極接在一起。圖5-2的數(shù)碼管上邊有2個com,這就是數(shù)碼管的公共端。為什么有2個呢,一方面是2個可以起到對稱的效果,剛好是10個引腳,另外一個方面,公共端通過的電流較大,初中物理知識有講,并聯(lián)電路電流之和等于總電流,用2個com可以把公共電流平均到2個引腳上去,降低單條線路承受的電流。
從開發(fā)板的電路圖上能看出來,所用的數(shù)碼管都是共陽數(shù)碼管,一共有6個,如圖5-4所示。

圖5-4 Kingst51數(shù)碼管電路
6個數(shù)碼管的com都是接到了正極上,當然了,和LED小燈電路一樣,也是由74HC138控制三極管的導通來控制整個數(shù)碼管的使能。先來看最右邊的DS1這個數(shù)碼管,原理圖上可以看出,控制DS1的三極管是Q17,控制Q17的引腳是LEDS0,對應(yīng)到74HC138上的就是U3的Y0輸出,如圖5-5所示。

圖5-5 74HC138控制圖
點亮DS1這個數(shù)碼管首先要讓LEDS0這個引腳輸出低電平,相信讀者現(xiàn)在可以根據(jù)前邊學過的知識獨立把ADDR0、ADDR1、ADDR2、ADDR3、ENLED這4個所需輸入的值寫出來了,真正根據(jù)74HC138的手冊實際操作一次,不需要記住這些結(jié)論,但是只要遇到根據(jù)手冊資料寫一次,慢慢遇到同類芯片就知道如何去解決問題了。
數(shù)碼管通常是用來顯示數(shù)字的,板子上有6個數(shù)碼管,習慣上稱之為6位,那控制位選擇的就是74HC138了。而數(shù)碼管內(nèi)部的8個LED小燈稱之為數(shù)碼管的段,數(shù)碼管的段選擇(即該段的亮滅)是通過P0口控制。
5.3.2 數(shù)碼管的真值表
數(shù)碼管的8個段,直接當成8個LED小燈來控制,那就是a、b、c、d、e、f、g、dp一共8個LED小燈。通過圖5-2可以看出,如果點亮b和c這兩個LED小燈,也就是數(shù)碼管的b段和c段,其他的所有的段都熄滅的話,就可以讓數(shù)碼管顯示出一個數(shù)字1,那么這個時候?qū)嶋H上P0的值就是0b11111001,十六進制就是0xF9。那么寫一個程序進去,來看一看數(shù)碼管顯示的效果。
#include
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
ENLED = 0; //使能U3,選擇數(shù)碼管DS1
ADDR3 = 1;
ADDR2 = 0;
ADDR1 = 0;
ADDR0 = 0;
P0 = 0xF9; //點亮數(shù)碼管段b和c
while (1);
}
把這個程序編譯一下,并下載到單片機中,就可以看到程序運行的結(jié)果是在最右側(cè)的數(shù)碼管上顯示了一個數(shù)字1。
用同樣的方法,可以把其他的數(shù)字字符都在數(shù)碼管上顯示出來,而數(shù)碼管顯示的數(shù)字字符對應(yīng)給P0的賦值,叫做數(shù)碼管的真值表。來列一下Kingst51開發(fā)板電路圖的數(shù)碼管真值表,注意,這個真值表里顯示的數(shù)字都不帶小數(shù)點的,如表5-7。
表5-7 數(shù)碼管真值表
| 字符 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 數(shù)值 | 0xC0 | 0xF9 | 0xA4 | 0xB0 | 0x99 | 0x92 | 0x82 | 0xF8 |
| 字符 | 8 | 9 | A | B | C | D | E | F |
| 數(shù)值 | 0x80 | 0x90 | 0x88 | 0x83 | 0xC6 | 0xA1 | 0x86 | 0x8E |
可以把上邊那個用數(shù)碼管顯示數(shù)字1程序中的P0的賦值隨便修改成表5-7真值表中的數(shù)值,看看顯示的數(shù)字的效果。
5.3.3 數(shù)碼管的靜態(tài)顯示
在第3章學習了74HC138,了解到74HC138在同一時刻只能讓一個輸出口為低電平,也就是說在一個時刻內(nèi),只能使能一個數(shù)碼管,并根據(jù)給出的P0的值來改變這個數(shù)碼管的顯示字符,可以將此理解為數(shù)碼管的靜態(tài)顯示。
數(shù)碼管靜態(tài)顯示是對應(yīng)動態(tài)顯示而言,靜態(tài)顯示對于一兩個數(shù)碼管還行,多個數(shù)碼管,靜態(tài)顯示實現(xiàn)的意義就沒有了。這節(jié)課先用一個數(shù)碼管的靜態(tài)顯示來實現(xiàn)簡單的秒表,為下節(jié)課的動態(tài)顯示打下基礎(chǔ)。
51單片機的C語言編程有一個關(guān)鍵字code。前邊課程定義變量的時候,一般用到unsigned char或者unsigned int這兩個關(guān)鍵字,這樣定義的變量都是放在單片機的RAM中,程序中可以隨意去改變這些變量的值。但是還有一種數(shù)據(jù),在程序中要使用,但是卻不會改變它的值,定義這種數(shù)據(jù)時可以加一個code關(guān)鍵字修飾一下,這個數(shù)據(jù)就會存儲到單片機的程序空間Flash中,這樣可以大大節(jié)省單片機的RAM的使用量,畢竟單片機RAM空間比較小,而程序空間則大的多。那么現(xiàn)在要使用的數(shù)碼管真值表,只會使用它們的值,而不需要改變它們,就可以用code關(guān)鍵字把它放入Flash中了,具體程序代碼如下。
#include
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
//用數(shù)組來存儲數(shù)碼管的真值表,數(shù)組將在下一章詳細介紹
unsigned char code LedChar[] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
void main()
{
unsigned char cnt = 0; //記錄T0中斷次數(shù)
unsigned char sec = 0; //記錄經(jīng)過的秒數(shù)
ENLED = 0; //使能U3,選擇數(shù)碼管DS1
ADDR3 = 1;
ADDR2 = 0;
ADDR1 = 0;
ADDR0 = 0;
TMOD = 0x01; //設(shè)置T0為模式1
TH0 = 0xB8; //為T0賦初值0xB800
TL0 = 0x00;
TR0 = 1; //啟動T0
while (1)
{
if (TF0 == 1) //判斷T0是否溢出
{
TF0 = 0; //T0溢出后,清零中斷標志
TH0 = 0xB8; //并重新賦初值
TL0 = 0x00;
cnt++; //計數(shù)值自加1
if (cnt >= 50) //判斷T0溢出是否達到50次
{
cnt = 0; //達到50次后計數(shù)值清零
P0 = LedChar[sec]; //當前秒數(shù)對應(yīng)的真值表中的值送到P0口
sec++; //秒數(shù)記錄自加1
if (sec >= 16) //當秒數(shù)超過0x0F(15)后,重新從0開始
{
sec = 0;
}
}
}
}
}
審核編輯 黃宇
-
單片機
+關(guān)注
關(guān)注
6074文章
45324瀏覽量
663059 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1891瀏覽量
93687 -
定時器
+關(guān)注
關(guān)注
23文章
3360瀏覽量
121671
發(fā)布評論請先 登錄
基于單片機的綜合應(yīng)用程序數(shù)碼管【C語言】定時器控制數(shù)碼管
LESSON3_數(shù)碼管靜態(tài)顯示及定時器和中斷應(yīng)用
LESSON3_數(shù)碼管靜態(tài)顯示及定時器和中斷應(yīng)用
LESSON3_數(shù)碼管靜態(tài)顯示及定時器和中斷應(yīng)用
LESSON3_數(shù)碼管靜態(tài)顯示及定時器和中斷應(yīng)用
基于SOPC的定時器控制數(shù)碼管顯示
數(shù)碼管顯示的原理靜態(tài)顯示及中斷概念單片機的定時器應(yīng)用視頻教程
使用一個定時器控制數(shù)碼管從左到右每位依次顯示的程序免費下載
定時器控制數(shù)碼管動態(tài)顯示的仿真電路圖免費下載
定時器控制數(shù)碼管動態(tài)顯示的仿真電路圖免費下載
使用定時器控制數(shù)碼管動管顯示的程序和工程文件免費下載
使用定時器控制數(shù)碼管動態(tài)顯示的程序和工程文件免費下載

第5章 定時器與數(shù)碼管基礎(chǔ)(5.3)
評論