消费电子领域:以 1-4 位 8 段共阴 / 共阳数码管为主,核心用于小家电、便携数码产品等,显示温度、时间、电量、数值等极简信息,适配低成本、小型化需求,多为贴片 / 小型插件式,采用动态扫描驱动,亮度高、强光下易读,可与 LED 指示灯搭配实现复合显示。
工业场景:以工业级 8/16 段数码管、4-8 位联排款为主,耐高低温、抗干扰振动,适配工控复杂环境,广泛用于仪器仪表、电气自动化设备、机床、流水线等,现场直显运行参数、故障代码、计数数值等,多为插件式加固封装,静态驱动保障显示稳定,常搭配专用驱动芯片 / 模块,易对接工控系统。
序号 | 名称 | 型号 | 数量 | Lib名称 |
1 | ||||
2 | ||||
7SEG-MPX1-CC | 7SEG-MPX1-CC |






真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或有效。H代表高电平,L代表低电平,X代表随机电平(可高可低)

使用stm32f103一位共阴驱动数码管显示数字:1)使用hal库函数;2)PB0~PB6连接数码管的a~g段;3)循环显示数字0~9,时间间隔1秒;4)数字显示使用单独一个函数,参数使用要显示的数字;5)时钟使用HSI,hclk配置为64MHz。






#include "main.h"// 共阴数码管段码表(0~9),bit0=a(PB0), bit1=b(PB1)...bit6=g(PB6)const uint8_t seg_code[10] = {0x3F, // 0: a,b,c,d,e,f亮0x06, // 1: b,c亮0x5B, // 2: a,b,g,e,d亮0x4F, // 3: a,b,g,c,d亮0x66, // 4: f,g,b,c亮0x6D, // 5: a,f,g,c,d亮0x7D, // 6: a,f,g,c,d,e亮0x07, // 7: a,b,c亮0x7F, // 8: 全亮0x6F // 9: a,b,c,d,f,g亮};/*** @brief 系统时钟配置:HSI 8MHz -> PLL 64MHz,HCLK=64MHz* @param 无* @retval 无*/void SystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};// 配置HSI和PLLRCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; // 使用内部HSI时钟RCC_OscInitStruct.HSIState = RCC_HSI_ON; // 开启HSIRCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; // HSI默认校准值(8MHz)RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; // 开启PLLRCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2; // HSI分频2(8MHz/2=4MHz)作为PLL输入RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16; // PLL倍频16(4MHz×16=64MHz)if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}// 配置系统时钟源和总线分频RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 系统时钟=PLL(64MHz)RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB分频1 → HCLK=64MHzRCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // APB1分频2 → PCLK1=32MHzRCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // APB2分频1 → PCLK2=64MHz// 配置FLASH延迟(64MHz需要2个等待周期)if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}}/*** @brief 初始化PB0~PB6为推挽输出模式* @param 无* @retval 无*/void GPIO_Init_Display(void){GPIO_InitTypeDef GPIO_InitStruct = {0};// 使能GPIOB时钟(APB2总线,时钟64MHz)__HAL_RCC_GPIOB_CLK_ENABLE();// 配置PB0~PB6为推挽输出,速度50MHzGPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 |GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上拉下拉GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;// 高速输出HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);// 初始低电平,数码管熄灭HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6, GPIO_PIN_RESET);}/*** @brief 显示指定数字(0~9),参数为要显示的数字* @param num: 0~9(超出范围则熄灭数码管)* @retval 无*/void Display_Number(uint8_t num){uint8_t code = 0;// 校验数字范围,仅处理0~9if(num < 10){code = seg_code[num]; // 匹配对应段码}// 逐引脚设置电平(高电平点亮共阴数码管对应段)HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, (code & 0x01) ? GPIO_PIN_SET : GPIO_PIN_RESET); // a段HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, (code & 0x02) ? GPIO_PIN_SET : GPIO_PIN_RESET); // b段HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, (code & 0x04) ? GPIO_PIN_SET : GPIO_PIN_RESET); // c段HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, (code & 0x08) ? GPIO_PIN_SET : GPIO_PIN_RESET); // d段HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, (code & 0x10) ? GPIO_PIN_SET : GPIO_PIN_RESET); // e段HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, (code & 0x20) ? GPIO_PIN_SET : GPIO_PIN_RESET); // f段HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, (code & 0x40) ? GPIO_PIN_SET : GPIO_PIN_RESET); // g段}/*** @brief 错误处理函数(死循环)* @param 无* @retval 无*/void Error_Handler(void){while(1){// 时钟配置失败时可添加LED闪烁等提示}}/*** @brief 主函数:循环显示0~9,间隔1秒* @param 无* @retval 无*/int main(void){// 1. HAL库初始化(初始化SysTick,用于HAL_Delay)HAL_Init();// 2. 配置系统时钟为HSI→64MHzSystemClock_Config();// 3. 初始化数码管GPIOGPIO_Init_Display();uint8_t disp_num = 0; // 显示数字变量while(1){Display_Number(disp_num); // 显示当前数字HAL_Delay(1000); // 延时1秒(基于SysTick,时钟64MHz下准确)disp_num = (disp_num + 1) % 10; // 数字循环0~9}}#ifdef USE_FULL_ASSERTvoid assert_failed(uint8_t *file, uint32_t line){// 断言失败处理(可选)}#endif
/* Define to prevent recursive inclusion -------------------------------------*/#ifndef __MAIN_H#define __MAIN_H#ifdef __cplusplusextern "C" {#endif/* Includes ------------------------------------------------------------------*/#include"stm32f1xx_hal.h"/* Exported functions prototypes ---------------------------------------------*/voidError_Handler(void);#ifdef __cplusplus}#endif#endif/* __MAIN_H */
const uint8_t seg_code[10]
C 数组


条件表达式 ? 表达式1: 表达式2;执行逻辑:先判断条件表达式的真假核心作用:替代简单的if-else语句,让代码更简洁。:
如果为真(非 0),执行表达式1,并将其结果作为整个表达式的返回值;
如果为假(0),执行表达式2,并将其结果作为整个表达式的返回值。
核心作用:替代简单的if-else语句,让代码更简洁。

本合集程序及原理图已上传代码托管平台,可以在本公众号聊天窗口回复“下载”,获取下载链接。
---------------END---------------
