目錄
1、數(shù)碼管簡(jiǎn)介
2、靜態(tài)顯示
3、動(dòng)態(tài)顯示
4、小結(jié)
相信經(jīng)過了流水燈的實(shí)現(xiàn),大家已經(jīng)弄清楚了Keil和Proteus是如何聯(lián)動(dòng)使用的,并且對(duì)51單片機(jī)也有了一定的認(rèn)識(shí),在這一章里,我?guī)Т蠹依?1單片機(jī)玩下數(shù)碼管,看最終你們能不能把自己的學(xué)號(hào)顯示出來。
1、數(shù)碼管簡(jiǎn)介
LED數(shù)碼管(LED Segment Displays)是由多個(gè)發(fā)光二極管封裝在一起組成的器件。常見的LED數(shù)碼管為“8”字型的,共計(jì)8段。每一段對(duì)應(yīng)一個(gè)發(fā)光二極管。
數(shù)碼管有共陽極和共陰極兩種。共陰極: 數(shù)碼管的發(fā)光二極管的陰極連在一起,通常公共陰極接地。當(dāng)陽極為高電平時(shí),發(fā)光二極管點(diǎn)亮。共陽極: 數(shù)碼管的發(fā)光二極管的陽極連在一起,公共陽極接正電壓,當(dāng)某個(gè)發(fā)光二極管的陰極接低電平時(shí),發(fā)光二極管被點(diǎn)亮,相應(yīng)的段被顯示。
2、靜態(tài)顯示
現(xiàn)在我們先來講一下數(shù)碼管靜態(tài)顯示,其實(shí)數(shù)碼管的本質(zhì)就是8個(gè)LED組成的一個(gè)“8”字形加一個(gè)點(diǎn)(dp),如果我們想要顯示0,那么就是把上圖(c)中的a、b、c、d、e、f六段數(shù)碼管點(diǎn)亮,讓g、dp熄滅,最后就顯示數(shù)字0了。
在開始之前,大家先要弄懂2進(jìn)制、10進(jìn)制、16進(jìn)制的轉(zhuǎn)換關(guān)系,因?yàn)閱纹瑱C(jī)只認(rèn)識(shí)二進(jìn)制,而我們習(xí)慣于使用10進(jìn)制。那么為何我要提到16進(jìn)制呢,這是因?yàn)?位16進(jìn)制恰好能夠表示4位二進(jìn)制,為了程序的簡(jiǎn)單,我們一般使用16進(jìn)制來寫代碼。比如3FH是什么意思呢,首先末尾的H表示16進(jìn)制的標(biāo)志,還有同學(xué)記得我們上一章講到的HEX嗎?我上一章說HEX就是16進(jìn)制的意思,H就是HEX的首字母。所以我們知道了3F是個(gè)16進(jìn)制數(shù),考慮到大家剛?cè)腴T,我教大家如何使用計(jì)算器轉(zhuǎn)換成2進(jìn)制。
我們可以看到3F對(duì)應(yīng)的二進(jìn)制是00111111,我看到這串?dāng)?shù)字我就知道這在共陰極的情況下顯示的是0,為什么呢,我來給大家分析。
首先共陰極的情況下,1就是燈亮,0就是燈滅。00111111正好對(duì)應(yīng)8段LED燈。由于右邊是低位,所以a=1、b=1、c=1、d=1、e=1、f=1、g=0、dp=0。對(duì)應(yīng)我們上面數(shù)碼管圖,顯示的就是數(shù)字0。這其實(shí)就是數(shù)碼管顯示數(shù)字的原理。大家也可以想一下如果是共陽極的情況呢?
現(xiàn)在直接實(shí)踐環(huán)節(jié),我們一起來顯示個(gè)數(shù)字0,大家也可以根據(jù)上面的碼表自己選擇數(shù)字或字母。就不再演示建工程了,直接寫代碼,有忘記怎么建工程的同學(xué)回到第一章看看。
首先還是從硬件開始,打開Proteus,設(shè)計(jì)原理圖。
大家可以根據(jù)我的硬件圖進(jìn)行搭建,為什么需要排阻呢,因?yàn)镻0端口內(nèi)部沒有上拉電阻,如何將P0端口作為I/O口時(shí),它會(huì)處于懸空狀態(tài),無法輸出高電平,所以我們要給他加一個(gè)上拉電阻,以此給負(fù)載提供電流。我在這里故意使用P0這個(gè)特殊的端口,就是為了讓大家知道這個(gè)知識(shí)點(diǎn),后續(xù)很多實(shí)際工程中,很多人使用了P0端口卻沒有加排阻,導(dǎo)致調(diào)試不出結(jié)果。(包括我本人也被這個(gè)點(diǎn)坑過),所以在這里告訴大家。
軟件設(shè)計(jì)我們使用Keil寫代碼,生成HEX文件即可,代碼比較簡(jiǎn)單,大家對(duì)照著圖片敲一下,當(dāng)作練習(xí)。這個(gè)代碼的意思就是讓P0口輸出00111111,用16進(jìn)制表示就是0x3f,其中0x表示16進(jìn)制,3f就是00111111,這個(gè)在上面講過了,就不多贅述。
編譯結(jié)果如下,0錯(cuò)誤0警告。
注:如果找不到HEX文件,可能是魔術(shù)棒那里沒有打勾。
最后我們把HEX文件燒錄到Proteus里的51單片機(jī)中,進(jìn)行運(yùn)行驗(yàn)證。
可以看到,數(shù)碼管已經(jīng)顯示數(shù)字0,證明我們的靜態(tài)顯示工程成功了!大家也可以上面的碼表修改一下數(shù)字,多練幾遍。
3、動(dòng)態(tài)顯示
如果有兩位的數(shù)碼管,每個(gè)數(shù)碼管要顯示不同的字符,那么電路該怎么搭建呢?對(duì)于多位數(shù)碼管,經(jīng)常使用動(dòng)態(tài)掃描的方法來顯示。
無論在任何時(shí)刻只有一個(gè)LED數(shù)碼管處于顯示狀態(tài),利用人的視覺暫留效應(yīng),依次顯示每個(gè)不同的數(shù)碼管。某一時(shí)刻,只有一位LED數(shù)碼管被選通顯示,其余位則是熄滅的,但人眼看到的是若干位穩(wěn)定的同時(shí)顯示的字符。
硬件連接圖如下,大家可以在Proteus中搭建出來。
這個(gè)硬件連接也不是很難,數(shù)碼管左邊A、B、C、D、E、F、G、DP就是控制段選的,右邊1、2、3、4、5、6、7、8是控制8個(gè)數(shù)碼管到底哪一個(gè)亮(一次只能亮一個(gè)數(shù)碼管)。
下面是我們的軟件設(shè)計(jì)部分,大家利用Keil新建工程,把下面代碼復(fù)制到main.c。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay (uint i)
{
uint m,n;
for(m=i;m>0;m--)
for(n=200;n>0;n--);
}
void main()
{
uint j;
while(1)
{
for(j=1;j<9;j++)
{
switch(j)
{
case 1: P2=0xfe;P1=duan[3]; break;
case 2: P2=0xfd;P1=duan[1]; break;
case 3: P2=0xfb;P1=duan[9]; break;
case 4: P2=0xf7;P1=duan[4]; break;
case 5: P2=0xef;P1=duan[0]; break;
case 6: P2=0xdf;P1=duan[3]; break;
case 7: P2=0xbf;P1=duan[0]; break;
case 8: P2=0x7f;P1=duan[6]; break;
}
delay(1);
}
}
}
編譯成功,且順利生成了HEX文件,接下來我們只需把文件放到51單片機(jī)中就可以運(yùn)行驗(yàn)證就可以了。
這個(gè)時(shí)候,學(xué)號(hào)就顯示出來了,其實(shí)這8個(gè)數(shù)字是一個(gè)接一個(gè)的亮,反復(fù)循環(huán)的,由于速度很快加上人眼的視覺殘留,讓我們感覺像是8個(gè)數(shù)碼管一起在亮,大家也可以修改我的代碼,看看能不能把自己的學(xué)號(hào)顯示出來。提示一下大家,只需要修改switch語句里面的數(shù)字即可。文章來源:http://www.zghlxwxcb.cn/news/detail-410378.html
4、小結(jié)
對(duì)于數(shù)碼管顯示的學(xué)習(xí)到這里就結(jié)束了,其實(shí)回過頭來看,數(shù)碼管的顯示本質(zhì)還是LED,只是比較復(fù)雜的LED結(jié)構(gòu),需要考慮的因素多了一些罷了,這就需要大家多訓(xùn)練,在實(shí)踐中感悟總結(jié)了。學(xué)到這一章,相信大家對(duì)于51單片機(jī)有了自己的理解和認(rèn)識(shí),入門51單片機(jī)的訣竅就是對(duì)I/O高低電平的理解,把這個(gè)理解清楚了,就基本入門了51單片機(jī)。文章來源地址http://www.zghlxwxcb.cn/news/detail-410378.html
到了這里,關(guān)于51單片機(jī)入門教程(3)——數(shù)碼管顯示學(xué)號(hào)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!