×
单片机 > 单片机程序设计 > 详情

单片机内外部资源操作篇之数码管动态显示

发布时间:2020-05-30 发布时间:
|

    假定你已经会了数码管的静态显示,在静态显示的学习中,我们知道,六位数码管同一时刻只能显示同一符号。但我们在日常生活中

    经常看到几个数码管同时能显示不同数字,例如时钟等。这就是接下来要讨论的话题——数码管动态显示。

    先来看一个例子:

 1 #include

 2 #define uint unsigned int

 3 #define uchar unsigned char

 4 uchar code table[] = {

 5 0x3f,0x06,0x5b,0x4f,

 6 0x66,0x6d,0x7d,0x07,

 7 0x7f,0x6f,0x77,0x7c,

 8 0x39,0x5e,0x79,0x71};

 9 sbit WELA = P2^7;

10 sbit DULA = P2^6;

11 void delay(uint);

12 

13 void main()

14 {

15     while(1)

16     {

17         WELA = 1;           //让第一位数码管显示1

18         P0 = 0xfe;

19         WELA = 0;

20            P0 = 0xff;          //消影

21         DULA = 1;

22         P0 = table[1];

23         DULA = 0;

24         delay(500);

25 

26         WELA = 1;           //让第二位数码管显示2

27         P0 = 0xfd;

28         WELA = 0;

29         P0 = 0xff;

30         DULA = 1;

31         P0 = table[2];

32         DULA = 0;

33         delay(500);

34 

35         WELA = 1;           //让第三位数码管显示3

36         P0 = 0xfb;

37         WELA = 0;

38         P0 = 0xff;

39         DULA = 1;

40         P0 = table[3];

41         DULA = 0;

42         delay(500);

43 

44         WELA = 1;           //让第四位数码管显示4

45         P0 = 0xf7;

46         WELA = 0;

47            P0 = 0xff; 

48         DULA = 1;

49         P0 = table[4];

50         DULA = 0;

51         delay(500);

52 

53         WELA = 1;           //让第五位数码管显示5

54         P0 = 0xef;

55         WELA = 0;

56         P0 = 0xff;

57         DULA = 1;

58         P0 = table[5];

59         DULA = 0;

60         delay(500);

61 

62         WELA = 1;           //让第六位数码管显示6

63         P0 = 0xdf;

64         WELA = 0;

65            P0 = 0xff;

66         DULA = 1;

67         P0 = table[6];

68         DULA = 0;

69         delay(500);

70     }

71 }

72 

73 void delay(uint ms)          //延时函数

74 {

75     uint i;

76     for(; ms > 0; ms --)

77     {

78         for(i = 114; i > 0; i --)

79         {

80         }

81     }

82 }

 这段代码不难理解,在while()循环中,首先让第一个数码管显示1,延时500ms,然后让第二位数码管显示2,延时500ms秒,....依次循环下去。

    将这段代码编译后下载到实验板上观察,看到预期的现象。

    下面将每个数码管点亮后的延时缩短为100ms,即delay(100);,编译下载,可以看见数码管变换显示的速度快多了。

    再缩短到10ms,编译下载,此时已经隐约看见6个数码管上同时显示着数字123456字样,但是有些闪烁。

    继续缩短到1ms,编译下载,这时6个数码管上便清晰地显示着123456字样。

    我想大家应该理解了动态显示的概念和原理了,所谓的动态显示,就是轮流向各位数码管送入字型码,只是时间非常快,让人眼感觉不到它是

    一位一位轮流显示的。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容