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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

寫一個(gè)數(shù)碼管動(dòng)態(tài)掃描的程序,實(shí)現(xiàn)兼驗(yàn)證動(dòng)態(tài)顯示原理

2oON_changxuemc ? 2018-01-21 10:56 ? 次閱讀

多個(gè)數(shù)碼管顯示數(shù)字的時(shí)候,我們實(shí)際上是輪流點(diǎn)亮數(shù)碼管(一個(gè)時(shí)刻內(nèi)只有一個(gè)數(shù)碼管是亮的),利用人眼的視覺暫留現(xiàn)象(也叫余輝效應(yīng)),就可以做到看起來是所有數(shù)碼管都同時(shí)亮了,這就是動(dòng)態(tài)顯示,也叫做動(dòng)態(tài)掃描。

例如:有 2 個(gè)數(shù)碼管,我們要顯示“12”這個(gè)數(shù)字,先讓高位的位選三極管導(dǎo)通,然后控制段選讓其顯示“1”,延時(shí)一定時(shí)間后再讓低位的位選三極管導(dǎo)通,然后控制段選讓其顯示“2”。把這個(gè)流程以一定的速度循環(huán)運(yùn)行就可以讓數(shù)碼管顯示出“12”,由于交替速度非常快,人眼識(shí)別到的就是“12”這兩位數(shù)字同時(shí)亮了。

那么一個(gè)數(shù)碼管需要點(diǎn)亮多長時(shí)間呢?也就是說要多長時(shí)間完成一次全部數(shù)碼管的掃描呢(很明顯:整體掃描時(shí)間=單個(gè)數(shù)碼管點(diǎn)亮?xí)r間*數(shù)碼管個(gè)數(shù))?答案是:10ms 以內(nèi)。當(dāng)電視機(jī)和顯示器還處在 CRT(電子顯像管)時(shí)代的時(shí)候,有一句很流行的廣告語——“100Hz無閃爍”,沒錯(cuò),只要刷新率大于 100Hz,即刷新時(shí)間小于 10ms,就可以做到無閃爍,這也就是我們的動(dòng)態(tài)掃描的硬性指標(biāo)。那么你也許會(huì)問,有最小值的限制嗎?理論上沒有,但實(shí)際上做到更快的刷新卻沒有任何進(jìn)步的意義了,因?yàn)橐呀?jīng)無閃爍了,再快也還是無閃爍,只是徒然增加 CPU 的負(fù)荷而已(因?yàn)?1 秒內(nèi)要執(zhí)行更多次的掃描程序)。所以,通常我們?cè)O(shè)計(jì)

程序的時(shí)候,都是取一個(gè)接近 10ms,又比較規(guī)整的值就行了。我們開發(fā)板上有 6 個(gè)數(shù)碼管,那么我們現(xiàn)在就來著手寫一個(gè)數(shù)碼管動(dòng)態(tài)掃描的程序,實(shí)現(xiàn)兼驗(yàn)證上面講的動(dòng)態(tài)顯示原理。

我們的目標(biāo)還是實(shí)現(xiàn)秒表功能,只不過這次有 6 個(gè)位了,最大可以計(jì)到 999999 秒。那么現(xiàn)在要實(shí)現(xiàn)的這個(gè)程序相對(duì)于前幾章的例程來說就要復(fù)雜的多了,既要處理秒表計(jì)數(shù),又要處理動(dòng)態(tài)掃描。在編寫這類稍復(fù)雜的程序時(shí),建議初學(xué)者們先用程序流程圖來把程序的整個(gè)流程理清,在動(dòng)手寫程序之前先把整個(gè)程序的結(jié)構(gòu)框架搭好,把每一個(gè)環(huán)節(jié)要實(shí)現(xiàn)的功能先細(xì)化出來,然后再用程序代碼一步一步的去實(shí)現(xiàn)出來。這樣就可以避免無處下筆的迷茫感了。如圖 6-1 就是本例的程序流程圖,大家先根據(jù)流程圖把程序的執(zhí)行經(jīng)過在大腦里走一遍,然后再看接下來的程序代碼,體會(huì)一下流程圖的作用,看是不是能幫助你更順暢的理清程序流程。

圖 6-1 數(shù)碼管動(dòng)態(tài)顯示秒表程序流程圖

#include

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

unsigned char code LedChar[] = { //數(shù)碼管顯示字符轉(zhuǎn)換表

0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,

0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E

};

unsigned char LedBuff[6] = { //數(shù)碼管顯示緩沖區(qū),初值 0xFF 確保啟動(dòng)時(shí)都不亮

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF

};

void main(){

unsigned char i = 0; //動(dòng)態(tài)掃描的索引

unsigned int cnt = 0; //記錄 T0 中斷次數(shù)

unsigned long sec = 0; //記錄經(jīng)過的秒數(shù)

ENLED = 0; //使能 U3,選擇控制數(shù)碼管

ADDR3 = 1; //因?yàn)樾枰獎(jiǎng)討B(tài)改變 ADDR0-2 的值,所以不需要再初始化了

TMOD = 0x01; //設(shè)置 T0 為模式 1

TH0 = 0xFC; //為 T0 賦初值 0xFC67,定時(shí) 1ms

TL0 = 0x67;

TR0 = 1; //啟動(dòng) T0

while (1){

if (TF0 == 1){ //判斷 T0 是否溢出

TF0 = 0; //T0 溢出后,清零中斷標(biāo)志

TH0 = 0xFC; //并重新賦初值

TL0 = 0x67;

cnt++; //計(jì)數(shù)值自加 1

if (cnt >= 1000){ //判斷 T0 溢出是否達(dá)到 1000 次

cnt = 0; //達(dá)到 1000 次后計(jì)數(shù)值清零

sec++; //秒計(jì)數(shù)自加 1

//以下代碼將 sec 按十進(jìn)制位從低到高依次提取并轉(zhuǎn)為數(shù)碼管顯示字符

LedBuff[0] = LedChar[sec%10];

LedBuff[1] = LedChar[sec/10%10];

LedBuff[2] = LedChar[sec/100%10];

LedBuff[3] = LedChar[sec/1000%10];

LedBuff[4] = LedChar[sec/10000%10];

LedBuff[5] = LedChar[sec/100000%10];

}

//以下代碼完成數(shù)碼管動(dòng)態(tài)掃描刷新

if (i == 0)

{ ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0]; }

else if (i == 1)

{ ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=LedBuff[1]; }

else if (i == 2)

{ ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=LedBuff[2]; }

else if (i == 3)

{ ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=LedBuff[3]; }

else if (i == 4)

{ ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=LedBuff[4]; }

else if (i == 5)

{ ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[5]; }

}

}

}

這段程序,大家自己抄到 Keil 中,然后邊抄邊結(jié)合程序流程圖來理解,最終下載到實(shí)驗(yàn)板上看一下運(yùn)行結(jié)果。其中下邊的 if...else 語句就是每 1ms 快速的刷新一個(gè)數(shù)碼管,這樣 6個(gè)數(shù)碼管整體刷新一遍的時(shí)間就是 6ms,視覺感官上就是 6 個(gè)數(shù)碼管同時(shí)亮起來了。

在 C 語言中, /”等同于數(shù)學(xué)里的除法運(yùn)算,而“%”等同于我們小學(xué)學(xué)的求余數(shù)運(yùn)算,這個(gè)前邊已有介紹。如果是 123456 這個(gè)數(shù)字,我們要正常顯示在數(shù)碼管上,個(gè)位顯示,就是直接對(duì) 10 取余數(shù),這個(gè)“6”就出來了,十位數(shù)字就是先除以 10,然后再對(duì) 10 取余數(shù),以此類推,就把 6 個(gè)數(shù)字全部顯示出來了。

對(duì)于多選一的動(dòng)態(tài)刷新數(shù)碼管的方式,我們?nèi)绻?switch 會(huì)有更好的效果,大家來看一下我們用 switch 語句完成的情況。

#include

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

unsigned char code LedChar[] = { //數(shù)碼管顯示字符轉(zhuǎn)換表

0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,

0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E

};

unsigned char LedBuff[6] = { //數(shù)碼管顯示緩沖區(qū),初值 0xFF 確保啟動(dòng)時(shí)都不亮

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF

};

void main(){

unsigned char i = 0; //動(dòng)態(tài)掃描的索引

unsigned int cnt = 0; //記錄 T0 中斷次數(shù)

unsigned long sec = 0; //記錄經(jīng)過的秒數(shù)

ENLED = 0; //使能 U3,選擇控制數(shù)碼管

ADDR3 = 1; //因?yàn)樾枰獎(jiǎng)討B(tài)改變 ADDR0-2 的值,所以不需要再初始化了

TMOD = 0x01; //設(shè)置 T0 為模式 1

TH0 = 0xFC; //為 T0 賦初值 0xFC67,定時(shí) 1ms

TL0 = 0x67;

TR0 = 1; //啟動(dòng) T0

while (1){

if (TF0 == 1){ //判斷 T0 是否溢出

TF0 = 0; //T0 溢出后,清零中斷標(biāo)志

TH0 = 0xFC; //并重新賦初值

TL0 = 0x67;

cnt++; //計(jì)數(shù)值自加 1

if (cnt >= 1000){ //判斷 T0 溢出是否達(dá)到 1000 次

cnt = 0; //達(dá)到 1000 次后計(jì)數(shù)值清零

sec++; //秒計(jì)數(shù)自加 1

//以下代碼將 sec 按十進(jìn)制位從低到高依次提取并轉(zhuǎn)為數(shù)碼管顯示字符

LedBuff[0] = LedChar[sec%10];

LedBuff[1] = LedChar[sec/10%10];

LedBuff[2] = LedChar[sec/100%10];

LedBuff[3] = LedChar[sec/1000%10];

LedBuff[4] = LedChar[sec/10000%10];

LedBuff[5] = LedChar[sec/100000%10];

}

//以下代碼完成數(shù)碼管動(dòng)態(tài)掃描刷新

switch (i){

case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0]; break;

case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=LedBuff[1]; break;

case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=LedBuff[2]; break;

case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=LedBuff[3]; break;

case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=LedBuff[4]; break;

case 5: ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[5]; break;

default: break;

}

}

}

}

程序完成的功能是一模一樣的,但大家看一下,switch 語句是不是比 if...else 語句顯得要整齊清爽呢。

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

    關(guān)注

    32

    文章

    1889

    瀏覽量

    92186
  • 動(dòng)態(tài)顯示
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    11826

原文標(biāo)題:單片機(jī)數(shù)碼管動(dòng)態(tài)顯示程序及原理講解

文章出處:【微信號(hào):changxuemcu,微信公眾號(hào):暢學(xué)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 1人收藏
  • guoqianayi1

評(píng)論

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

數(shù)碼管動(dòng)態(tài)顯示

數(shù)碼管動(dòng)態(tài)顯示,要讓數(shù)碼管顯示0到7這8個(gè)數(shù)字,如上所示為主函數(shù)代碼。我的問題是為什么要加上P0=0xff這行代碼?按照
發(fā)表于 08-27 15:33

如何實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示

實(shí)現(xiàn)功能:按下按鍵時(shí),數(shù)碼管動(dòng)態(tài)顯示‘ 鍵值-掃描值 ’按鍵松開時(shí),數(shù)碼管動(dòng)態(tài)顯示‘ 0-00
發(fā)表于 01-07 06:22

數(shù)碼管動(dòng)態(tài)顯示的基本原理與實(shí)現(xiàn)思路

、模塊題目二、原理簡述動(dòng)態(tài)顯示的基本原理與實(shí)現(xiàn)思路(轉(zhuǎn)載)動(dòng)態(tài)顯示實(shí)質(zhì)上就是輪流點(diǎn)亮單個(gè)數(shù)碼管實(shí)現(xiàn)
發(fā)表于 01-11 06:32

完成數(shù)碼管動(dòng)態(tài)顯示的方法

開拓者FPGA開發(fā)板上有六個(gè)共陽極八段數(shù)碼管,本實(shí)驗(yàn)將完成數(shù)碼管動(dòng)態(tài)顯示數(shù)碼管動(dòng)態(tài)/靜態(tài)
發(fā)表于 01-18 10:25

分享個(gè)基本的數(shù)碼管動(dòng)態(tài)顯示案例

穩(wěn)定地顯示各自的圖案。在上個(gè)鏈接的文章,即介紹模塊化設(shè)計(jì)的文章中,有個(gè)實(shí)例是利用撥碼開關(guān)手動(dòng)地控制數(shù)碼管的位選。而在實(shí)現(xiàn)
發(fā)表于 08-01 15:21

FPGA入門實(shí)現(xiàn)教程之數(shù)碼管動(dòng)態(tài)顯示

FPGA入門實(shí)現(xiàn)教程之數(shù)碼管動(dòng)態(tài)顯示
發(fā)表于 11-13 16:25 ?93次下載

數(shù)碼管動(dòng)態(tài)顯示)【C語言版】

數(shù)碼管動(dòng)態(tài)顯示)【C語言版】數(shù)碼管動(dòng)態(tài)顯示)【C語言版】數(shù)碼管動(dòng)態(tài)顯示)【C語言版】
發(fā)表于 12-29 15:51 ?0次下載

MIN數(shù)碼管動(dòng)態(tài)顯示

數(shù)碼管動(dòng)態(tài)顯示,MIN數(shù)碼管動(dòng)態(tài)顯示,MIN。
發(fā)表于 05-03 10:48 ?11次下載

8個(gè)數(shù)碼管靜態(tài)顯示_數(shù)碼管動(dòng)態(tài)顯示

本文主要介紹了幾個(gè)數(shù)碼管靜態(tài)顯示以及數(shù)碼管動(dòng)態(tài)顯示程序數(shù)碼管由多個(gè)發(fā)光二極
發(fā)表于 01-16 16:37 ?2w次閱讀
8<b class='flag-5'>個(gè)數(shù)碼管</b>靜態(tài)<b class='flag-5'>顯示</b>_<b class='flag-5'>數(shù)碼管</b>的<b class='flag-5'>動(dòng)態(tài)顯示</b>

數(shù)碼管動(dòng)態(tài)掃描顯示01234567程序(三種方案)

在高校電子信息類專業(yè)單片機(jī)的教學(xué)過程中,數(shù)碼管動(dòng)態(tài)顯示實(shí)現(xiàn)方法是學(xué)生普遍反映較難掌握的內(nèi)容。鑒于此,本文為大家?guī)砣?b class='flag-5'>個(gè)數(shù)碼管動(dòng)態(tài)
發(fā)表于 01-29 11:24 ?9.8w次閱讀
<b class='flag-5'>數(shù)碼管</b><b class='flag-5'>動(dòng)態(tài)</b><b class='flag-5'>掃描</b><b class='flag-5'>顯示</b>01234567<b class='flag-5'>程序</b>(三種方案)

通過FPGA DIY開發(fā)板實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示

8個(gè)數(shù)碼管動(dòng)態(tài)顯示數(shù)字,數(shù)碼管依次顯示數(shù)字0~7
的頭像 發(fā)表于 06-20 01:29 ?4567次閱讀
通過FPGA DIY開發(fā)板<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>數(shù)碼管</b><b class='flag-5'>動(dòng)態(tài)顯示</b>

使用數(shù)碼管動(dòng)態(tài)顯示123456的程序免費(fèi)下載

本文檔的主要內(nèi)容詳細(xì)介紹的是使用數(shù)碼管動(dòng)態(tài)顯示123456的程序免費(fèi)下載。解釋:數(shù)碼管動(dòng)態(tài)顯示,其實(shí)就是
發(fā)表于 08-07 17:33 ?13次下載
使用<b class='flag-5'>數(shù)碼管</b><b class='flag-5'>動(dòng)態(tài)顯示</b>123456的<b class='flag-5'>程序</b>免費(fèi)下載

使用51單片機(jī)設(shè)計(jì)數(shù)碼管動(dòng)態(tài)顯示的電路圖和程序及資料說明

數(shù)碼管的靜態(tài)顯示,是指定某一個(gè)或者幾個(gè)數(shù)碼管,然后顯示數(shù)據(jù)。動(dòng)態(tài)顯示方式,所謂
發(fā)表于 07-15 17:39 ?6次下載
使用51單片機(jī)設(shè)計(jì)<b class='flag-5'>數(shù)碼管</b><b class='flag-5'>動(dòng)態(tài)顯示</b>的電路圖和<b class='flag-5'>程序</b>及資料說明

FPGA入門系列實(shí)驗(yàn)教程之使用FPGA實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示的資料免費(fèi)下載

實(shí)現(xiàn)開發(fā)板上 8 個(gè)數(shù)碼管動(dòng)態(tài)顯示 0~7。通過這個(gè)實(shí)驗(yàn),掌握采用 Verilog HDL語言編程實(shí)現(xiàn) 7 段數(shù)碼管
發(fā)表于 06-12 16:32 ?15次下載
FPGA入門系列實(shí)驗(yàn)教程之使用FPGA<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>數(shù)碼管</b><b class='flag-5'>動(dòng)態(tài)顯示</b>的資料免費(fèi)下載

數(shù)碼管動(dòng)態(tài)顯示的原理概述

動(dòng)態(tài)顯示的特點(diǎn)是將所有數(shù)碼管的段選線并聯(lián)在起,由位選線控制是哪一位數(shù)碼管有效。選亮數(shù)碼管采用動(dòng)態(tài)
發(fā)表于 11-04 08:00 ?0次下載
主站蜘蛛池模板: 穿白丝袜边走边尿白丝袜 | 高清观看ZSHH96的视频素材 | 成人国产精品日本在线 | 久久久久久久久免费视频 | 国产成人精品s8p视频 | 美女穿丝袜被狂躁动态图 | 欧美性最猛xxxx在线观看视频 | 免费乱理伦片在线观看夜 | 99re热有精品国产 | 2019香蕉在线观看直播视频 | 国产午夜人成在线视频麻豆 | 中文字幕无码他人妻味 | 日韩一级精品久久久久 | 精品久久免费视频 | 亚洲免费成人 | 国产午夜精品久久久久九九 | 好看的电影网站亚洲一区 | 中文字幕亚洲第一 | 女性爽爽影院免费观看 | 鲁大师影院在线视频在线观看 | 日本69xxxx| 美女被C污黄网站免费观看 美女白虎穴 | 午夜aaaa | 国产精品夜夜春夜夜爽久久小 | 国产女人视频免费观看 | 97超碰在线视频 免费 | 亚洲VA天堂VA欧美VA在线 | 狠狠撩色姣姣综合久久 | 东京热 百度影音 | music radio在线收听 | 成人在线视频免费看 | 亚洲精品久久一区二区三区四区 | 日本浴室日产在线系列 | 99久久久无码国产精品免费人妻 | 免费精品国偷自产在线在线 | 久久免费看少妇级毛片蜜臀 | 国产成人一区二区三区在线观看 | 亚洲精品中文字幕制 | 美美哒免费影视8 | 午夜日本大胆裸艺术 | 国产交换丝雨巅峰 |

電子發(fā)燒友

中國電子工程師最喜歡的網(wǎng)站

  • 2931785位工程師會(huì)員交流學(xué)習(xí)
  • 獲取您個(gè)性化的科技前沿技術(shù)信息
  • 參加活動(dòng)獲取豐厚的禮品