六种常见的网站类型,开发公司职称个人业务自传,如何在网上注册公司网站,书法网站建站目标一、七段数码管显示模块详解
#x1f9e9; 1. 基本原理
七段数码管#xff08;7-Segment Display#xff09;由 7 个 LED#xff08;标记为 a#xff5e;g#xff09;组成#xff0c;用来显示 十进制数字 0~9#xff08;有的加上小数点 dp#xff0c;就是8段#x…一、七段数码管显示模块详解 1. 基本原理
七段数码管7-Segment Display由 7 个 LED标记为 ag组成用来显示 十进制数字 0~9有的加上小数点 dp就是8段。每个数字的显示是通过控制某些段亮/灭来实现的。
数码管的控制方式有两种 共阳极所有段的正极连接在一起接高电平VCC通过对段的负极接低电平GND来点亮 共阴极所有段的负极连接在一起接地通过段的正极给高电平来点亮。
本程序是以共阴极数码管为例设计的即 段码位为 1高电平时灯灭0低电平时灯亮。 2. 段码表解析
uint8_t LedShowData[]{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};// 对应数字 0 1 2 3 4 5 6 7 8 9 每个值代表一个数字所需显示的段的组合按如下方式排列 位 段 说明 D0 a 最上方横 D1 b 右上 D2 c 右下 D3 d 最下方横 D4 e 左下 D5 f 左上 D6 g 中间横 D7 dp 小数点不使用
这些段的状态组成一个字节即 8 位数据比如 数字 0亮 a, b, c, d, e, f → 0xC0二进制 1100 0000 数字 1亮 b, c → 0xF9二进制 1111 1001 3. 相关函数解释 uint8_t LedShowData[]{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0,1,2,3,4,5,6,7,8,9 uint16_t GPIO_PIN_x[] {GPIO_Pin_0,GPIO_Pin_1,GPIO_Pin_2,GPIO_Pin_3,GPIO_Pin_4,GPIO_Pin_5,GPIO_Pin_6,GPIO_Pin_7}; ✅ void LEDSEG_Init(void);
该函数初始化 GPIOA 的 0~7 引脚为推挽输出用来控制数码管的每一段。
代码分析
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 打开 GPIOA 的时钟
GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_0 | ... | GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); 设置 GPIOA 0~7 为 推挽输出速度为 50MHz。
GPIO_SetBits(GPIOA, GPIO_Pin_0 ~ GPIO_Pin_7); 所有段位输出高电平共阴极时LED 熄灭。 ✅ void Digital_Display(uint8_t val);
这个函数用于在数码管上显示一个数字0~9。
传参 val你想显示的数字0~9
代码解析
uint16_t display_val LedShowData[val]; 从段码表中查出要显示数字的段码值。
for(i 0;i 8;i){ GPIO_WriteBit(GPIOA,GPIO_PIN_x[i],display_vali 0x01);} 遍历8位段码从最低位到最高位把每一位的0或1写到对应的 GPIOA 引脚上。 display_val i 0x01提取第 i 位。 示例展示
例如 val 2查表得到 display_val 0xA4 0b10100100会将 D0~D7 分别设置为对应的位。 小贴士 若你要动态显示多个位的数码管需要通过位选段选组合来进行快速扫描即动态显示法。 若你是单个数码管此代码已足够完成显示功能。 示意图逻辑上
GPIOA 引脚 01234567 段位对应 a b c d e f g d
Digital_Display(3); // GPIOA 写入 0xB0 段 a b c d g 亮 ✅ 总结 函数名 作用 LEDSEG_Init() 初始化数码管用的 GPIOA0~A7 Digital_Display(val) 显示指定数字0~9