一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

定時(shí)器和數(shù)碼管解析(下)

jf_78858299 ? 來(lái)源:硬件攻城獅 ? 作者:硬件攻城獅 ? 2023-04-21 14:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.2.3 定時(shí)器程序應(yīng)用

了解了定時(shí)器相關(guān)的寄存器,那么我們下面就來(lái)做一個(gè)定時(shí)器的程序,鞏固一下我們學(xué)到的內(nèi)容。我們這節(jié)課的程序先使用定時(shí)器0,在使用定時(shí)器的時(shí)候,需要以下幾個(gè)步驟:

第一步:設(shè)置特殊功能寄存器TMOD,配置好工作模式;

第二步:設(shè)置計(jì)數(shù)寄存器TH0和TL0的初值;

第三步:設(shè)置TCON,通過(guò)打開(kāi)TR0位來(lái)讓定時(shí)器開(kāi)始計(jì)數(shù)。

第四步:判斷TCON寄存器的TF0位,監(jiān)測(cè)定時(shí)器溢出情況。

寫程序之前,我們要先來(lái)學(xué)會(huì)計(jì)算如何用定時(shí)器定時(shí)時(shí)間。我們的晶振是11.0592M,時(shí)鐘周期就是1/11059200,機(jī)器周期就是12/11059200,我們假如要定時(shí)20ms,就是0.02秒,要經(jīng)過(guò)x個(gè)機(jī)器周期得到0.02秒,我們來(lái)算一下x*12/11059200=0.02,得到x= 18432。那么我們現(xiàn)在16位的定時(shí)器溢出值是65536,我們可以這樣,先給TH0和TL0一個(gè)初值,讓他們經(jīng)過(guò)18432個(gè)機(jī)器周期后剛好溢出,溢出后我們可以通過(guò)檢測(cè)TF0位得知,就剛好是0.02秒。這個(gè)初值y = 65536 - 18432 = 47104,轉(zhuǎn)成16進(jìn)制就是0xB800,那么就是TH0 = 0xB8,TL0 = 0x00。

那0.02秒我們已經(jīng)定時(shí)出來(lái)了,細(xì)心的同學(xué)會(huì)發(fā)現(xiàn),我們?nèi)绻踔抵苯咏o一個(gè)0x0000,一直到65536溢出,定時(shí)器定時(shí)值最大也就是71ms左右,那么我們想定時(shí)更長(zhǎng)時(shí)間怎么辦呢?用你小學(xué)學(xué)過(guò)的邏輯,倍數(shù)關(guān)系就可以解決此問(wèn)題。

那好了,我們下面就用程序來(lái)實(shí)現(xiàn)以下這個(gè)功能。

#include //包含寄存器的庫(kù)文件

sbit LED = P0^0;

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

void main()

{

unsigned char counter = 0;

ENLED = 0; ADDR0 = 0; ADDR1 = 1;

ADDR2 = 1; ADDR3 = 1; LED = 1;  //74HC138和LED燈初始化部分

TMOD = 0x01;   //設(shè)置定時(shí)器0為模式1

TH0  = 0xB8;

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

TR0  = 1;      //打開(kāi)定時(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ù)

             LED = !LED;   //LED取反操作,0-->1,1-->0

        }                 

    }                       

}

}

程序都有注釋,不難理解,這里要解釋一個(gè)地方,就是兩次if判斷,細(xì)心的同學(xué)會(huì)發(fā)現(xiàn),if(1 == TF0)這句,我把1寫前邊,這個(gè)地方我推薦新手按照我這樣來(lái)寫,因?yàn)槿绻覀儗慽f(TF0 == 1),作為新手來(lái)說(shuō),不小心丟掉一個(gè)’=’號(hào)后,寫成if(TF0 = 1),這樣實(shí)際上在語(yǔ)法上是可以通過(guò)的,我們用的Keil4還會(huì)出一個(gè)警告說(shuō)明一下,Keil以前的版本以及一些其他軟件,可能根本不會(huì)出任何錯(cuò)誤或者警告提示,但是這樣產(chǎn)生的Hex文件下載到單片機(jī)里邊,程序就錯(cuò)了,大家可以改改試試看。

本程序?qū)崿F(xiàn)的結(jié)果是我們板子上最右邊的小燈點(diǎn)亮持續(xù)一秒,熄滅持續(xù)一秒,也就是以0.5HZ的頻率進(jìn)行閃爍。

1.3 數(shù)碼管學(xué)習(xí)

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

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

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

圖片

圖5-2 數(shù)碼管原理圖

這是比較常見(jiàn)的數(shù)碼管的原理圖,我們板子上一共有6只數(shù)碼管。前邊有了LED小燈的學(xué)習(xí),數(shù)碼管學(xué)習(xí)就會(huì)輕松的多了。從圖5-1能看出來(lái),數(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)圖5-2。

圖片

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

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

從我們板子的電路圖上能看出來(lái),我們所用的數(shù)碼管是共陽(yáng)數(shù)碼管,如圖5-3所示。

圖片

圖5-4 共陽(yáng)數(shù)碼管電路

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

圖片

圖5-5 74HC138控制圖

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

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

1.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-1可以輕而易舉的看出來(lái),如果我們點(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。也有可以自動(dòng)生成數(shù)碼管段位碼的軟件可以從http://www.51hei.com/mcudown/ 下載文件名是"數(shù)碼管段位設(shè)碼程序.rar",那么我們寫一個(gè)程序進(jìn)去,看看讓數(shù)碼管顯示一下看看。

#include               //包含寄存器的庫(kù)文件                   

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開(kāi)啟三極管Q17           

    while(1)             //程序死循環(huán)  

    {

         P0 = 0xF9;      //打開(kāi)數(shù)碼管b和c段   

    }

}

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

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

表5-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ù)字顯示出來(lái)。

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

從第三課我們學(xué)習(xí)74HC138以后,我們了解到74HC138同時(shí)一次只能讓一個(gè)輸出口為低電平,也就是在一個(gè)時(shí)刻內(nèi),我們只能讓一個(gè)數(shù)碼管顯示,始終選通數(shù)碼管并且可以根據(jù)我們的P0總線的信號(hào)來(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)一個(gè)簡(jiǎn)單的秒表,為下節(jié)課的動(dòng)態(tài)顯示打下基礎(chǔ)。

先來(lái)介紹一個(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ù)碼管真值表,我們來(lái)看一下我們下邊的這個(gè)程序。

#include //包含寄存器的庫(kù)文件

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ù)組來(lái)存儲(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;                      //打開(kāi)定時(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重新開(kāi)始

            {

                 j = 0;

            }

         }

     }

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5433

    瀏覽量

    124319
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3298

    瀏覽量

    118768
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3826

    瀏覽量

    82914
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于單片機(jī)的綜合應(yīng)用程序數(shù)碼管【C語(yǔ)言】定時(shí)器控制數(shù)碼管

    基于單片機(jī)的綜合應(yīng)用程序數(shù)碼管【C語(yǔ)言】定時(shí)器控制數(shù)碼管
    發(fā)表于 01-06 13:44 ?27次下載

    LESSON3_數(shù)碼管靜態(tài)顯示及定時(shí)器和中斷應(yīng)用

    LESSON3_數(shù)碼管靜態(tài)顯示及定時(shí)器和中斷應(yīng)用
    發(fā)表于 02-18 18:21 ?0次下載

    LESSON3_數(shù)碼管靜態(tài)顯示及定時(shí)器和中斷應(yīng)用

    數(shù)碼管靜態(tài)顯示及定時(shí)器和中斷應(yīng)用 可以給初學(xué)者學(xué)習(xí)使用 如果有需要可以下載。
    發(fā)表于 03-14 10:40 ?1次下載

    LESSON3_數(shù)碼管靜態(tài)顯示及定時(shí)器和中斷應(yīng)用

    LESSON3_數(shù)碼管靜態(tài)顯示及定時(shí)器和中斷應(yīng)用。
    發(fā)表于 04-29 16:50 ?5次下載

    定時(shí)器掃描數(shù)碼管(不閃爍)

    定時(shí)器掃描數(shù)碼管(不閃爍) C51單片機(jī)源碼,KEIL源文件,C語(yǔ)言編寫
    發(fā)表于 06-20 16:36 ?7次下載

    LESSON3_數(shù)碼管靜態(tài)顯示及定時(shí)器和中斷應(yīng)用

    數(shù)碼管是如何顯示出字符的 數(shù)碼管靜態(tài)顯示與動(dòng)態(tài)顯示原理 中斷概念 單片機(jī)的定時(shí)器應(yīng)用
    發(fā)表于 07-01 17:17 ?1次下載

    基于8051的Proteus仿真-定時(shí)器控制數(shù)碼管動(dòng)顯示

    基于8051的Proteus仿真-定時(shí)器控制數(shù)碼管動(dòng)顯示
    發(fā)表于 09-01 23:33 ?19次下載

    基于SOPC的定時(shí)器控制數(shù)碼管顯示

    運(yùn)行在DE1上,通過(guò)程序的控制使數(shù)碼管顯示,從而實(shí)現(xiàn)時(shí)鐘的功能,實(shí)驗(yàn)結(jié)果表明,基于SOPC的系統(tǒng)環(huán)境,可以利用定時(shí)器控制數(shù)碼管顯示。此外,還可以根據(jù)不同的用戶需求實(shí)現(xiàn)不同的功能,方便
    發(fā)表于 11-13 17:07 ?12次下載
    基于SOPC的<b class='flag-5'>定時(shí)器</b>控制<b class='flag-5'>數(shù)碼管</b>顯示

    定時(shí)器1秒計(jì)數(shù),數(shù)碼管顯示0-999程序代碼【下載】

    定時(shí)器1秒計(jì)數(shù),數(shù)碼管顯示0-999
    發(fā)表于 12-20 14:23 ?18次下載

    數(shù)碼管顯示的原理靜態(tài)顯示及中斷概念單片機(jī)的定時(shí)器應(yīng)用視頻教程

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)碼管顯示的原理靜態(tài)顯示及中斷概念單片機(jī)的定時(shí)器應(yīng)用視頻教程包括了:1.數(shù)碼管是如何顯示出字符的,2.數(shù)碼管靜態(tài)顯示與動(dòng)態(tài)顯示原理,3.中斷概念,4.單片機(jī)
    發(fā)表于 03-26 14:35 ?17次下載
    <b class='flag-5'>數(shù)碼管</b>顯示的原理靜態(tài)顯示及中斷概念單片機(jī)的<b class='flag-5'>定時(shí)器</b>應(yīng)用視頻教程

    定時(shí)器控制數(shù)碼管動(dòng)態(tài)顯示的仿真電路圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是定時(shí)器控制數(shù)碼管動(dòng)態(tài)顯示的仿真電路圖免費(fèi)下載
    發(fā)表于 01-07 11:41 ?12次下載
    <b class='flag-5'>定時(shí)器</b>控制<b class='flag-5'>數(shù)碼管</b>動(dòng)態(tài)顯示的仿真電路圖免費(fèi)下載

    使用定時(shí)器控制數(shù)碼管動(dòng)顯示的程序和工程文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用定時(shí)器控制數(shù)碼管動(dòng)顯示的程序和工程文件免費(fèi)下載。
    發(fā)表于 06-10 16:54 ?5次下載
    使用<b class='flag-5'>定時(shí)器</b>控制<b class='flag-5'>數(shù)碼管</b>動(dòng)<b class='flag-5'>管</b>顯示的程序和工程文件免費(fèi)下載

    使用定時(shí)器控制數(shù)碼管動(dòng)態(tài)顯示的程序和工程文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用定時(shí)器控制數(shù)碼管動(dòng)態(tài)顯示的程序和工程文件免費(fèi)下載。
    發(fā)表于 06-10 16:54 ?19次下載
    使用<b class='flag-5'>定時(shí)器</b>控制<b class='flag-5'>數(shù)碼管</b>動(dòng)態(tài)顯示的程序和工程文件免費(fèi)下載

    STM32+Proteus仿真實(shí)現(xiàn)滴答定時(shí)器計(jì)時(shí)和數(shù)碼管實(shí)時(shí)顯示功能

    STM32+Proteus仿真實(shí)現(xiàn)滴答定時(shí)器計(jì)時(shí)和數(shù)碼管實(shí)時(shí)顯示功能
    發(fā)表于 11-24 21:06 ?73次下載
    STM32+Proteus仿真實(shí)現(xiàn)滴答<b class='flag-5'>定時(shí)器</b>計(jì)時(shí)<b class='flag-5'>和數(shù)碼管</b>實(shí)時(shí)顯示功能

    使用定時(shí)器和數(shù)碼管實(shí)現(xiàn)簡(jiǎn)易秒計(jì)時(shí)

    從今天開(kāi)始,我們利用上前幾天學(xué)習(xí)的定時(shí)器和數(shù)碼管,一起設(shè)計(jì)一個(gè)簡(jiǎn)單的秒計(jì)時(shí)。
    的頭像 發(fā)表于 11-02 10:50 ?2883次閱讀
    使用<b class='flag-5'>定時(shí)器</b><b class='flag-5'>和數(shù)碼管</b>實(shí)現(xiàn)簡(jiǎn)易秒計(jì)時(shí)<b class='flag-5'>器</b>