久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51單片機(jī)學(xué)習(xí)之4-數(shù)碼管

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年10月20日   【字體:

11

一、數(shù)碼管工作原理



 

 

數(shù)碼管顯示亮度高,響應(yīng)速度快,可以在一些比較差的環(huán)境中使用。有1位、2位、4位、8位連體等。。。也有專用于顯示時(shí)間的數(shù)碼管。

如圖,一位數(shù)碼管由8個(gè)二極管構(gòu)成,7個(gè)構(gòu)成“日”字型,1個(gè)是小圓點(diǎn)。分共陰和共陽(yáng)。 共陰:所有二極管的負(fù)極連接在一起,接到電源負(fù)極。共陽(yáng):所有二極管的正極連接在一起,接到電源正極。(圖(a)引腳畫(huà)錯(cuò)了。)

驅(qū)動(dòng)的原理都很簡(jiǎn)單,如共陽(yáng)型數(shù)碼管的驅(qū)動(dòng)。圖(b)右邊的電路圖可以看出,所有的二極管正極都接在電源正極,abcdefgdp都接在單片機(jī)的IO口上,在《51單片機(jī)復(fù)習(xí)筆記1》:http://www.zg4o1577.cn/mcu/2111.html 中介紹過(guò)驅(qū)動(dòng)二極管的原理,所以這里只需要在相應(yīng)的二極管負(fù)極給低電平即可讓相應(yīng)的二極管發(fā)光。

這里補(bǔ)充一下,為什么給高電平二極管就不亮,給低電平就亮呢。因?yàn)閱纹瑱C(jī)是TTL電平,也就是說(shuō)高電平即輸出5V,低電平就不輸出電壓0V,二極管的正極接在電源的正極那就是5V,那么二極管的負(fù)極如果也給高電平的話,那么就相當(dāng)于在二極管的負(fù)極也接到了5V,二極管兩端都是5V 沒(méi)有電勢(shì)差,就相當(dāng)于沒(méi)有通電一樣,自然不會(huì)發(fā)光。給低電平即0V,那么二極管就有一個(gè)5V的電勢(shì)差且是正向偏置,二極管自然就發(fā)光了,共陰型恰好相反。

   看下圖(設(shè)共陽(yáng)型),假如我們要讓數(shù)碼管顯示‘1’,那么只需要給bc段的二極管低電平,其他為高電平即可讓數(shù)碼管顯示‘1’。假如我們要讓數(shù)碼管顯示‘2’,那么只給abged低電平即可讓數(shù)碼管顯示‘2’。要顯示什么,只給相應(yīng)的發(fā)光二極管低電平即可。



 

  那么在實(shí)際編程中應(yīng)該怎么寫(xiě)程序呢。

我們將abcdefgdp八個(gè)引腳接到單片機(jī)的P1口,P1^0aP1^1b.....P1^7dp。畫(huà)紅框的是低四位。那么如果要顯示2

P1^0 = a =0P1^1 = b = 0P1^6 = g = 0P1^4 = e = 0P1^3 = d = 0  

剩余的為1那么就是:1010 0100 = 0xA4 

程序代碼中將0xA4賦值給P1即可,如 P1 = 0xA4;  看圖。

 





 

 




  由于數(shù)碼管需要占用單片機(jī)的IO口很多,所以一般會(huì)搭配
74HC573芯片來(lái)擴(kuò)展IO口。《51單片機(jī)復(fù)習(xí)筆記1》有介紹該芯片的使用方法。驅(qū)動(dòng)原理一樣。
 

 

數(shù)碼管顯示方式有兩種:

靜態(tài)顯示:其實(shí)和上面一樣,如P1=0xA4; 那么P1一直維持0xA4那么數(shù)碼管的每一段二極管的狀態(tài)都會(huì)保持字形不變。變動(dòng)P1的電平狀態(tài)才會(huì)改變新字形。優(yōu)點(diǎn)是占用CPU時(shí)間少。缺點(diǎn)是占用IO口多硬件設(shè)計(jì)復(fù)雜,特別是控制多位數(shù)碼管時(shí)尤為占用IO口,成本較高。


動(dòng)態(tài)顯示:動(dòng)態(tài)其實(shí)就是利用發(fā)光二極管的余暉和人眼視覺(jué)暫留作用。控制多位數(shù)碼管時(shí),將所有數(shù)碼管的段選并聯(lián)在一起,由位選線控制是哪位數(shù)碼管接受段選編碼。如下圖一樣。

例如:

P0組是并聯(lián)所有數(shù)碼管的段選。P2^6P2^7選擇哪位數(shù)碼管。我要顯示520,那么     首先選中第一位數(shù)碼管,然后送數(shù)字5的段編碼控制段選的P0口。

然后再選中第二位數(shù)碼管,再送數(shù)字2的段選編碼給P0,這時(shí)候第一位數(shù)碼管雖然斷電,但是二極管并沒(méi)有瞬間熄滅,所以還有余暉保持字形。
繼續(xù)再選中第三位數(shù)碼管送數(shù)字0的段選編碼給P0,這時(shí)候第一、第二位數(shù)碼管雖然都斷電,但由于切換速度太快,余暉仍沒(méi)有完全熄滅就造成三位數(shù)碼管同時(shí)顯示不同的數(shù)字字型的假象。

 

 




 

上圖是六位共陰型數(shù)碼管搭配兩片74HC573芯片的電路圖。L2是控制數(shù)碼管的abcdefgdpL3是選擇要顯示的數(shù)碼管。
下圖是
74HC573芯片接在單片機(jī)上的10個(gè)IO口。(完美詮釋74HC573的實(shí)用性,哈哈~
 

 



 

 

下圖是編碼列表



 

利用數(shù)碼管顯示秒表程序源碼:

/*****************************************

說(shuō)明:動(dòng)態(tài)顯示方式控制數(shù)碼管。秒表源碼

設(shè)計(jì)者:LQQ1007566569

開(kāi)發(fā)板:DB-51 Ver2.1

數(shù)碼管:六位共陰型

******************************************/

#include<reg52.h>

#include<intrins.h>

 

#define uint unsigned int

#define uchar unsigned char

 

sbit dual = P2^6;// 控制 L274HC573芯片是否鎖存

sbit weal = P2^7;// 控制 L374HC573芯片是否鎖存

 

uchar aa;

 

// 數(shù)碼管顯示數(shù)字的編碼 table[0] 就是顯示 0

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

 

// 要顯示指定數(shù)字的數(shù)碼管

uchar code tablewe[]={

0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

 

#define Time 50000

#define YsTime 1

 

void ShowTime(uchar bai, uchar shi, uchar ge);

void delay(uint z);

 

/******** 主函數(shù) ********/

void main()

{

uchar b, s, g;

TMOD = 0x01;// 選擇定時(shí)器工作方式 1

 

TH0=(65536-Time)/256;// (65536 - (50000/(12*(1/12))))/256 ;

TL0=(65536-Time)%256;// (65536 - (50000/(12*(1/12))))%256 ;

 

EA=1;  // 開(kāi)啟總中斷

ET0=1;// 開(kāi)啟定時(shí)器 中斷

TR0=1;// 啟動(dòng)定時(shí)器 0

 

while(1)

{

   if(aa == 20)// 50ms*20 = 1000ms = 1s

   {

   aa = 0;

g ++; // 個(gè)位自增

 

if(g == 10)

{

s++;   // 十位自增

g = 0;

}

if(s == 10)

{// 百位自增

b++;

s = g = 0;

}

if(b == 10)

b = s = g = 0;

   }

   ShowTime(table[b], table[s], table[g]);

}

}

 

/******** 數(shù)碼管顯示函數(shù) ********/

void ShowTime(uchar bai, uchar shi, uchar ge)

{

// 顯示百位

dual = 1;

P0  = bai;

dual = 0;

 P0 = 0xff;

weal = 1;

P0   = 0xfe;

weal = 0;

delay(YsTime);

 

   // 顯示十位

dual = 1;

P0  = shi;

dual = 0;

 P0 = 0xff;

weal = 1;

P0   = 0xfd;

weal = 0;

delay(YsTime);  

  

  // 顯示個(gè)位

dual = 1;

P0  = ge;

dual = 0;

 P0 = 0xff;

weal = 1;

P0   = 0xfb;

weal = 0;

delay(YsTime);

}

 

/******** 延時(shí)函數(shù) ********/

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

 

/******** 中斷函數(shù) 每50ms觸發(fā)一次 ********/

void timer0() interrupt 1 

{

TH0=(65536-Time)/256;

TL0=(65536-Time)%256;

aa++;

}

 

也有采用BCD-7段譯碼芯片:共陽(yáng)型的74LS4874LS49CD4511。共陰的74LS4674LS47CD4513
 

 

第十二集

 

霖鋒教程中的是兩個(gè)四位一體共陰型數(shù)碼管,通過(guò)一片74HC573芯片控制兩個(gè)四位數(shù)碼管的段選,通過(guò)一片74HC138芯片選擇位數(shù)碼管(即位選)。

 

74HC138的引腳說(shuō)明:



 

先把一些簡(jiǎn)單的引腳說(shuō)一下:

GND接地、VCC接電源正極。

E1E2:低電平有效,如果其中一個(gè)為高電平則無(wú)法操控芯,Y0 — Y7 輸出全高電平。

E3:高電平有效,如果為低電平則無(wú)法操控芯片,Y0 — Y7 輸出全高電平。

如果要控制芯片首先是 VCCGND接電源,E1E2低電平或接低,E3高電平。

下面這三個(gè)引腳是比較重要的:

AIO口是輸入,Y組端口是輸出。

A0A1A2是用來(lái)控制Y0 — Y7 輸出電平狀態(tài),往里面輸入八進(jìn)制數(shù)即可指定Y0 — Y7中其中一個(gè)為低電平。例如想要 Y5 為低電平,那么5的八進(jìn)制為101,只需要給 A2 = 1A1=0A0=1,即可讓Y5為低電平。想要Y3為低電平,那么3的八進(jìn)制為011,只需要給A2 = 0A1 = 1A0 = 0 即可。

記住,AIO只是控制Y組的某一IO輸出低電平而已,其余都為高電平。

 

教程中有八位數(shù)碼管,所有剛好Y組全部都用上。

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 黄色a视频 | 九九九久久国产免费 | 久久91| 久久免费大片 | 亚洲97 | 亚洲精品99999 | 午夜精品久久久 | 久久久123 | 欧美日韩在线综合 | 亚洲免费一 | 色综合天天综合网国产成人网 | 精品一级毛片 | 亚洲欧洲在线看 | 久久天堂 | 久久1区| 成人午夜网站 | 欧美视频精品 | 久久综合久色欧美综合狠狠 | 高清av在线| h视频在线播放 | 免费视频一区二区 | 亚洲日本成人 | 精品日韩一区二区 | 精品久久久网站 | 户外露出一区二区三区 | 欧美黄色一区 | 国产一区二区影院 | 红桃视频一区二区三区免费 | 国产精品毛片一区二区在线看 | 久久国产精品一区二区三区 | 久久久久久久久久久久91 | 国产a视频 | 国产精品美女久久久久aⅴ国产馆 | 黄色免费av| 亚洲欧美精品 | 午夜影院在线观看视频 | 欧美视频 | 久久午夜精品 | 亚洲人成网站777色婷婷 | 国产三区四区 | 色偷偷人人澡人人爽人人模 |