在轮流显示0~7程序的基础上, 将delay()函数提供的时延大幅缩小, 以达到视觉短暂的停留效果. 在该种情况下的数码管亮度和对比度较轮流显示时有一定幅度的降低. 另外, 如果想感知到动态扫描的存在, 可从拍摄视频中观察(到像波浪一样的光浪).
#include <STC89C5xRC.H>
void delay()//提供时延
{
int i, j;
for(i = 0; i < 15 ; i++)
for(j = 0; j < 15; j++) ;
}
void f1_3_4_3()//在8个数码管上轮流显示0~7
{
unsigned char code DIG_CODE[8] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07};
int i;
while(1)
{
for(i = 0; i < 8; i++)
{
P2 = i << 2;
// i = 1 -> P2 = 0000 0001 ->(左移2位后) P2 = 0000 0100 -> (P24, P23, P22) = (0, 0, 1) -> 右数第二片亮
// i = 2 -> P2 = 0000 0010 ->(左移2位后) P2 = 0000 1000 -> (P24, P23, P22) = (0, 1, 0) -> 右数第三片亮
// i = 3 -> P2 = 0000 0011 ->(左移2位后) P2 = 0000 1100 -> (P24, P23, P22) = (0, 1, 1) -> 右数第四片亮
// ......
// i = 7 -> P2 = 0000 0111 ->(左移2位后) P2 = 0001 1100 -> (P24, P23, P22) = (1, 1, 1) -> 右数第八片亮
P0 = DIG_CODE[i];
delay();
}
}
}
int main()
{
f1_3_4_3();
return 0;
}