色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

單片機數碼管顯示原理

倩倩 ? 來源:電子開發網 ? 2020-09-18 16:46 ? 次閱讀

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

1、數碼管的基本介紹

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

圖1 數碼管原理圖

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

圖2 數碼管結構圖

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

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

圖3 共陽數碼管電路

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

圖4 74HC138控制圖

我們現在的目的是讓LEDS0這個引腳輸出低電平,相信大家現在可以獨立根據前邊學到的內容把ADDR0,ADDR1,ADDR2,ADDR3,ENLED這4個輸入狀態寫出來,現在大家不要偷懶,都去根據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) //程序死循環

{

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

}

}

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

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

表1 數碼管真值表

數字01234567

真值表0xC00xF90xA40xB00x990x920x820xF8

數字89ABCDEF

真值表0x800x900x880x830xC60xA10x860x8E

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

3、數碼管的靜態顯示

從第三課我們學習74HC138以后,我們了解到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;

}

}

}

}

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    242

    文章

    23252

    瀏覽量

    660572
  • 單片機
    +關注

    關注

    6035

    文章

    44554

    瀏覽量

    634641
  • 數碼管
    +關注

    關注

    32

    文章

    1882

    瀏覽量

    91064
收藏 人收藏

    評論

    相關推薦

    請問單片機數碼管顯示程序怎么寫?求分享

    請教單片機數碼管顯示程序怎么寫?
    發表于 07-13 06:22

    單片機數碼管顯示“HELLO”的實現方法

    題目概述:單片機數碼管顯示“HELLO”。編程:#include #define uchar unsigned char#define uint unsigned intuchar str[5
    發表于 12-02 06:08

    51單片機數碼管顯示學號

    51單片機數碼管顯示學號,學學數碼管吧。初學者多看看。
    發表于 04-05 16:15 ?55次下載

    單片機數碼管顯示加減計數的程序資料免費下載

    本文檔的主要內容詳細介紹的是單片機數碼管顯示加減計數的程序資料免費下載。
    發表于 11-30 08:00 ?31次下載
    <b class='flag-5'>單片機</b><b class='flag-5'>數碼管</b><b class='flag-5'>顯示</b>加減計數的程序資料免費下載

    基于51單片機數碼管顯示

    基于51單片機數碼管顯示,定時器,數碼管時間顯示## 數碼管
    發表于 11-11 19:21 ?18次下載
    基于51<b class='flag-5'>單片機</b><b class='flag-5'>數碼管</b><b class='flag-5'>顯示</b>

    51單片機數碼管顯示60秒倒計時(C語言)

    51單片機數碼管顯示60秒倒計時基于普中51單片機開發板,運用定時器/計數器0和1,實現60秒的倒計時和LED燈0.5s間隔閃爍文章目錄51單片機
    發表于 11-21 17:21 ?71次下載
    51<b class='flag-5'>單片機</b><b class='flag-5'>數碼管</b><b class='flag-5'>顯示</b>60秒倒計時(C語言)

    單片機數碼管顯示按鍵矩陣

    單片機數碼管顯示按鍵矩陣效果視頻如下: 單片機按鍵數碼管
    發表于 12-23 19:48 ?11次下載
    <b class='flag-5'>單片機</b><b class='flag-5'>數碼管</b><b class='flag-5'>顯示</b>按鍵矩陣

    單片機數碼管顯示

    單片機數碼管顯示
    發表于 09-19 17:36 ?5次下載

    基于AT89C51單片機數碼管顯示撥碼開關編碼仿真及代碼

    基于AT89C51單片機數碼管顯示撥碼開關編碼仿真及代碼
    發表于 05-04 15:05 ?2次下載

    基于AT89C51單片機數碼管顯示的頻率計

    基于AT89C51單片機數碼管顯示的頻率計Proteus仿真及程序
    發表于 05-04 15:03 ?4次下載

    基于AT89C51單片機數碼管顯示的溫控電機Proteus仿真

    基于AT89C51單片機數碼管顯示的溫控電機Proteus仿真及程序
    發表于 05-04 15:01 ?13次下載

    基于ATmega8單片機數碼管顯示程序Proteus仿真源程序

    基于ATmega8單片機數碼管顯示程序Proteus仿真源程序
    發表于 05-05 09:20 ?1次下載

    基于51單片機數碼管顯示電子時鐘例程源代碼

    基于51單片機數碼管顯示電子時鐘例程源代碼
    發表于 05-12 16:33 ?48次下載

    基于89C51單片機數碼管顯示動態數據源程序

    基于89C51單片機數碼管顯示動態數據源程序
    發表于 05-15 10:28 ?2次下載

    基于51單片機數碼管顯示撥碼開關編碼仿真代碼

    基于51單片機數碼管顯示撥碼開關編碼仿真設計資料
    發表于 05-22 16:02 ?5次下載
    主站蜘蛛池模板: 吉吉影音先锋av资源| 欧美激情视频二区| 失禁h啪肉尿出来高h| 在线观看插女生免费版| 国产成人精品免费视频大| 久久综合久久伊人| 亚洲成年男人的天堂网| 阿v天堂2017在无码| 久久久久久88色偷偷| 亚欧日韩毛片在线看免费网站 | 超碰97人人做人人爱少妇| 久久精品亚洲AV无码三区观看| 他揉捏她两乳不停呻吟口述| a视频在线看| 老司机亚洲精品影院在线观看| 亚洲国产欧美日韩在线一区| 俄罗斯一级毛片aaaa| 嫩草影院在线观看精品| 在线观看国产精选免费| 好吊妞国产欧美日韩视频| 熟女人妻-蜜臀AV-首页| 北条麻妃快播| 欧美伦理片第7页| 99国内精精品久久久久久婷婷| 久久本道久久综合伊人| 亚洲精品久久久无码一区二区| 国产精品69人妻无码久久| 日韩欧美1区| 被老师按在办公桌吸奶头| 男人天堂黄色| 52色擼99热99| 麻花传媒MD0044视频| 中文字幕无线手机在线| 久久国产露脸老熟女熟69| 亚洲精品影院久久久久久| 国产人妻人伦精品熟女麻豆| 私人玩物在线观看| 国产国拍精品AV在线观看| 色噜噜噜噜亚洲第一| 成人网络电视破解版| 日韩av国产av欧美天堂社区|