02_单片机_静态数码管

今天学习了静态数码管,数码管接线图(共阳式接法),单片机I/O端口Port0 连接 J8

P0.0 连接 J8.8;P0.1 连接 J8.7;P0.2 连接 J8.6;P0.3 连接 J8.5;P0.4 连接 J8.4;P0.5 连接 J8.3;P0.6 连接 J8.2;P0.7 连接 J8.1;


1. 需要数码管显示0~F,确定对应段码的关系。如下图,是数码管对应的段码


 2. 需要数码管显示0~F


 3. 循环显示”0~F“

3.1. 原始方法实现:

 1 #include <REG51.H>
 2 
 3 /**********************************************
 4 * 数码管显示0~F 对应的段码
 5 * 0: 0xc0; 1: 0xf9; 2: 0xa4; 3: 0xb0; 4: 0x99
 6 * 5: 0x92; 6: 0x82; 7: 0xd8; 8: 0x80; 9: 0x90
 7 * A: 0x88; b: 0x83; C: 0xc6; d: 0xa1; E: 0x86
 8 * F: 0x8e
 9 **********************************************/
10 
11 // 延时函数
12 void delay(void)
13 {
14     unsigned char i, j, k;
15     for(i=50; i>0; i--)
16         for(j=50; j>0; j--)
17             for(k=30; k>0; k--);
18 }
19 
20 void main(void)
21 {
22     P0 = 0xc0;    // 0
23     delay();
24     P0 = 0xf9;    // 1
25     delay();
26     P0 = 0xa4;    // 2
27     delay();
28     P0 = 0xb0;    // 3
29     delay();
30     P0 = 0x99;    // 4
31     delay();
32     P0 = 0x92;    // 5
33     delay();
34     P0 = 0x82;    // 6
35     delay();
36     P0 = 0xd8;    // 7
37     delay();
38     P0 = 0x80;    // 8
39     delay();
40     P0 = 0x90;    // 9
41     delay();
42     P0 = 0x88;    // A
43     delay();
44     P0 = 0x83;    // b
45     delay();
46     P0 = 0xc6;    // C
47     delay();
48     P0 = 0xa1;    // d
49     delay();
50     P0 = 0x86;    // E
51     delay();
52     P0 = 0x8e;    // F
53     delay();
54 }
View Code

3.2. 使用数组 & 循环结构

 1 #include <REG51.H>
 2 
 3 /**********************************************
 4 * 数码管显示0~F 对应的段码
 5 * 0: 0xc0; 1: 0xf9; 2: 0xa4; 3: 0xb0; 4: 0x99
 6 * 5: 0x92; 6: 0x82; 7: 0xd8; 8: 0x80; 9: 0x90
 7 * A: 0x88; b: 0x83; C: 0xc6; d: 0xa1; E: 0x86
 8 * F: 0x8e
 9 **********************************************/
10 
11 // 延时函数
12 void delay(void)
13 {
14     unsigned char i, j, k;
15     for(i=50; i>0; i--)
16         for(j=50; j>0; j--)
17             for(k=30; k>0; k--);
18 }
19 
20 void main(void)
21 {
22     unsigned char i;
23     // 数组表示数码管状态
24     unsigned char dat[16] = { 0xc0, 0xf9, 0xa4, 0xb0,
25                                                         0x99, 0x92, 0x82, 0xd8,
26                                                         0x80, 0x90, 0x88, 0x83,
27                                                         0xc6, 0xa1, 0x86, 0x8e };
28     while(1)
29     {
30         for(i=0; i<16; i++)
31         {
32             P0 = dat[i];
33             delay();
34         }
35     }
36 }
View Code

4. 0~F,循环显示偶数

 1 #include <REG51.H>
 2 
 3 /**********************************************
 4 * 数码管显示0~F 对应的段码
 5 * 0: 0xc0; 1: 0xf9; 2: 0xa4; 3: 0xb0; 4: 0x99
 6 * 5: 0x92; 6: 0x82; 7: 0xd8; 8: 0x80; 9: 0x90
 7 * A: 0x88; b: 0x83; C: 0xc6; d: 0xa1; E: 0x86
 8 * F: 0x8e
 9 **********************************************/
10 
11 // 延时函数
12 void delay(void)
13 {
14     unsigned char i, j, k;
15     for(i=50; i>0; i--)
16         for(j=50; j>0; j--)
17             for(k=30; k>0; k--);
18 }
19 
20 void main(void)
21 {
22     unsigned char i;
23     // 数组表示数码管状态
24     unsigned char dat[16] = { 0xc0, 0xf9, 0xa4, 0xb0,
25                                                         0x99, 0x92, 0x82, 0xd8,
26                                                         0x80, 0x90, 0x88, 0x83,
27                                                         0xc6, 0xa1, 0x86, 0x8e };
28     while(1)
29     {
30         for(i=0; i<16; i++)
31         {
32             if(i%2 == 0)
33             {
34                 P0 = dat[i];
35                 delay();
36             }
37         }
38     }
39 }
View Code

暂时先学到这儿,若有不对的地方,请指正,谢谢~


 

posted on 2023-03-30 20:48  Ivan2023  阅读(96)  评论(0)    收藏  举报