# 数码管的通用性模板
数码管在产品开发中经常会被使用,本人结合近年来的工作经验,总结了通用化的模板供大家参考,欢迎大家批评指正。本文采用的是SMT32F103系列芯片,部分库函数直接引用,不做具体介绍。
## (1)内容定义
(1) 定义字形转换表
const unsigned char zxb[]
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x38,0x50,0x58,0x73,0x3E,0x79,0x7A,0x39
// 对应内容为:0 1 2 3 4 5 6 7 8 9 空 L r c P U E b C
};
根据数码管的控制引脚的动作情况,编写上述转换表,本文所用数码管的控制引脚如下所示:
// _ _ a
// |_| f |_ g |b
// |_|. e |_ d |c . h
// D3 D2 D1 D0
// d c b a
// D7 D6 D5 D4
// h g f e
(2)定义数码管管子数组
unsigned char Dis_Dat[4]={8,8,8,8}; //本文使用的是4个数码管,应该定义数组大小为4
(3)定义显示缓冲区
unsigned char Dis_Buf[32]; //管子的每一段对应一个字节
(4)定义管子切换显示时间
unsigned char Disp_20ms=20; //管子切换的时间本文设置为20ms,实际使用中,可适当调节,如时间选择过长有可能会出现闪烁的情况
(5)定义IO口
//4个管子的片选
#define V_LED1_IO GPIO_Pin_7
#define V_LED2_IO GPIO_Pin_6
#define V_LED3_IO GPIO_Pin_5
#define V_LED4_IO GPIO_Pin_4
//8段
#define POINT1_IO GPIO_Pin_12
#define POINT2_IO GPIO_Pin_13
#define POINT3_IO GPIO_Pin_14
#define POINT4_IO GPIO_Pin_15
#define POINT5_IO GPIO_Pin_2
#define POINT6_IO GPIO_Pin_1
#define POINT7_IO GPIO_Pin_10
#define POINT8_IO GPIO_Pin_11
(6)定义各管子的控制
//清0
#define POINT1_ON GPIO_ResetBits(GPIOB,POINT1_IO)
#define POINT2_ON GPIO_ResetBits(GPIOB,POINT2_IO)
#define POINT3_ON GPIO_ResetBits(GPIOB,POINT3_IO)
#define POINT4_ON GPIO_ResetBits(GPIOB,POINT4_IO)
#define POINT5_ON GPIO_ResetBits(GPIOB,POINT5_IO)
#define POINT6_ON GPIO_ResetBits(GPIOB,POINT6_IO)
#define POINT7_ON GPIO_ResetBits(GPIOB,POINT7_IO)
#define POINT8_ON GPIO_ResetBits(GPIOB,POINT8_IO)
//置1
#define POINT1_OFF GPIO_SetBits(GPIOB,POINT1_IO)
#define POINT2_OFF GPIO_SetBits(GPIOB,POINT2_IO)
#define POINT3_OFF GPIO_SetBits(GPIOB,POINT3_IO)
#define POINT4_OFF GPIO_SetBits(GPIOB,POINT4_IO)
#define POINT5_OFF GPIO_SetBits(GPIOB,POINT5_IO)
#define POINT6_OFF GPIO_SetBits(GPIOB,POINT6_IO)
#define POINT7_OFF GPIO_SetBits(GPIOB,POINT7_IO)