编写 4 位数码管显示驱动程序,要求较为方便的给数码管对应的位的显存赋值。
时间: 2023-06-18 09:08:52 浏览: 82
下面提供一个基于STM32的4位数码管显示驱动程序,可以方便地给数码管对应的位的显存赋值:
```c
#include "stm32f10x.h"
//定义数码管位选引脚
#define DIGIT1 GPIO_Pin_6
#define DIGIT2 GPIO_Pin_7
#define DIGIT3 GPIO_Pin_8
#define DIGIT4 GPIO_Pin_9
//定义数码管段选引脚
#define SEGMENT_A GPIO_Pin_0
#define SEGMENT_B GPIO_Pin_1
#define SEGMENT_C GPIO_Pin_2
#define SEGMENT_D GPIO_Pin_3
#define SEGMENT_E GPIO_Pin_4
#define SEGMENT_F GPIO_Pin_5
#define SEGMENT_G GPIO_Pin_6
#define SEGMENT_DP GPIO_Pin_7
//定义数码管显示字符
const uint8_t DIGITS[16] = {
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
//定义显存数组
uint8_t display_buffer[4];
//数码管显示函数
void display(uint8_t *buffer) {
//设置位选引脚
GPIO_ResetBits(GPIOB, DIGIT1 | DIGIT2 | DIGIT3 | DIGIT4);
//设置段选引脚
GPIO_SetBits(GPIOA, SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_E | SEGMENT_F | SEGMENT_G | SEGMENT_DP);
//显示第一个数码管
GPIO_SetBits(GPIOB, DIGIT1);
GPIO_ResetBits(GPIOA, DIGITS[buffer[0]]); //设置段选引脚
//显示第二个数码管
GPIO_SetBits(GPIOB, DIGIT2);
GPIO_ResetBits(GPIOA, DIGITS[buffer[1]]); //设置段选引脚
//显示第三个数码管
GPIO_SetBits(GPIOB, DIGIT3);
GPIO_ResetBits(GPIOA, DIGITS[buffer[2]]); //设置段选引脚
//显示第四个数码管
GPIO_SetBits(GPIOB, DIGIT4);
GPIO_ResetBits(GPIOA, DIGITS[buffer[3]]); //设置段选引脚
}
int main(void) {
//初始化GPIO
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = SEGMENT_A | SEGMENT_B | SEGMENT_C | SEGMENT_D | SEGMENT_E | SEGMENT_F | SEGMENT_G | SEGMENT_DP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = DIGIT1 | DIGIT2 | DIGIT3 | DIGIT4;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//清空显存数组
for (int i = 0; i < 4; i++) {
display_buffer[i] = 0;
}
//循环显示显存
while (1) {
display(display_buffer);
}
}
```
在上面的程序中,我们定义了数码管位选引脚和段选引脚,并且定义了一个显存数组`display_buffer`,用于存储要显示的数字。在主函数中,我们将数码管位选引脚和段选引脚初始化,并且循环调用`display`函数,将显存数组中的内容显示在数码管上。要改变要显示的数字,只需要修改显存数组即可。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)