顯示不同的數字是動態數碼管的顯示,動態顯示是多個數碼管,交替顯示,利用人的視覺暫停作用使人看到多個數碼管同時顯示的效果。就像我們看的電影是有一幀一幀的畫面顯示的,當速度夠快的時候我們看到它就是動態的。當我們顯示數碼管的速度夠快的時候,也就可以看到它們是同時顯示了。動態掃描顯示是指輪流向各位數碼管送出段選(字形碼)和位選,由于人眼的視覺殘留作用,使人的感覺好像各位數碼管同時都在顯示。
下面的例程可以參考一下:
/*********************************************************************************
*實驗名 :數碼管動態顯示
*實驗效果 :8位數碼管顯示數字12345678
*注意 : 每位數碼管顯示之間延遲時間小于3ms可看見8位數碼管同時點亮
*
*********************************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DU=P2^6;
sbit WE=P2^7;
uchar code sz[17]={0x3f , 0x06 , 0x5b ,0x4f , 0x66 , 0x6d ,0x7d ,
0x07 , 0x7f , 0x6f ,0x77 , 0x7c , 0x39 ,
0x5e , 0x79 , 0x71 , 0x00}; //0-9&A-F&“不顯示” 字型碼
void delay(uint xms) //xms等于幾就延遲幾毫秒
{
uint i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void main()
{
while(1)
{
P0=sz[8]; //數字8
DU=1;
DU=0;
P0=0x7f;
WE=1;
WE=0;
delay(2); //延遲小于3ms人眼則看到8位數碼管同時點亮
P0=sz[7]; //數字7
DU=1;
DU=0;
P0=0xbf;
WE=1;
WE=0;
delay(2);
P0=sz[6]; //數字6
DU=1;
DU=0;
P0=0xdf;
WE=1;
WE=0;
delay(2);
P0=sz[5]; //數字5
DU=1;
DU=0;
P0=0xef;
WE=1;
WE=0;
delay(2);
P0=sz[4]; //數字4
DU=1;
DU=0;
P0=0xf7;
WE=1;
WE=0;
delay(2);
P0=sz[3]; //數字3
DU=1;
DU=0;
P0=0xfb;
WE=1;
WE=0;
delay(2);
P0=sz[2]; //數字2
DU=1;
DU=0;
P0=0xfd;
WE=1;
WE=0;
delay(2);
P0=sz[1]; //數字1
DU=1;
DU=0;
P0=0xfe;
WE=1;
WE=0;
delay(2);
}
}
|