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

專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

第7課 數(shù)碼管動態(tài)顯示

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年12月30日   【字體:

         在第6課里,我們講到數(shù)碼管的靜態(tài)顯示,利用靜態(tài)顯示法,通過控制位選和段選,可以讓數(shù)任意幾位數(shù)碼管顯示任意字符,但由于所有位數(shù)碼管的相同的段選全部接在一起,所以只能同時顯示相同的數(shù)字,例如8位同時顯示8字,1、3、5位同時顯示3字。但大家想一下,如果我們要讓數(shù)碼管同一時刻顯示不同的數(shù)字,如圖1所示的現(xiàn)象,用靜態(tài)顯示的方法就不能夠?qū)崿F(xiàn),這里就只能用到動態(tài)顯示的方法,今天這一節(jié)我們主要講解數(shù)碼管動態(tài)顯示的原理的程序?qū)崿F(xiàn)的方法。

圖1 數(shù)碼管同時顯示123456
 
在講解動態(tài)顯示方法之前,我們先介紹在種數(shù)碼管及單片機程序開發(fā)過程常用的方法-數(shù)組編碼法。
1、數(shù)組編碼
在跟數(shù)碼管相關的程序中,可以對位進行編碼,也可對段進行編碼,這里我們以段編碼進行講解。通過第8課的程序我們知道,在位選確定后,要顯示數(shù)字8時,P0=0x80,顯示數(shù)字3時P0=0xb0,也就是0xb0,0x80分別可以表示數(shù)字3和8,按此方法,我們把在數(shù)碼管上顯示0-f,16個數(shù)字全部用16制度表示出來,這16個16進制數(shù)就稱為數(shù)碼管可顯示0-f的相應的編碼,如圖2所示(注意共陽和共陰極數(shù)碼管相應的編碼有所不同,這里以實驗板上共陽極的為例)。
圖2 共陽極數(shù)碼管編碼
在編程中,編碼的表示方法如下:
unsigned char code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e };
這里編碼表示的方法與C語言中數(shù)組定義的方法基本一樣。table是數(shù)組名,后面需加[],中括號中需加上數(shù)組中元素的個數(shù),也可以不寫。等號的右邊用一個大括號將所有元素包含起來,里面的元素之間用“,”隔開,在大括號外用“;”結(jié)束。等號左邊的unsigned char 是數(shù)據(jù)元素的數(shù)據(jù)類型,這里定義為無符號字符型,也就是元素的值范圍只能是0-255之間。Code表示把這個數(shù)組定義為編碼,這樣定義的好處是其元素轉(zhuǎn)化成二進文件后可能直接存儲到程序存儲器中,當然這里也可以不加code,但是這樣編譯后會將其直接存儲到數(shù)據(jù)存儲器中,要知道單片機中數(shù)據(jù)存儲器的容量是非常有限的,定義為code后可節(jié)約單片機數(shù)據(jù)存儲器的空間。
調(diào)用程序的方法如下,
P0=table[1];
這里表示將數(shù)組中的第2個元素(注意第一個是table[0])0xf9賦給P1口,
即P0=0xf9;也就是此時位被選通的數(shù)碼管會顯示數(shù)字2.
下面利用編碼的方法讓6個數(shù)碼管以間隔1秒的時間循環(huán)顯示0-f。相應程序如例1.
例1:6個數(shù)碼管循環(huán)顯示0-f
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
uchar num;
unsigned char code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e };
void delay(uint);
 
void main()
{
       wei=1;
       P0=0xfe;
       wei=0;
 
       for(num=0;num<16;num++)
       {
              duan=1;
              P0=table[num];
              delay(150);
              duan=0;
       }
}
 
void delay(uint z)
{
       uint x,y;
       for(x=z;x>0;x--)
              for(y=500;y>0;y--);
}
下載到實驗板后實驗現(xiàn)象如圖3所示。
 
 
圖3  6個數(shù)碼管依次從0-f變化
 
2、數(shù)碼管的動態(tài)顯示
明白了數(shù)組編碼后,現(xiàn)在我們正式介紹數(shù)碼管的動態(tài)顯示,為了更利于大家理解,我們先用前面介紹過的靜態(tài)顯示法寫一個程序,功能為:讓6個數(shù)碼管間隔一秒依次顯示1、2、3、4、5、6。程序如例2.
例2          數(shù)碼管依次顯示1、2、3、4、5、6
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
uchar num;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint);
 
void main()
{
      
       while(1)
       {
              for(num=1;num<7;num++)
              {
                     if(num==1)
                     {
                            wei=1;
                            P0=0xfe;
                            wei=0;
                            duan=1;
                            P0=table[num];
                            delay(1000);
                            duan=0;
                     }
                     else if(num==2)
                     {
                            wei=1;
                            P0=0xfd;
                            wei=0;
                            duan=1;
                            P0=table[num];
                            delay(1000);
                            duan=0;
                     }
                     else if(num==3)
                     {
                            wei=1;
                            P0=0xfb;
                            wei=0;
                            duan=1;
                            P0=table[num];
                            delay(1000);
                            duan=0;
                     }
                     else if(num==4)
                     {
                            wei=1;
                            P0=0xf7;
                            wei=0;
                            duan=1;
                            P0=table[num];
                            delay(1000);
                            duan=0;
                     }
                     else if(num==5)
                     {
                            wei=1;
                            P0=0xef;
                            wei=0;
                            duan=1;
                            P0=table[num];
                            delay(1000);
                            duan=0;
                     }
                     else if(num==6)
                     {
                            wei=1;
                            P0=0xdf;
                            wei=0;
                            duan=1;
                            P0=table[num];
                            delay(1000);
                            duan=0;
                     }
              }
       }    
}
 
void delay(uint z)
{
       uint x,y;
       for(x=z;x>0;x--)
              for(y=110;y>0;y--);      
}
main函數(shù)內(nèi)的意思num從1開始,一直加到6,然后不斷的循環(huán) (程序為for(num=1;num<7;num++),當num=1時,先打開第一位數(shù)碼管,再讓第一位數(shù)碼管顯示1(程序P0=table[num],即P0=table[1]),然后進行1s的延時(程序為delay(1000);)。緊接著當num=2時,打開第二位數(shù)碼管,并讓其顯示2,延時1s……,一直到num=6時,打開第六位數(shù)碼管,并讓其顯示6,延時1s,再重復前的的程序。這個我們就可以在實驗板上看到數(shù)碼管從第一位開始依次以1s的時間間隔依次顯示123456.
下面的程序下載到實驗板現(xiàn)象如圖4所示。
圖4數(shù)碼管依次顯示123456
 
現(xiàn)在我們把延時程序縮短(注意上面是延時1s,依次100ms 10ms 1ms ….一直到10us,然后把每次改后的程序下載到實驗板,.當短到10us時,可看到如下現(xiàn)象:
 
也就是此時我們看到的現(xiàn)象是6個數(shù)碼管在同一時刻按位依次顯示123456,可能大家馬上要提出疑問了,在上面不是說過利用靜態(tài)的寫法不是實現(xiàn)不了這種效果嗎?這里就是數(shù)碼管的動態(tài)顯示。
所謂動態(tài)顯示,就是依次向每位位數(shù)碼管同時送出字形碼和相應的位選,位與位之間利用延時程序進行延時,當延時程序非常短時,由于發(fā)光管的余輝和人眼視覺暫留作用,此時我們的人眼就分辨不出位與位之間有延時存在,此時就感覺各位數(shù)碼管同時都在顯示,這樣我們實現(xiàn)在靜態(tài)不能實現(xiàn)的功能。
關閉窗口

相關文章

主站蜘蛛池模板: 国产一区二区高清在线 | 久久久久国产一区二区三区不卡 | 亚洲精品国产成人 | 韩日av片| 精品国产精品国产偷麻豆 | 国产第1页 | 成人美女免费网站视频 | 亚洲精品一区中文字幕乱码 | 人人人人爽 | 综合久久99 | a在线免费观看视频 | 成人婷婷 | 成人福利视频 | 国产一区二区电影 | 99热最新| 日韩电影一区二区三区 | 亚洲 精品 综合 精品 自拍 | 毛片区| 久久人人国产 | 久久av资源网 | 日韩欧美在线观看 | 天天干天天操天天爽 | 亚洲欧美日韩在线 | 国产一区二区高清在线 | 成人免费网站视频 | 久久国产精品一区二区三区 | 一级毛毛片| 国产精品久久久久久久久久久久久久 | 天天爽夜夜爽精品视频婷婷 | 成人亚洲| 日本久久一区二区三区 | 五月婷婷导航 | av黄色在线播放 | www国产成人 | 在线午夜| 搞黄网站在线观看 | 亚洲一区二区三区四区五区中文 | 国产激情一区二区三区 | 91精品久久久久久久久久 | av在线伊人 | 怡红院怡春院一级毛片 |