实现环境
- Proteus8.17
- Keil5 MDK 536

实现步骤
- 选择STM32微控制器:在Proteus元件库中找到并放置STM32微控制器(如STM32F103C8)。
- 添加四位数码管:在元件库中找到四位数码管(如7段数码管),并将其放置在电路中。
- 连接电路:
将数码管的段选引脚(a, b, c, d, e, f, g, dp)连接到STM32的GPIO引脚。
将数码管的位选引脚(通常为4个,对应每一位数码管)连接到STM32的GPIO引脚。
确保数码管的共阴极或共阳极连接正确(共阴极接地,共阳极接VCC)。
电路连接图
位选、段选初始化代码实现
unsigned char code[] ={0xC0, 0x79,0x24, 0x30, 0x19, 0x12, 0x02, 0x78,0x00, 0x10, 0x08, 0x03, 0x46,0x21, 0x06, 0x0e};//共阳数码管 显示点
//段码初始化函数
#define G_GPIO_PIN GPIO_Pin_1
#define F_GPIO_PIN GPIO_Pin_2
#define E_GPIO_PIN GPIO_Pin_3
#define D_GPIO_PIN GPIO_Pin_4
#define C_GPIO_PIN GPIO_Pin_5
#define B_GPIO_PIN GPIO_Pin_6
#define A_GPIO_PIN GPIO_Pin_7
//段码初始化函数
void smg_duanma(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//打开时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = A_GPIO_PIN | B_GPIO_PIN | C_GPIO_PIN | D_GPIO_PIN | E_GPIO_PIN | F_GPIO_PIN | G_GPIO_PIN ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB, A_GPIO_PIN | B_GPIO_PIN | C_GPIO_PIN | D_GPIO_PIN | E_GPIO_PIN | F_GPIO_PIN | G_GPIO_PIN);
}
//位码初始化
void smg_weima(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//打开时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_2 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_2 | GPIO_Pin_4);
}
段码显示函数
//段码显示函数
void smg_duanma_Display(GPIO_TypeDef* GPIOx,u8 val)
{
uint16_t display_val = val << 7;
GPIO_Write(GPIOx,display_val);
display_val =0xff;
}
数码管显示函数
//数码管显示函数
void smg_data(char weizhi,char num)
{
// 4位数码管1~4引脚接线要求。(接线错误扣4分)学号:(2227010255)
//学号尾号0~4,1~4引脚从PA1~PA4依次连接
//学号尾号5~9,1~4引脚从PA4~PA1依次连接
switch(weizhi)
{
case 1 :
GPIO_SetBits(GPIOA, GPIO_Pin_4);
GPIO_ResetBits(GPIOA, GPIO_Pin_3);
GPIO_ResetBits(GPIOA, GPIO_Pin_2);
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
break;
case 2 :
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
GPIO_SetBits(GPIOA, GPIO_Pin_3);
GPIO_ResetBits(GPIOA, GPIO_Pin_2);
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
break;
case 3 :
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
GPIO_ResetBits(GPIOA, GPIO_Pin_3);
GPIO_SetBits(GPIOA, GPIO_Pin_2);
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
break;
case 4 :
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
GPIO_ResetBits(GPIOA, GPIO_Pin_3);
GPIO_ResetBits(GPIOA, GPIO_Pin_2);
GPIO_SetBits(GPIOA, GPIO_Pin_1);
break;
}
/*
#define G_GPIO_PIN GPIO_Pin_1
#define F_GPIO_PIN GPIO_Pin_2
#define E_GPIO_PIN GPIO_Pin_3
#define D_GPIO_PIN GPIO_Pin_4
#define C_GPIO_PIN GPIO_Pin_5
#define B_GPIO_PIN GPIO_Pin_6
#define A_GPIO_PIN GPIO_Pin_7
*/
switch(num)
{
case 0 : //G不亮 给0亮 给1灭
GPIO_ResetBits(GPIOB, A_GPIO_PIN);
GPIO_ResetBits(GPIOB, B_GPIO_PIN);
GPIO_ResetBits(GPIOB, C_GPIO_PIN);
GPIO_ResetBits(GPIOB, D_GPIO_PIN);
GPIO_ResetBits(GPIOB, E_GPIO_PIN);
GPIO_ResetBits(GPIOB, F_GPIO_PIN);


1806

被折叠的 条评论
为什么被折叠?



