能不能简化点代码
时间: 2024-02-25 22:54:30 浏览: 46
当然可以,下面是一个简化后的代码实现:
```c
#include "wave6000.h"
// 发光管显示数字的编码数组
const uint8_t DIGIT_CODE[] = {
0b00111111, // 数字0
0b00000110, // 数字1
0b01011011, // 数字2
0b01001111, // 数字3
0b01100110, // 数字4
0b01101101, // 数字5
0b01111101, // 数字6
0b00000111, // 数字7
0b01111111, // 数字8
0b01101111 // 数字9
};
int main(void) {
// 初始化GPIO
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pin = GPIO_PIN_All;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_Init(GPIOB, &GPIO_InitStruct);
// 显示学号后2位
uint16_t student_id = 20210001; // 假设学号为20210001
uint8_t last_two_digits = student_id % 100; // 取出学号后2位
uint8_t digit1 = last_two_digits / 10; // 取出十位数字
uint8_t digit2 = last_two_digits % 10; // 取出个位数字
GPIO_Write(GPIOA, DIGIT_CODE[digit2] << 8 | DIGIT_CODE[digit1]); // 先显示个位数字,再显示十位数字
// 点亮所有发光管
GPIO_Write(GPIOB, 0xFF);
while (1) {
// do nothing
}
}
```
这个代码实现和之前的实现有几个区别:
1. GPIO_InitStruct.Pin设置为GPIO_PIN_All,即所有的引脚都设置为输出模式。
2. 在GPIO_Write函数中,使用了位运算符<<和|来同时显示个位数字和十位数字。
3. GPIO_InitStruct变量的初始化采用了C99标准的结构体初始化语法。
这些简化都是为了让代码更加简洁易懂。
阅读全文