68精品久久久久久欧美,最近中文字幕完整在线看一,久久亚洲男人天堂,最近中文字幕完整视频高清1

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> 技術中心 >> 單片機入門 >> 單片機數碼管顯示原理

單片機數碼管顯示原理

作者:admin 來源:不詳 發(fā)布時間:2018-05-08  瀏覽:14

  小燈是一種簡單的LED,給我們視覺效果只能通過亮和滅來表達簡單信息。而這節(jié)課我們要來學習一種表達更加明確的器件,數碼管。

  1、數碼管的基本介紹

  先給大家提供一張原理圖看一下,如圖1所示。

單片機教程

圖1 數碼管原理圖

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

數碼管結構圖

圖2 數碼管結構圖

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

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

圖片

圖3 共陽數碼管電路

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

74HC138控制圖

圖4 74HC138控制圖

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

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

  2、數碼管的真值表

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

 

    #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;      //打開數碼管b和c段   

        }

}

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

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

  表1 數碼管真值表

數字

0

1

2

3

4

5

6

7

真值表

0xC0

0xF9

0xA4

0xB0

0x99

0x92

0x82

0xF8

數字

8

9

A

B

C

D

E

F

真值表

0x80

0x90

0x88

0x83

0xC6

0xA1

0x86

0x8E

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

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

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

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

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

                }

             }

         }

    }

}

編輯:admin  最后修改時間:2018-05-08

聯系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

克拉玛依市| 青铜峡市| 安康市| 阳泉市| 高密市| 丹巴县| 科技| 时尚| 余姚市| 福清市| 浦城县| 祁门县| 六安市| 新建县| 辽阳市| 云林县| 商丘市| 锦州市| 博白县| 隆化县| 惠州市| 阳曲县| 古蔺县| 南涧| 黎川县| 台中县| 东光县| 武川县| 怀宁县| 连城县| 益阳市| 远安县| 大竹县| 南岸区| 资兴市| 扶沟县| 青浦区| 都安| 于田县| 伊吾县| 原阳县|