03_单片机_动态数码管

1. 如下是4 Digt数码管,外观和内部线路图,详情参考零件表:https://www.mouser.cn/ProductDetail/Lite-On/LTC-5723HR?qs=WxFF5lh7QM2ytJdX1EhJKQ%3D%3D

2. 如下是单片机连接方式(J1:Pin1~Pin8 对应 P1:0~7; J6:Pin1~Pin8 对应 P0:7~0)

2.1. 参考1种的线图,J6的Pin置于High(高电平),且J1的Pin置于Low(低电平),数码管中的segment才会点亮


2.2. 数码管显示0~F,根据上述创建数组

1 unsigned char dat[16] = {0x3f, 0x06, 0x5b, 0x4f,
2                0x66, 0x6d, 0x7d, 0x27,
3                0x7f, 0x6f, 0x77, 0x7c,
4                0x39, 0x5e, 0x79, 0x71};

2.3. 8个数码管选择数组

1 unsigned char segment[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};

3. 74HC245 工作原理

单片机等微控制器的引脚拉电流能力一般在20mA左右,想要直接点亮数码管、显示屏等大功率显示器件则明显不够,这时,我们用一颗74 HC245芯片来增加单片机引脚的驱动能力

 根据线路图,DIR接Vcc,/OE接GND,表示 ”A data to B data“


4. 编写代码,使数码管显示 ”1~8“

4.1. 原始方法

 1 #include <REG51.H>
 2 
 3 
 4 // 延时函数
 5 void delay(void)
 6 {
 7     unsigned char i, j, k;
 8     for(i=10; i>0; i--)
 9         for(j=10; j>0; j--);
10 }
11 
12 unsigned char dat[16] = {0x3f, 0x06, 0x5b, 0x4f,
13                                                  0x66, 0x6d, 0x7d, 0x27,
14                                                  0x7f, 0x6f, 0x77, 0x7c,
15                                                  0x39, 0x5e, 0x79, 0x71};
16 
17 unsigned char segment[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
18 
19 void main(void)
20 {
21     while(1)
22     {
23         
24         P0 = dat[1];
25         P1 = segment[0];
26         delay();
27         
28         P0 = dat[2];
29         P1 = segment[1];
30         delay();
31         
32         P0 = dat[3];
33         P1 = segment[2];
34         delay();
35         
36         P0 = dat[4];
37         P1 = segment[3];
38         delay();
39         
40         P0 = dat[5];
41         P1 = segment[4];
42         delay();
43         
44         P0 = dat[6];
45         P1 = segment[5];
46         delay();
47         
48         P0 = dat[7];
49         P1 = segment[6];
50         delay();
51         
52         P0 = dat[8];
53         P1 = segment[7];
54         delay();
55     }
56 }
View Code

4.2. 循环结构

 1 #include <REG51.H>
 2 
 3 
 4 // 延时函数
 5 void delay(void)
 6 {
 7     unsigned char i, j;
 8     for(i=10; i>0; i--)
 9         for(j=10; j>0; j--);
10 }
11 
12 unsigned char dat[16] = {0x3f, 0x06, 0x5b, 0x4f,
13                                                  0x66, 0x6d, 0x7d, 0x27,
14                                                  0x7f, 0x6f, 0x77, 0x7c,
15                                                  0x39, 0x5e, 0x79, 0x71};
16 
17 unsigned char segment[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
18 
19 void main(void)
20 {
21     unsigned char i;
22     
23     while(1)
24     {
25         for(i=0; i<8; i++)
26         {
27             P0 = dat[i+1];
28             P1 = segment[i];
29             delay();
30         }
31     }
32 }
View Code

 

posted on 2023-04-02 14:05  Ivan2023  阅读(63)  评论(0)    收藏  举报