<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發(fā)網(wǎng)

      電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
      搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機(jī) >> 正文

      單片機(jī)數(shù)碼管顯示原理

      作者:佚名    文章來源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2018-05-20

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

        1、數(shù)碼管的基本介紹

        先給大家提供一張?jiān)韴D看一下,如圖1所示。

      數(shù)碼管原理圖 

      圖1 數(shù)碼管原理圖

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

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

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

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

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

      共陽數(shù)碼管電路,共陽數(shù)碼管驅(qū)動(dòng)電路

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

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

      74HC138控制圖

      圖4 74HC138控制圖

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

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

        2、數(shù)碼管的真值表

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

              }

      }

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

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

        表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

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

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

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

        數(shù)碼管靜態(tài)顯示是對(duì)應(yīng)動(dòng)態(tài)顯示而言的,靜態(tài)顯示對(duì)于一兩個(gè)數(shù)碼管還行,多個(gè)數(shù)碼管,靜態(tài)顯示實(shí)現(xiàn)的意義就沒有了。這節(jié)課我們先用一個(gè)數(shù)碼管的靜態(tài)顯示來實(shí)現(xiàn)一個(gè)簡單的秒表,為下節(jié)課的動(dòng)態(tài)顯示打下基礎(chǔ)。

        先來介紹一個(gè)51單片機(jī)的關(guān)鍵字code。我們前邊課程定義變量的時(shí)候,一般用到unsigned char或者unsigned int這兩個(gè)關(guān)鍵字,這樣定義的變量都是放在我們的單片機(jī)的RAM中,我們?cè)诔绦蛑锌梢噪S意去改變這個(gè)變量的值。但是還有一種常數(shù),我們?cè)诔绦蛑幸褂茫菂s不進(jìn)行對(duì)這個(gè)值的改變,這種值我們可以加一個(gè)code關(guān)鍵字修飾一下,修飾完畢后,這個(gè)值就會(huì)存儲(chǔ)到我們的程序空間flash中,這樣可以大大節(jié)省我們單片機(jī)的RAM的使用量,畢竟我們的RAM空間比較小,而程序空間是很大的。比如我們現(xiàn)在要使用的數(shù)碼管真值表,我們來看一下我們下邊的這個(gè)程序。

       

      #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ù)組來存儲(chǔ)數(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è)置定時(shí)器0為模式1

           TH0  = 0xB8;

          TL0  = 0x00;                   //定時(shí)值初值

           TR0  = 1;                      //打開定時(shí)器0

          while(1)

          {

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

              {

                  TF0 = 0;

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

                  TL0 = 0x00;

                  counter++;

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

                  {

                      counter = 0;        //counter清0,重新計(jì)數(shù)

                      P0 = LedChar[j++]; //把數(shù)組里的對(duì)應(yīng)值送給P0

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

                      {

                           j = 0;

                      }

                   }

               }

          }

      }

      Tags:七段數(shù)碼管,數(shù)碼管,單片機(jī),數(shù)碼管顯示原理  
      責(zé)任編輯:admin
      請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個(gè)字
      [ 查看全部 ] 網(wǎng)友評(píng)論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 一本一道久久精品综合| 青青草原综合久久大伊人精品| 国产成人综合久久综合| 亚洲综合色丁香婷婷六月图片| 亚洲国产成+人+综合| 一本色道久久88—综合亚洲精品| 色噜噜狠狠色综合中文字幕| 亚洲伊人色欲综合网| 亚洲国产精品综合久久20| 一本大道久久a久久综合| 狠狠色婷婷七月色综合| 色噜噜狠狠色综合欧洲selulu| 狠狠人妻久久久久久综合| 久久综合九色综合网站| 天天综合日日噜噜噜| 婷婷亚洲综合五月天小说| 天天综合久久一二三区| 亚洲AV综合色区无码一二三区| 狠狠人妻久久久久久综合蜜桃 | 亚洲 自拍 另类小说综合图区| 狠狠色伊人亚洲综合成人| 日韩亚洲国产综合久久久| 亚洲国产综合精品中文第一| 亚洲国产天堂久久综合网站| 一本色道久久综合狠狠躁篇| 色综合天天综合高清网| 久久婷婷国产综合精品| 久久综合久久自在自线精品自| 久久午夜综合久久| 亚洲综合无码精品一区二区三区| 亚洲欧美日韩综合久久久| 99久久国产综合精品1尤物| 久久综合亚洲色一区二区三区| 狠狠色婷婷七月色综合| 久久久久高潮综合影院| 亚洲综合在线一区二区三区| 亚洲av日韩av综合| 好了av第四综合无码久久| 亚洲 自拍 另类小说综合图区| 亚洲国产精品综合久久一线| 97久久婷婷五月综合色d啪蜜芽|