使用wave6000写一段代码:开机显示学号后2位,并点亮8个发光二极管
时间: 2024-02-24 15:54:53 浏览: 21
下面是一个基于Keil MDK-ARM的Wave6000代码示例,实现开机显示学号后2位,并点亮8个发光二极管:
```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;
// PB0~PB7用于驱动发光管,设置为输出模式
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
GPIO_Init(GPIOB, &GPIO_InitStruct);
// PA0~PA7用于连接数码管,设置为输出模式
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
GPIO_Init(GPIOA, &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; // 取出个位数字
uint8_t code1 = DIGIT_CODE[digit1];
uint8_t code2 = DIGIT_CODE[digit2];
GPIO_Write(GPIOA, code2 << 8 | code1); // 先显示个位数字,再显示十位数字
// 点亮所有发光管
GPIO_Write(GPIOB, 0xFF);
while (1) {
// do nothing
}
}
```
以上代码中,首先使用GPIO初始化函数初始化了PB0~PB7和PA0~PA7,其中PB0~PB7用于驱动发光管,PA0~PA7用于连接数码管。然后,根据学号取出学号后2位,将十位数字和个位数字对应的编码存储在code1和code2变量中,最后通过GPIO_Write函数先显示个位数字,再显示十位数字。同时,通过GPIO_Write函数点亮所有发光管。在主循环中,什么也不做,保持程序一直运行。