国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 2820|回復(fù): 0
打印 上一主題 下一主題

單片機數(shù)碼管顯示原理(轉(zhuǎn))

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2017-4-12 16:12:52 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
小燈是一種簡單的LED,給我們視覺效果只能通過亮和滅來表達(dá)簡單信息。而這節(jié)課我們要來學(xué)習(xí)一種表達(dá)更加明確的器件,數(shù)碼管。

1、數(shù)碼管的基本介紹
先給大家提供一張原理圖看一下,如圖1所示。

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


圖2 數(shù)碼管結(jié)構(gòu)圖

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


圖3 共陽數(shù)碼管電路

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


圖4 74HC138控制圖

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

數(shù)碼管通常是用來顯示數(shù)字的,我們板子上的6個數(shù)碼管,習(xí)慣上我們稱之為6位,那控制位選擇的就是74HC138了。而數(shù)碼管內(nèi)部的8個LED小燈我們稱之為數(shù)碼管的段,那么數(shù)碼管的段選擇(即該段的亮滅)是通過P0口控制,經(jīng)過74HC245驅(qū)動。

2、數(shù)碼管的真值表
數(shù)碼管的8個段,我們直接當(dāng)成8個LED小燈來控制,那就是a、b、c、d、e、f、g、dp一共8個LED小燈。我們通過圖1可以輕而易舉的看出來,如果我們點亮b和c這兩個LED小燈,也就是數(shù)碼管的b段和c段,其他的所有的段都熄滅的話,就可以讓數(shù)碼管DS1顯示一個數(shù)字1,那么這個時候?qū)嶋H上P0的值的二進(jìn)制就是0b11111001,十六進(jìn)制就是0xF9。那么我們寫一個程序進(jìn)去,看看讓數(shù)碼管顯示一下看看。

    #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)             //程序死循環(huán)  
        {
             P0 = 0xF9;      //打開數(shù)碼管b和c段   
        }
}

大家把這個程序編譯一下,下載到單片機里會發(fā)現(xiàn),最右側(cè)的數(shù)碼管成功顯示1這個數(shù)字。

同樣的方法,我們可以把其他的數(shù)字都成功的在數(shù)碼管上顯示出來,而數(shù)碼管顯示的數(shù)字對應(yīng)給P0的賦值,我們叫做數(shù)碼管的真值表。我們來列一下我們這個電路圖的數(shù)碼管真值表,注意,這個真值表里顯示的數(shù)字都不帶小數(shù)點。

表1 數(shù)碼管真值表
數(shù)字
0
1
2
3
4
5
6
7
真值表
0xC0
0xF9
0xA4
0xB0
0x99
0x92
0x82
0xF8
數(shù)字
8
9
A
B
C
D
E
F
真值表
0x80
0x90
0x88
0x83
0xC6
0xA1
0x86
0x8E

大家可以把上邊那個數(shù)碼管顯示1的那個程序中的P0的賦值隨便修改成我們表5-1中的真值表里的數(shù)字試試看,把數(shù)碼管顯示的數(shù)字顯示出來。

3、數(shù)碼管的靜態(tài)顯示

從第三課我們學(xué)習(xí)74HC138以后,我們了解到74HC138同時一次只能讓一個輸出口為低電平,也就是在一個時刻內(nèi),我們只能讓一個數(shù)碼管顯示,始終選通數(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單片機的關(guān)鍵字code。我們前邊課程定義變量的時候,一般用到unsigned char或者unsigned int這兩個關(guān)鍵字,這樣定義的變量都是放在我們的單片機的RAM中,我們在程序中可以隨意去改變這個變量的值。但是還有一種常數(shù),我們在程序中要使用,但是卻不進(jìn)行對這個值的改變,這種值我們可以加一個code關(guān)鍵字修飾一下,修飾完畢后,這個值就會存儲到我們的程序空間flash中,這樣可以大大節(jié)省我們單片機的RAM的使用量,畢竟我們的RAM空間比較小,而程序空間是很大的。比如我們現(xiàn)在要使用的數(shù)碼管真值表,我們來看一下我們下邊的這個程序。

#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
};                  //用數(shù)組來存儲數(shù)碼管真值表,下一課詳細(xì)介紹數(shù)組

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;                    //設(shè)置定時器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溢出是否達(dá)到50次
            {
                counter = 0;        //counter清0,重新計數(shù)
                P0 = LedChar[j++]; //把數(shù)組里的對應(yīng)值送給P0
                if(16 == j)         //當(dāng)顯示到F后,歸0重新開始
                {
                     j = 0;
                }
             }
         }
    }
}

轉(zhuǎn)載“玩轉(zhuǎn)單片機”


                                                                      深圳市菲利盟電子技術(shù)有限公司

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 五月天婷婷精品视频 | 久久久久久久国产精品视频 | 欧美高清在线播放 | 99精品久久99久久久久久 | 99精品福利 | 隔壁的邻居免费观看中文 | www四虎影院 | 97青青| 欧美在线视频二区 | 亚洲精品一二区 | 亚洲精彩视频 | 伊人久久大香线蕉综合7 | 亚洲欧美日韩激情在线观看 | 青青国产线免观看手机版精品 | 欧美91精品久久久久网免费 | 4438亚洲最大 | 国产精品国产三级国产爱网 | 最近高清免费观看日本 | 四虎成人精品 | 99精品久久99久久久久久 | 亚洲二三区 | 草莓香蕉绿巨人丝瓜榴莲18 | 99久久99久久精品国产 | 欧美一区二区三区免费 | 手机在线免费黄色网站 | 国产xxx护士爽免费看 | 国产一区日韩二区欧美三 | 成人a影片在线观看 | 国产黄在线免费观看 | 国产一级特黄生活片 | 亚洲天堂影院在线观看 | 亚洲午夜网 | 2022久久国产精品免费热麻豆 | 亚洲黄色免费在线观看 | 国内精品视频 | 福利视频99 | 伊人狠狠操 | 狠狠操穴 | 国产欧美国产精品第一区 | 四虎成人免费网址在线 | 国产精品国产三级国产普通话对白 |