第7课 数码管动态显示
调用程序的方法如下,
P0=table[1];
这里表示将数组中的第2个元素(注意第一个是table[0])0xf9赋给P1口,
即P0=0xf9;也就是此时位被选通的数码管会显示数字2.
下面利用编码的方法让6个数码管以间隔1秒的时间循环显示0-f。相应程序如例1.
例1:6个数码管循环显示0-f
#include
#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--);
}
下载到实验板后实验现象如图3所示。

图3 6个数码管依次从0-f变化
2、数码管的动态显示
明白了数组编码后,现在我们正式介绍数码管的动态显示,为了更利于大家理解,我们先用前面介绍过的静态显示法写一个程序,功能为:让6个数码管间隔一秒依次显示1、2、3、4、5、6。程序如例2.
例2数码管依次显示1、2、3、4、5、6
#include
#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;
}
}
}
评论