显示不同的数字是动态数码管的显示,动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。就像我们看的电影是有一帧一帧的画面显示的,当速度够快的时候我们看到它就是动态的。当我们显示数码管的速度够快的时候,也就可以看到它们是同时显示了。动态扫描显示是指轮流向各位数码管送出段选(字形码)和位选,由于人眼的视觉残留作用,使人的感觉好像各位数码管同时都在显示。
下面的例程可以参考一下:
/*********************************************************************************
*实验名 :数码管动态显示
*实验效果 :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);
}
}
|