精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

硬件模塊---數碼管基本原理與實現方法

嵌入式開發星球 ? 2024-05-11 09:20 ? 次閱讀

嵌入式中,數碼管的使用方法。

第一:數碼管基本介紹

wKgZomY-NmSAOkMRAAVCZBHXK88205.png

1、單個數碼管

wKgaomY-NnKAejy5AACMoczR768826.png

一個數碼管是由a、b、c、d、e、f、g、dp八個二極管組成,八個LED一端接在一起,另一端引腳引出來。二極管如果陽極連在一起,就是共陽極數碼管,陰極連在一起,就是共陰極數碼管。

如上圖,是一個共陰極數碼管,要使數碼管顯示不同的數字,只需點亮對應LED即可。如:數碼管顯示“0”,則a、b、c、d、e、f六個LED亮,g、dp這倆個LED滅,即可顯示“0”。

2、多個數碼管

wKgaomY-No2APN9BAAENwPqHFuI590.png

上圖所示的六個數碼管,在使用時,需要程序選定使用哪幾個數碼管,這就是“位選”,選定數碼管后再對選定的數碼管進行操作,其操作與單個數碼管的操作一致(接下來還會進一步詳解),這就是“段選”。

3、數碼管與芯片的連接

3.1 為什么要使用鎖存器?

二極管正常工作時需要5mA以上的電流,若數碼管引腳和芯片引腳直接相連,芯片的I/O口無法輸出這么大的電流,對于共陰極的數碼管,可以在陽極處接上拉電阻,對于共陽極的數碼管,可以在陰極處接下拉電阻,但是也使得“位選”需做另外的處理。

引入鎖存器,利用其輸出電流大的特點,有效的解決了LED工作電流問題,而且還可以利用鎖存器進行“位選”、“段選”。

3.2 鎖存器的電路連接

wKgZomY-Np2ASm66AAG3mPbz1ig948.png

上圖所示,連接倆塊鎖存器,U1控制段選,U2控制位選,鎖存器現再回顧一下

wKgaomY-NquAE-HUAAAmkjT5ico387.png

根據電路圖,OE始終接地,所以鎖存器工作狀態只有前三種,當LE軟件置1時,鎖存器的輸入端D與輸出端Q同高電平,同低電平,當LE軟件置0時,鎖存器輸出為Q0。

由電路圖可得,電路連接為:

單片機的芯片引腳P00—>P07分別接U1鎖存器的D0——>D7,單片機的芯片引腳P00—>P07分別接U2鎖存器的D0——>D7,也就是說U1、U2倆鎖存器都與P0相連,所以在數碼管工作狀態下,倆個鎖存器不能同時處于打開狀態,即倆個鎖存器的LE不能同時為高電平。鎖存器U1的輸出接數碼管的LED陽極,鎖存器U2的輸出接數碼管的WE,控制“數碼管選擇”。

鎖存器U2控制位選,U2打開時,U1關閉,此時U2的輸入和輸出同高、同低電平。如下圖,若使用數碼管1,則只需D0置0,其他引腳置1,即芯片P00輸出為0,P01——>P07輸出為1,即P0寄存器的狀態值為0xfe(上面低位,從下往上讀)

wKgaomY-NsqAHrLdAAHyJD-IYCo575.png

鎖存器U1控制段選,如剛剛位選了數碼管1,則接下來段選是對數碼管1的操作。此時關閉U2,打開U1,即U2的LE軟件置0,U1的LE軟件置1,而U2的LE與芯片的P27相連,U1的LE與芯片的P26相連(下圖所示),所以只需使芯片的P27輸出低電平來關閉U2鎖存器,P26輸出高電平來打開U1鎖存器。

wKgZomY-Nt6AFQabAAIDi-A37qE915.png

打開U1鎖存器后,使數碼管顯示某個數字,我們在第一節中總結過了,比如顯示一個數字“6”,需要a、c、d、e、f、g六個LED亮,所以鎖存器輸出01111101(共陰極數碼管。輸出1時點亮),即P0寄存器輸出01111101,P0寄存器的狀態值為0x7d。

wKgaomY-NvaAAcYYAACIidtSd2M599.png

wKgaomY-NweATNS7AAHmCLEyeYM486.png

第二:數碼管具體實現

第一個數碼管顯示數字“6”的程序如下:

#include
sbit dula=P2^6;
sbit wela=P2^7;
void main()
{
  wela=1;
  P0=0xfe;//位選第一個數碼管
  wela=0;

  dula=1;
  P0=0x7d;
  dula=0;
  while(1);
}

分析上面程序:

首先對連接U1、U2鎖存器LE的芯片引腳P26與P27進行位操作,重命名為“dula”與“wela”,表示“段選”和“位選”。主函數里,先打開位選:wela=1,選擇第一個數碼管,則U2鎖存器輸入和輸出均為11111110(從下往上),P0的輸出也為11111110,即0xfe,位選結束后關閉位選:wela=0。

接下來打開段選:dula=1,對第一個數碼管操作,顯示數字“6”,U1鎖存器輸入輸出均為01111101,即P0輸出為01111101,即P0的狀態值為0x7d。最后關閉段選。

注:

正因為鎖存器U1與U2同時接在芯片的P0引腳上,所以倆個鎖存器不能同時打開,否則芯片引腳P0輸出的狀態值會在U1和U2上同時發生響應,造成紊亂。

第三:數碼管顯示數字時芯片引腳的狀態值

wKgaomY-N1yAHtIlAAF3jHwxJ8g660.png

顯示數字“0”,abcdef亮,狀態值00111111——>0x3f

顯示數字“1”,bc亮,狀態值00000110——>0x06

顯示數字“2”,abdeg亮,狀態值01011011——>0x5b

顯示數字“3”,abcdg亮,狀態值01001111——>0x4f

顯示數字“4”,bcfg亮,狀態值01100110——>0x66

顯示數字“5”,acdfg亮,狀態值01101101——>0x6d

顯示數字“6”,acdefg亮,狀態值01111101——>0x7d

顯示數字“7”,abc亮,狀態值00000111——>0x07

顯示數字“8”,abcdefg亮,狀態值01111111——>0x7f

顯示數字“9”,abcdfg亮,狀態值01101111——>0x6f

顯示字母“A”,abcefg亮,狀態值01110111——>0x77

顯示字母“B”,cdefg亮,狀態值01111100——>0x7c

顯示字母“C”,adef亮,狀態值00111001——>0x39

顯示字母“D”,bcdeg亮,狀態值01011110——>0x5e

顯示字母“E”,adefg亮,狀態值01111001——>0x79

顯示字母“F”,aefg亮,狀態值01110001——>0x71

在編寫程序時將上述狀態值放入數組中,通過數組來實現數碼管的動態顯示。

放在如下數組中:

#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
}

在table數組名前加了code,表示編碼的意思,單片機程序把不需要更改的東西通過code關鍵字定義為編碼,單片機執行程序時,table只占用程序存儲空間,可以理解為占用flash,而不占用RAM

第四:數碼管實現動態顯示

一個數碼管從0到F動態顯示

#include 
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
uchar num;
sbit dula=P2^6;
sbit wela=P2^7;
void delay_ms(uint );
void main()
{
  wela=1;
  P0=0xfe;
  wela=0;

  while(1)
  {  
    for(num=0;num0;i--)
  for(j=110;j>0;j--);
}

此時第一個數碼管從0變化到F,之后停止不動。

若使數碼管從0到F反復變化,只需在while()語句里添加如下代碼:

  if(num==16)
    num=0; 

完整程序:


#include 
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
uchar num;
sbit dula=P2^6;
sbit wela=P2^7;
void delay_ms(uint );
void main()
{
  wela=1;
  P0=0xfe;
  wela=0;

  while(1)
  {  
    for(num=0;num0;i--)
  for(j=110;j>0;j--);
}

第五:數碼管經典實例

六個數碼管,第一個數碼管顯示數字“1”,間隔1秒后再在第二個數碼管上顯示數字“2”,間隔1s后在第三個數碼管上顯示數字“3”,以此類推…在第六個數碼管上顯示數字“6”

分析:

六個數碼管輪流顯示,所以位選時依次選擇數碼管1、2…6,每次位選后,再段選輸出需要顯示的數字。

第一個數碼管位選:


  wela=1;
  P0=0xfe;//第一個數碼管
  wela=0;

第一個數碼管段選輸出數字“1”:


  dula=1;
  P0=table[1];
  dula=0;
  delay_ms(1000);

位選時P0的輸出之前已經總結過了,再回憶一下,如下圖,從左到右分別為數碼管1、2、3、4…從下往上讀,得到8位二進制碼,變為16進制即可。

wKgZomY-N-WAa2gNAAE5xJGLqxQ288.png

完整程序:


#include 
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
uchar num;
sbit dula=P2^6;
sbit wela=P2^7;
void delay_ms(uint );
void main()
{
  while(1)
  {
    wela=1;
    P0=0xfe;//第一個數碼管
    wela=0;

    dula=1;
    P0=table[1];
    dula=0;
    delay_ms(1000);

    wela=1;
    P0=0xfd;//第二個數碼管
    wela=0;

    dula=1;
    P0=table[2];
    dula=0;
    delay_ms(1000);

    wela=1;
    P0=0xfb;//第三個數碼管
    wela=0;

    dula=1;
    P0=table[3];
    dula=0;
    delay_ms(1000);

    wela=1;
    P0=0xf7;//第四個數碼管
    wela=0;

    dula=1;
    P0=table[4];
    dula=0;
    delay_ms(1000);

    wela=1;
    P0=0xef;//第五個數碼管
    wela=0;

    dula=1;
    P0=table[5];
    dula=0;
    delay_ms(1000);

    wela=1;
    P0=0xdf;//第六個數碼管
    wela=0;

    dula=1;
    P0=table[6];
    dula=0;
    delay_ms(1000);
  }
}

void delay_ms(uint ms)
{
  uint i,j;
  for(i=ms;i>0;i--)
  for(j=110;j>0;j--);
}

總結:數碼管是常用器件,掌握其中的控制方法,才能走的更遠。

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

    關注

    5071

    文章

    19026

    瀏覽量

    303500
收藏 人收藏

    評論

    相關推薦

    數碼管驅動芯片的使用方法

    數碼管驅動芯片(也稱為LED驅動芯片)是一種用于控制數碼管顯示的集成電路。它可以將微控制器產生的數字信號轉換為適合數碼管顯示的電流和電壓。本文將詳細介紹數碼管驅動芯片的使用
    的頭像 發表于 12-08 16:24 ?9803次閱讀

    怎樣通過并行接口芯片去控制多個數碼管顯示呢

    實驗八、數碼管顯示實驗1、實驗目的學習“七段共陰極數碼管”顯示的基本原理;掌握通過并行接口芯片控制多個數碼管顯示的方法。2、實驗內容用一片8
    發表于 12-10 08:24

    數碼管動態顯示的基本原理實現思路

    一、模塊題目二、原理簡述動態顯示的基本原理實現思路(轉載)動態顯示實質上就是輪流點亮單個數碼管實現多位
    發表于 01-11 06:32

    動態數碼管的使用方法

    歷年的藍橋杯單片機組比賽都會考到數碼管模塊;對于省賽以及國賽來說,動態數碼管都是必考模塊!現在來給大家介紹動態數碼管的使用
    發表于 01-12 06:19

    掌握通過并行接口芯片對鍵盤進行掃描并在多位數碼管顯示數字的方法

    實驗九、鍵盤掃描及數碼管顯示實驗1、實驗目的學習了解鍵盤掃描的基本原理。掌握通過并行接口芯片對鍵盤進行掃描并在多位數碼管顯示數字的方法。2、實驗內容編寫程序,
    發表于 01-13 08:22

    數碼管靜態顯示和動態顯示的實現方法

    數碼管靜態顯示和動態顯示數碼管共陽和共陰段選和位選數碼管靜態顯示原理代碼實現數碼管動態顯示方法
    發表于 03-01 07:34

    數碼管的型號命名方法

    數碼管的型號命名方法
    發表于 12-11 10:53 ?108次下載

    學51單片機之數碼管部分

    帶您從零學51單片機之數碼管部分 目錄1 數碼管應用2 數碼管內部結構及硬件原理圖3 數碼管硬件
    發表于 02-10 14:36 ?155次下載

    數碼管型號命名方法

    數碼管型號命名方法
    發表于 12-11 10:51 ?1.4w次閱讀
    <b class='flag-5'>數碼管</b>型號命名<b class='flag-5'>方法</b>

    led數碼管的結構及檢測方法

    led數碼管的結構及檢測方法 LED數碼管是由發光二極構成的,亦稱半導體數碼管. 將條狀發光二極
    發表于 01-03 11:51 ?4962次閱讀
    led<b class='flag-5'>數碼管</b>的結構及檢測<b class='flag-5'>方法</b>

    數碼管的分類及基于AVR單片機595驅動8位數碼管顯示電路的實現

    發光二極單元(多一個小數點顯示),其基本原理是:將所有LED的一端(正極、負極均可)連在一起作為一個公共端,然后通過分別控制這組LED的另一個端口來使部分LED點亮,從而達到顯示一定字形的目的。 數碼管的分類:按能顯示多少
    發表于 11-30 11:03 ?17次下載
    <b class='flag-5'>數碼管</b>的分類及基于AVR單片機595驅動8位<b class='flag-5'>數碼管</b>顯示電路的<b class='flag-5'>實現</b>

    led數碼管怎么接線_LED數碼管的測試

    本文主要介紹了LED數碼管的安裝接線方式及LED數碼管的測試方法
    發表于 10-09 10:44 ?2.7w次閱讀

    數碼管的工作原理和使用方法解析

    數碼管是嵌入式開發中比較常用的一個模塊,本篇文章根據查閱的資料以及學習筆記整理成文,盡可能詳盡的講解常用數碼管原理和使用方法
    發表于 02-29 13:10 ?10.2w次閱讀

    51單片機按鍵控制數碼管0~9_項目五 數碼管應用實例

    (一)項目任務任務1:顯示數字子任務1.1 數碼管硬件電路認識子任務1.2 了解段選和位選概念子任務1.3 掌握數碼管的靜態顯示方法任務2:
    發表于 11-23 10:06 ?6次下載
    51單片機按鍵控制<b class='flag-5'>數碼管</b>0~9_項目五 <b class='flag-5'>數碼管</b>應用實例

    基于單片機的數碼管實驗 八段數碼管簡介

    在我們生活中隨處可見數碼管的應用,數碼管的應用形式多種多樣,拋開事物表象,深入到它的本質,正所謂萬變不離其中,數碼管應用的原理都是基本相通的。本章我們將詳細介紹數碼管
    的頭像 發表于 07-26 16:37 ?3563次閱讀
    基于單片機的<b class='flag-5'>數碼管</b>實驗 八段<b class='flag-5'>數碼管</b>簡介