01./**
02. ******************************************************************************
03. * @file GPIO/IOToggle/main.c
04. * @author MCD Application Team
05. * @version V3.5.0
06. * @date 08-April-2011
07. * @brief Main program body.
08. ******************************************************************************
09. * @attention
10. *
11. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
12. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
13. * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
14. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
15. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
16. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
17. *
18. *
19.
20. ? COPYRIGHT 2011 STMicroelectronics
21.
22.******************************************************************************
23. */
24.
25./* Includes ------------------------------------------------------------------*/
26.#include "stm32f10x.h"
27.#include "stm32_eval.h"
28.uint16_t Dis_tab[]={GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8,//0
29. GPIO_Pin_9|GPIO_Pin_12,//1
30. GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_5,//2
31. GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_5,//3
32. GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_5,//4
33. GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_8|GPIO_Pin_5,//5
34. GPIO_Pin_7|GPIO_Pin_12|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_8|GPIO_Pin_5,//6
35. GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12,//7
36. GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14,//8
37. GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14//9
38. };
39.GPIO_InitTypeDef GPIO_InitStructure;
40.
41.void RCC_Configuration(void)
42.{
43. RCC_DeInit();
44. RCC_HSICmd(ENABLE);
45. while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
46. RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
47.
48. RCC_HSEConfig(RCC_HSE_OFF);
49. RCC_LSEConfig(RCC_LSE_OFF);
50. RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_9); // 72HMz
51. RCC_PLLCmd(ENABLE);
52. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
53. RCC_ADCCLKConfig(RCC_PCLK2_Div4);
54. RCC_PCLK2Config(RCC_HCLK_Div1);
55. RCC_PCLK1Config(RCC_HCLK_Div2);
56. RCC_HCLKConfig(RCC_SYSCLK_Div1);
57. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
58. while(RCC_GetSYSCLKSource() != 0x08);
59. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);
60. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//disable JTAG
61. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
62. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
63. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
64. GPIO_Init(GPIOD, &GPIO_InitStructure);
65. GPIO_ResetBits(GPIOD,GPIO_Pin_2);
66.}
67.
68.void GPIO_INIT()
69.{
70. //GPIOB(数码管)初始化
71. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
72. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
73. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
74. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
75. GPIO_Init(GPIOB, &GPIO_InitStructure);
76.
77. //按键初始化
78. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
79. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
80. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
81. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
82. GPIO_Init(GPIOC, &GPIO_InitStructure);
83.}
84.//微秒延时
85.void delay_us(u32 n)
86.{
87. u8 j;
88. while(n--)
89. for(j=0;j<10;j++);
90.}
91.//毫秒延时
92.void delay_ms(u32 n)
93.{
94. while(n--)
95. delay_us(1000);
96.}
97.
98.
99./**
100. * @brief Main program.
101. * @param None
102. * @retval None
103. */
104.
105.int main(void)
106.{
107. int i,j;
108. RCC_Configuration();
109. GPIO_INIT();
110. GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);//关闭数码管
111. while(1){
112. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10))//S3键按下
113. {delay_ms(80);
114. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)){j++;}}//延时后S3处于按下状态,j++
115. if(j%2==0){ //如果i是偶数
116. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9))//S2键按下
117. {delay_ms(80);
118. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)){i++;}
119. }}//延时后S2处于按下状态,j++
120. else{//如果i是奇数
121. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))//S1键按下
122. {delay_ms(80);
123. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)){i++;}}
124. }//延时后S1处于按下状态,j++
125. if(i>30){i=0;}
126. GPIO_ResetBits(GPIOB,GPIO_Pin_1);
127. GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);
128. switch(i){
129. case 0 :
130. GPIO_SetBits(GPIOB,GPIO_Pin_1);
131. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
132. break;
133. case 1 :
134. GPIO_SetBits(GPIOB,GPIO_Pin_1);
135. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
136. break;
137. case 2 :
138. GPIO_SetBits(GPIOB,GPIO_Pin_1);
139. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
140. break;
141. case 3 :
142. GPIO_SetBits(GPIOB,GPIO_Pin_1);
143. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
144. break;
145. case 4 :
146. GPIO_SetBits(GPIOB,GPIO_Pin_1);
147. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
148. break;
149. case 5 :
150. GPIO_SetBits(GPIOB,GPIO_Pin_1);
151. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
152. break;
153. case 6 :
154. GPIO_SetBits(GPIOB,GPIO_Pin_1);
155. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
156. break;
157. case 7 :
158. GPIO_SetBits(GPIOB,GPIO_Pin_1);
159. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
160. break;
161. case 8 :
162. GPIO_SetBits(GPIOB,GPIO_Pin_1);
163. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
164. break;
165. case 9 :
166. GPIO_SetBits(GPIOB,GPIO_Pin_1);
167. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
168. break;
169. case 10 :
170. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
171. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
172. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
173. delay_ms(10);
174. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
175. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
176. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
177. delay_ms(10);
178. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);
179. delay_ms(10);
180.
181. break;
182. case 11 :
183. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
184. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
185. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
186. delay_ms(10);
187. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
188. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
189. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
190. delay_ms(10);
191. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);
192. delay_ms(10);
193. break;
194. case 12 :
195. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
196. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
197. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
198. delay_ms(10);
199. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
200. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
201. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
202. delay_ms(10);
203. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);
204. delay_ms(10);
205. break;
206.
207. case 13:
208. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
209. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
210. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
211. delay_ms(10);
212. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
213. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
214. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
215. delay_ms(10);
216. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);
217. delay_ms(10);
218. break;
219.
220.
221. case 14:
222. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
223. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
224. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
225. delay_ms(10);
226. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
227. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
228. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
229. delay_ms(10);
230. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);
231. delay_ms(10);
232. break;
233. case 15:
234. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
235. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
236. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
237. delay_ms(10);
238. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
239. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
240. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
241. delay_ms(10);
242. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);
243. delay_ms(10);
244. break;
245. case 16:
246. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
247. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
248. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
249. delay_ms(10);
250. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
251. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
252. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
253. delay_ms(10);
254. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);
255. delay_ms(10);
256. break;
257. case 17:
258. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
259. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
260. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
261. delay_ms(10);
262. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
263. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
264. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
265. delay_ms(10);
266. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);
267. delay_ms(10);
268. break;
269. case 18:
270. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
271. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
272. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
273. delay_ms(10);
274. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
275. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
276. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
277. delay_ms(10);
278. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);
279. delay_ms(10);
280. break; case 19:
281. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
282. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
283. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
284. delay_ms(10);
285. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
286. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
287. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
288. delay_ms(10);
289. GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);
290. delay_ms(10);
291. break;
292. case 20:
293. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
294. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
295. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
296. delay_ms(10);
297. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
298. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
299. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
300. delay_ms(10);
301. GPIO_ResetBits(GPIOB,Dis_tab[i/10]);
302. delay_ms(10);
303. break;
304. case 21:
305. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
306. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
307. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
308. delay_ms(10);
309. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
310. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
311. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
312. delay_ms(10);
313. GPIO_ResetBits(GPIOB,Dis_tab[i/10]);
314. delay_ms(10);
315. break;
316. case 22:
317. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
318. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
319. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
320. delay_ms(10);
321. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
322. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
323. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
324. delay_ms(10);
325. GPIO_ResetBits(GPIOB,Dis_tab[i/10]);
326. delay_ms(10);
327. break;
328. case 23:
329. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
330. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
331. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
332. delay_ms(10);
333. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
334. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
335. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
336. delay_ms(10);
337. GPIO_ResetBits(GPIOB,Dis_tab[i/10]);
338. delay_ms(10);
339. break;
340. case 24:
341. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
342. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
343. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
344. delay_ms(10);
345. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
346. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
347. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
348. delay_ms(10);
349. GPIO_ResetBits(GPIOB,Dis_tab[i/10]);
350. delay_ms(10);
351. break;
352.
353. case 25:
354. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
355. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
356. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
357. delay_ms(10);
358. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
359. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
360. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
361. delay_ms(10);
362. GPIO_ResetBits(GPIOB,Dis_tab[i/10]);
363. delay_ms(10);
364. break;
365.
366. case 26:
367. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
368. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
369. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
370. delay_ms(10);
371. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
372. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
373. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
374. delay_ms(10);
375. GPIO_ResetBits(GPIOB,Dis_tab[i/10]);
376. delay_ms(10);
377. break;
378. case 27:
379. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
380. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
381. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
382. delay_ms(10);
383. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
384. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
385. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
386. delay_ms(10);
387. GPIO_ResetBits(GPIOB,Dis_tab[i/10]);
388. delay_ms(10);
389. break;
390. case 28:
391. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
392. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
393. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
394. delay_ms(10);
395. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
396. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
397. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
398. delay_ms(10);
399. GPIO_ResetBits(GPIOB,Dis_tab[i/10]);
400. delay_ms(10);
401. break;
402. case 29:
403. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
404. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
405. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
406. delay_ms(10);
407. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
408. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
409. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
410. delay_ms(10);
411. GPIO_ResetBits(GPIOB,Dis_tab[i/10]);
412. delay_ms(10);
413. break;
414. case 30:
415. GPIO_ResetBits(GPIOB,GPIO_Pin_15);//PB15 off
416. GPIO_SetBits(GPIOB,GPIO_Pin_1);//PB1 on
417. GPIO_ResetBits(GPIOB,Dis_tab[i%10]);
418. delay_ms(10);
419. GPIO_SetBits(GPIOB,Dis_tab[i%10]); //off
420. GPIO_ResetBits(GPIOB,GPIO_Pin_1);//PB1 off
421. GPIO_SetBits(GPIOB,GPIO_Pin_15);//PB15 on
422. delay_ms(10);
423. GPIO_ResetBits(GPIOB,Dis_tab[i/10]);
424. delay_ms(10);
425. break;
426. }
427.
428. }
429.}
参考某位仁兄滴