亚博智能论坛  
  
查看: 504|回复: 2

这程序什么意思,求助高手。

[复制链接]

该用户从未签到

1

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2018-1-13 12:46:20 | 显示全部楼层 |阅读模式
请教一下哪位高手解析以下四位数码管显示的程序中,第16~18行,还有第40行代码是什么意思?



1. //设置阴极接口
2. int a = 1;
3. int b = 2;
4. int c = 3;
5. int d = 4;
6. int e = 5;
7. int f = 6;
8. int g = 7;
9. int p = 8;
10.       //设置阳极接口
11.       int d4 = 9;
12.       int d3 = 10;
13.       int d2 = 11;
14.       int d1 = 12;
15.       //设置变量
16.       long n = 0;
17.       int x = 100;
18.       int del = 55;  //此处数值对时钟进行微调
19.      
20.       void setup()
21.       {
22.         pinMode(d1, OUTPUT);
23.         pinMode(d2, OUTPUT);
24.         pinMode(d3, OUTPUT);
25.         pinMode(d4, OUTPUT);
26.         pinMode(a, OUTPUT);
27.         pinMode(b, OUTPUT);
28.         pinMode(c, OUTPUT);
29.         pinMode(d, OUTPUT);
30.         pinMode(e, OUTPUT);
31.         pinMode(f, OUTPUT);
32.         pinMode(g, OUTPUT);
33.         pinMode(p, OUTPUT);
34.       }
35.        
36.       void loop()
37.       {
38.         clearLEDs();
39.         pickDigit(1);
40.         pickNumber((n/x/1000)%10);
41.         delayMicroseconds(del);
42.        
43.         clearLEDs();
44.         pickDigit(2);
45.         pickNumber((n/x/100)%10);
46.         delayMicroseconds(del);
47.        
48.         clearLEDs();
49.         pickDigit(3);
50.         dispDec(3);
51.         pickNumber((n/x/10)%10);
52.         delayMicroseconds(del);
53.        
54.         clearLEDs();
55.         pickDigit(4);
56.         pickNumber(n/x%10);
57.         delayMicroseconds(del);
58.        
59.         n++;
60.        
61.         if (digitalRead(13) == HIGH)
62.         {
63.           n = 0;
64.         }
65.       }
66.        
67.       void pickDigit(int x)  //定义pickDigit(x),其作用是开启dx端口
68.       {
69.         digitalWrite(d1, LOW);
70.         digitalWrite(d2, LOW);
71.         digitalWrite(d3, LOW);
72.         digitalWrite(d4, LOW);
73.        
74.         switch(x)
75.         {
76.         case 1:
77.           digitalWrite(d1, HIGH);
78.           break;
79.         case 2:
80.           digitalWrite(d2, HIGH);
81.           break;
82.         case 3:
83.           digitalWrite(d3, HIGH);
84.           break;
85.         default:
86.           digitalWrite(d4, HIGH);
87.           break;
88.         }
89.       }
90.        
91.       void pickNumber(int x)   //定义pickNumber(x),其作用是显示数字x
92.       {
93.         switch(x)
94.         {
95.         default:
96.           zero();
97.           break;
98.         case 1:
99.           one();
100.          break;
101.        case 2:
102.          two();
103.          break;
104.        case 3:
105.          three();
106.          break;
107.        case 4:
108.          four();
109.          break;
110.        case 5:
111.          five();
112.          break;
113.        case 6:
114.          six();
115.          break;
116.        case 7:
117.          seven();
118.          break;
119.        case 8:
120.          eight();
121.          break;
122.        case 9:
123.          nine();
124.          break;
125.        }
126.      }
127.      
128.      void dispDec(int x)  //设定开启小数点
129.      {
130.        digitalWrite(p, LOW);
131.      }
132.      
133.      void clearLEDs()  //清屏
134.      {
135.        digitalWrite(a, HIGH);
136.        digitalWrite(b, HIGH);
137.        digitalWrite(c, HIGH);
138.        digitalWrite(d, HIGH);
139.        digitalWrite(e, HIGH);
140.        digitalWrite(f, HIGH);
141.        digitalWrite(g, HIGH);
142.        digitalWrite(p, HIGH);
143.      }
144.      
145.      void zero()  //定义数字0时阴极那些管脚开关
146.      {
147.        digitalWrite(a, LOW);
148.        digitalWrite(b, LOW);
149.        digitalWrite(c, LOW);
150.        digitalWrite(d, LOW);
151.        digitalWrite(e, LOW);
152.        digitalWrite(f, LOW);
153.        digitalWrite(g, HIGH);
154.      }
155.      
156.      void one()  //定义数字1时阴极那些管脚开关
157.      {
158.        digitalWrite(a, HIGH);
159.        digitalWrite(b, LOW);
160.        digitalWrite(c, LOW);
161.        digitalWrite(d, HIGH);
162.        digitalWrite(e, HIGH);
163.        digitalWrite(f, HIGH);
164.        digitalWrite(g, HIGH);
165.      }
166.      
167.      void two()  //定义数字2时阴极那些管脚开关
168.      {
169.        digitalWrite(a, LOW);
170.        digitalWrite(b, LOW);
171.        digitalWrite(c, HIGH);
172.        digitalWrite(d, LOW);
173.        digitalWrite(e, LOW);
174.        digitalWrite(f, HIGH);
175.        digitalWrite(g, LOW);
176.      }
177.      
178.      void three()  //定义数字3时阴极那些管脚开关
179.      {
180.        digitalWrite(a, LOW);
181.        digitalWrite(b, LOW);
182.        digitalWrite(c, LOW);
183.        digitalWrite(d, LOW);
184.        digitalWrite(e, HIGH);
185.        digitalWrite(f, HIGH);
186.        digitalWrite(g, LOW);
187.      }
188.      


回复

使用道具 举报

  • TA的每日心情
    萌哒
    2018-5-17 16:00
  • 176

    主题

    275

    帖子

    1101

    积分

    超级版主

    Rank: 9Rank: 9Rank: 9

    积分
    1101
    发表于 2018-3-26 09:35:38 | 显示全部楼层
    坐等大神解答...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    3

    积分

    新手上路

    Rank: 1

    积分
    3
    发表于 2018-5-30 00:56:54 | 显示全部楼层
    18行就是定义几个变量啊,还能有什么意思?
    40行看代码是在频繁清除显示又重新显示,间隔时间都是微秒级的,所以除以x也就是10,好使数字变化没那么快,再除以1000就将个位、十位、百位数字全去掉了,再模上10,就得到千位上的数字了,好用于显示。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表