亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1030|回復(fù): 2
收起左側(cè)

第5章 定時(shí)器與數(shù)碼管基礎(chǔ)5.3 5.4

[復(fù)制鏈接]
ID:1167894 發(fā)表于 2026-3-26 10:32 | 顯示全部樓層 |閱讀模式

5.3 數(shù)碼管的學(xué)習(xí)
LED小燈是一種簡(jiǎn)單的LED,只能通過(guò)亮和滅來(lái)表達(dá)簡(jiǎn)單的信息。這節(jié)課學(xué)習(xí)一種能表達(dá)更復(fù)雜信息的器件——LED數(shù)碼管。
5.3.1 數(shù)碼管的基本介紹
先提供一張數(shù)碼管原理圖,如圖5-2所示。
5-2.png
圖5-2  數(shù)碼管原理圖
這是比較常見(jiàn)的數(shù)碼管的原理圖,Kingst51開(kāi)發(fā)板子上一共有6個(gè)數(shù)碼管。前邊有了LED小燈的學(xué)習(xí),數(shù)碼管學(xué)習(xí)就會(huì)輕松的多了。從圖5-3可以看出,數(shù)碼管共有a、b、c、d、e、f、g、dp這么8個(gè)段,而實(shí)際上,這8個(gè)段每一段都是一個(gè)LED小燈,所以一個(gè)數(shù)碼管就是由8個(gè)LED小燈組成的。看一下數(shù)碼管內(nèi)部結(jié)構(gòu)的示意圖,如圖5-3。
5-3.png
圖5-3  數(shù)碼管結(jié)構(gòu)示意圖
數(shù)碼管分為共陽(yáng)和共陰兩種,共陰數(shù)碼管就是8只LED小燈的陰極是連接在一起的,陰極是公共端,由陽(yáng)極來(lái)控制單個(gè)小燈的亮滅。同理,共陽(yáng)數(shù)碼管就是陽(yáng)極接在一起。圖5-2的數(shù)碼管上邊有2個(gè)com,這就是數(shù)碼管的公共端。為什么有2個(gè)呢,一方面是2個(gè)可以起到對(duì)稱的效果,剛好是10個(gè)引腳,另外一個(gè)方面,公共端通過(guò)的電流較大,初中物理知識(shí)有講,并聯(lián)電路電流之和等于總電流,用2個(gè)com可以把公共電流平均到2個(gè)引腳上去,降低單條線路承受的電流。
從開(kāi)發(fā)板的電路圖上能看出來(lái),所用的數(shù)碼管都是共陽(yáng)數(shù)碼管,一共有6個(gè),如圖5-4所示。
5-4.png
圖5-4  Kingst51數(shù)碼管電路
6個(gè)數(shù)碼管的com都是接到了正極上,當(dāng)然了,和LED小燈電路一樣,也是由74HC138控制三極管的導(dǎo)通來(lái)控制整個(gè)數(shù)碼管的使能。先來(lái)看最右邊的DS1這個(gè)數(shù)碼管,原理圖上可以看出,控制DS1的三極管是Q17,控制Q17的引腳是LEDS0,對(duì)應(yīng)到74HC138上的就是U3的Y0輸出,如圖5-5所示。
5-5.png
圖5-5  74HC138控制圖
點(diǎn)亮DS1這個(gè)數(shù)碼管首先要讓LEDS0這個(gè)引腳輸出低電平,相信讀者現(xiàn)在可以根據(jù)前邊學(xué)過(guò)的知識(shí)獨(dú)立把ADDR0、ADDR1、ADDR2、ADDR3、ENLED這4個(gè)所需輸入的值寫出來(lái)了,真正根據(jù)74HC138的手冊(cè)實(shí)際操作一次,不需要記住這些結(jié)論,但是只要遇到根據(jù)手冊(cè)資料寫一次,慢慢遇到同類芯片就知道如何去解決問(wèn)題了。
數(shù)碼管通常是用來(lái)顯示數(shù)字的,板子上有6個(gè)數(shù)碼管,習(xí)慣上稱之為6位,那控制位選擇的就是74HC138了。而數(shù)碼管內(nèi)部的8個(gè)LED小燈稱之為數(shù)碼管的段,數(shù)碼管的段選擇(即該段的亮滅)是通過(guò)P0口控制。
5.3.2 數(shù)碼管的真值表
數(shù)碼管的8個(gè)段,直接當(dāng)成8個(gè)LED小燈來(lái)控制,那就是a、b、c、d、e、f、g、dp一共8個(gè)LED小燈。通過(guò)圖5-2可以看出,如果點(diǎn)亮b和c這兩個(gè)LED小燈,也就是數(shù)碼管的b段和c段,其他的所有的段都熄滅的話,就可以讓數(shù)碼管顯示出一個(gè)數(shù)字1,那么這個(gè)時(shí)候?qū)嶋H上P0的值就是0b11111001,十六進(jìn)制就是0xF9。那么寫一個(gè)程序進(jìn)去,來(lái)看一看數(shù)碼管顯示的效果。
#include <reg52.h>

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

void main()
{
    ENLED = 0;    //使能U3,選擇數(shù)碼管DS1
    ADDR3 = 1;
    ADDR2 = 0;
    ADDR1 = 0;
    ADDR0 = 0;
    P0 = 0xF9;    //點(diǎn)亮數(shù)碼管段b和c
    while (1);
}
把這個(gè)程序編譯一下,并下載到單片機(jī)中,就可以看到程序運(yùn)行的結(jié)果是在最右側(cè)的數(shù)碼管上顯示了一個(gè)數(shù)字1。
用同樣的方法,可以把其他的數(shù)字字符都在數(shù)碼管上顯示出來(lái),而數(shù)碼管顯示的數(shù)字字符對(duì)應(yīng)給P0的賦值,叫做數(shù)碼管的真值表。來(lái)列一下Kingst51開(kāi)發(fā)板電路圖的數(shù)碼管真值表,注意,這個(gè)真值表里顯示的數(shù)字都不帶小數(shù)點(diǎn)的,如表5-7。
表5-7 數(shù)碼管真值表
字符
0
1
2
3
4
5
6
7
數(shù)值
0xC0
0xF9
0xA4
0xB0
0x99
0x92
0x82
0xF8
字符
8
9
A
B
C
D
E
F
數(shù)值
0x80
0x90
0x88
0x83
0xC6
0xA1
0x86
0x8E
可以把上邊那個(gè)用數(shù)碼管顯示數(shù)字1程序中的P0的賦值隨便修改成表5-7真值表中的數(shù)值,看看顯示的數(shù)字的效果。
5.3.3 數(shù)碼管的靜態(tài)顯示
在第3章學(xué)習(xí)了74HC138,了解到74HC138在同一時(shí)刻只能讓一個(gè)輸出口為低電平,也就是說(shuō)在一個(gè)時(shí)刻內(nèi),只能使能一個(gè)數(shù)碼管,并根據(jù)給出的P0的值來(lái)改變這個(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)的意義就沒(méi)有了。這節(jié)課先用一個(gè)數(shù)碼管的靜態(tài)顯示來(lái)實(shí)現(xiàn)簡(jiǎn)單的秒表,為下節(jié)課的動(dòng)態(tài)顯示打下基礎(chǔ)。
51單片機(jī)的C語(yǔ)言編程有一個(gè)關(guān)鍵字code。前邊課程定義變量的時(shí)候,一般用到unsigned char或者unsigned int這兩個(gè)關(guān)鍵字,這樣定義的變量都是放在單片機(jī)的RAM中,程序中可以隨意去改變這些變量的值。但是還有一種數(shù)據(jù),在程序中要使用,但是卻不會(huì)改變它的值,定義這種數(shù)據(jù)時(shí)可以加一個(gè)code關(guān)鍵字修飾一下,這個(gè)數(shù)據(jù)就會(huì)存儲(chǔ)到單片機(jī)的程序空間Flash中,這樣可以大大節(jié)省單片機(jī)的RAM的使用量,畢竟單片機(jī)RAM空間比較小,而程序空間則大的多。那么現(xiàn)在要使用的數(shù)碼管真值表,只會(huì)使用它們的值,而不需要改變它們,就可以用code關(guān)鍵字把它放入Flash中了,具體程序代碼如下。
#include <reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
//用數(shù)組來(lái)存儲(chǔ)數(shù)碼管的真值表,數(shù)組將在下一章詳細(xì)介紹
unsigned char code LedChar[] = {
    0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
    0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
void main()
{
    unsigned char cnt = 0;  //記錄T0中斷次數(shù)
    unsigned char sec = 0;  //記錄經(jīng)過(guò)的秒數(shù)
    ENLED = 0;    //使能U3,選擇數(shù)碼管DS1
    ADDR3 = 1;
    ADDR2 = 0;
    ADDR1 = 0;
    ADDR0 = 0;
    TMOD = 0x01;  //設(shè)置T0為模式1
    TH0  = 0xB8;  //T0賦初值0xB800
    TL0  = 0x00;
    TR0  = 1;     //啟動(dòng)T0
   
    while (1)
    {
        if (TF0 == 1)        //判斷T0是否溢出
        {
            TF0 = 0;          //T0溢出后,清零中斷標(biāo)志
            TH0 = 0xB8;      //并重新賦初值
            TL0 = 0x00;
            cnt++;             //計(jì)數(shù)值自加1
            if (cnt >= 50)   //判斷T0溢出是否達(dá)到50
            {
                cnt = 0;              //達(dá)到50次后計(jì)數(shù)值清零
                P0 = LedChar[sec];  //當(dāng)前秒數(shù)對(duì)應(yīng)的真值表中的值送到P0
                sec++;                //秒數(shù)記錄自加1
                if (sec >= 16)      //當(dāng)秒數(shù)超過(guò)0x0F(15)后,重新從0開(kāi)始
                {
                    sec = 0;
                }
            }
        }
    }
}
5.4 練習(xí)題
1、熟練掌握單片機(jī)定時(shí)器的原理和應(yīng)用方法。
2、使用定時(shí)器來(lái)實(shí)現(xiàn)左右移動(dòng)的流水燈程序。
3、了解數(shù)碼管的原理,掌握數(shù)碼管的真值表的計(jì)算方法。
4、編程實(shí)現(xiàn)數(shù)碼管靜態(tài)顯示秒表的倒計(jì)時(shí)。

5-7.jpg
回復(fù)

使用道具 舉報(bào)

ID:412177 發(fā)表于 2026-4-10 14:35 | 顯示全部樓層
74138的E1E2E3的連接不是很準(zhǔn)確,對(duì)于對(duì)74138不熟悉的人容易引起誤會(huì),E1應(yīng)為1,E2、E3應(yīng)為0。才能正常工作。
回復(fù)

使用道具 舉報(bào)

ID:1064915 發(fā)表于 2026-4-11 08:18 | 顯示全部樓層
哪個(gè)老師的教程
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表