
STM32F103C8T6 是意法半导体(STMicroelectronics)推出的一款高性能、低功耗的32位微控制器,属于STM32F1系列。
它广泛应用于嵌入式系统开发,适用于需要高性能处理、低功耗和丰富外设接口的场景。以下是关于STM32F103C8T6的详细介绍:

数码管介绍
码管是一种用于显示数字的电子元件,广泛应用于各种电子设备中,如电子表、计算器、电子秤等。以下是关于数码管的详细介绍,包括其类型、工作原理、引脚定义以及如何与微控制器(如STM32)连接和控制。  1. 数码管的类型 数码管主要分为两种类型:共阳极和共阴极。 (1)共阳极数码管 • 特点:所有段的阳极(正极)连接在一起,通过控制阴极(负极)来点亮对应的段。 • 优点:适合使用NPN型三极管或低电平驱动的电路。 • 缺点:在某些情况下,需要额外的电平转换电路。 (2)共阴极数码管 • 特点:所有段的阴极(负极)连接在一起,通过控制阳极(正极)来点亮对应的段。 • 优点:适合使用PNP型三极管或高电平驱动的电路,直接与微控制器连接时较为方便。 • 缺点:在某些情况下,需要额外的电平转换电路。  2. 数码管的引脚定义 数码管通常有8个段(a-g和DP),分别对应数字的各个部分。以下是数码管的引脚定义:

#include "stm32f10x.h" // Device header
#include "stdio.h"
#include "string.h"
void delay100(int xms)
{
while(xms--);
}
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_duanma_Display(GPIO_TypeDef* GPIOx,u8 val)
{
uint16_t display_val = val << 7;
GPIO_Write(GPIOx,display_val);
display_val =0xff;
}
//位码初始化
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_data(char weizhi,char num)
{
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);
GPIO_SetBits( GPIOB, G_GPIO_PIN);
//smg_duanma_Display(GPIOB,code[0]);
break;
case 1 : //只有bc亮 给0亮 给1灭
GPIO_SetBits(GPIOB, A_GPIO_PIN);
GPIO_ResetBits(GPIOB, B_GPIO_PIN);
GPIO_ResetBits(GPIOB, C_GPIO_PIN);
GPIO_SetBits(GPIOB, D_GPIO_PIN);
GPIO_SetBits(GPIOB, E_GPIO_PIN);
GPIO_SetBits(GPIOB, F_GPIO_PIN);
GPIO_SetBits( GPIOB, G_GPIO_PIN);
//smg_duanma_Display(GPIOB,code[1]);
break;
case 2 : //只有abdf亮 给0亮 给1灭
GPIO_ResetBits(GPIOB, A_GPIO_PIN);
GPIO_ResetBits(GPIOB, B_GPIO_PIN);
GPIO_SetBits(GPIOB, C_GPIO_PIN);
GPIO_ResetBits(GPIOB, D_GPIO_PIN);
GPIO_ResetBits(GPIOB, E_GPIO_PIN);
GPIO_SetBits(GPIOB, F_GPIO_PIN);
GPIO_ResetBits( GPIOB, G_GPIO_PIN);
//smg_duanma_Display(GPIOB,code[1]);
break;
case 3 : //只有abcdg亮 给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_SetBits(GPIOB, E_GPIO_PIN);
GPIO_SetBits(GPIOB, F_GPIO_PIN);
GPIO_ResetBits( GPIOB, G_GPIO_PIN);
//smg_duanma_Display(GPIOB,code[1]);
break;
case 4 : //只有bcfg亮 给0亮 给1灭
GPIO_SetBits(GPIOB, A_GPIO_PIN);
GPIO_ResetBits(GPIOB, B_GPIO_PIN);
GPIO_ResetBits(GPIOB, C_GPIO_PIN);
GPIO_SetBits(GPIOB, D_GPIO_PIN);
GPIO_SetBits(GPIOB, E_GPIO_PIN);
GPIO_ResetBits(GPIOB, F_GPIO_PIN);
GPIO_ResetBits( GPIOB, G_GPIO_PIN);
//smg_duanma_Display(GPIOB,code[1]);
break;
case 5 : //只有acdfg亮 给0亮 给1灭
GPIO_ResetBits(GPIOB, A_GPIO_PIN);
GPIO_SetBits(GPIOB, B_GPIO_PIN);
GPIO_ResetBits(GPIOB, C_GPIO_PIN);
GPIO_ResetBits(GPIOB, D_GPIO_PIN);
GPIO_SetBits(GPIOB, E_GPIO_PIN);
GPIO_ResetBits(GPIOB, F_GPIO_PIN);
GPIO_ResetBits( GPIOB, G_GPIO_PIN);
//smg_duanma_Display(GPIOB,code[1]);
break;
case 6 : //只有acdefg亮 给0亮 给1灭
GPIO_ResetBits(GPIOB, A_GPIO_PIN);
GPIO_SetBits(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);
GPIO_ResetBits( GPIOB, G_GPIO_PIN);
//smg_duanma_Display(GPIOB,code[1]);
break;
case 7 : //只有abc亮 给0亮 给1灭
GPIO_ResetBits(GPIOB, A_GPIO_PIN);
GPIO_ResetBits(GPIOB, B_GPIO_PIN);
GPIO_ResetBits(GPIOB, C_GPIO_PIN);
GPIO_SetBits(GPIOB, D_GPIO_PIN);
GPIO_SetBits(GPIOB, E_GPIO_PIN);
GPIO_SetBits(GPIOB, F_GPIO_PIN);
GPIO_SetBits(GPIOB, G_GPIO_PIN);
//smg_duanma_Display(GPIOB,code[1]);
break;
case 8 : //只有abcdefg亮 给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);
GPIO_ResetBits( GPIOB, G_GPIO_PIN);
//smg_duanma_Display(GPIOB,code[1]);
break;
case 9 : //只有abcdfg亮 给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_SetBits(GPIOB, E_GPIO_PIN);
GPIO_ResetBits(GPIOB, F_GPIO_PIN);
GPIO_ResetBits( GPIOB, G_GPIO_PIN);
//smg_duanma_Display(GPIOB,code[1]);
break;
}
delay100(200);
GPIO_SetBits(GPIOB, A_GPIO_PIN | B_GPIO_PIN | C_GPIO_PIN | D_GPIO_PIN | E_GPIO_PIN | F_GPIO_PIN | G_GPIO_PIN );
GPIO_SetBits(GPIOA, GPIO_Pin_3|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_4);
}
//按键123 pa0 6 7初始化
void Key_Init067(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*开启时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOB的时钟
/*GPIO初始化*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_6 ;//|GPIO_Pin_7 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); //将PB1和PB11引脚初始化为上拉输入
}
//按键延时
void delayms(u32 ms)
{
while(ms--);
}
/**
* 函 数:按键获取键码
* 参 数:无
* 返 回 值:按下按键的键码值,范围:0~2,返回0代表没有按键按下
* 注意事项:此函数是阻塞式操作,当按键按住不放时,函数会卡住,直到按键松手
*/
uint8_t Key_GetNum067(void)
{
uint8_t KeyNum = 0; //定义变量,默认键码值为0
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0) //读PB11输入寄存器的状态,如果为0,则代表按键2按下
{
delayms(40); //延时消抖
while (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0); //等待按键松手
//Delay_ms(2); //延时消抖
KeyNum = 5; //置键码为2
}
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) == 0) //读PB1输入寄存器的状态,如果为0,则代表按键1按下
{
delayms(40); //延时消抖
while (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) == 0); //等待按键松手
//Delay_ms(2); //延时消抖
KeyNum = 6; //置键码为1
}
return KeyNum; //返回键码值,如果没有按键按下,所有if都不成立,则键码为默认值0
}
int main(void)
{
int keyValue=8266;
char key=0,mode=1;
//位码初始化
smg_weima();
//段码初始化函数
smg_duanma();
//按键123 pa0 6 7初始化
Key_Init067();
//Usart1_Pin_Init(9600);
while(1)
{
key =Key_GetNum067();
if(key==5) //key 1按下
{
keyValue=0;
mode=1;
}
if(key==6) //key 1按下
{
keyValue=8266;
mode=0;
}
if(mode==1)
{
smg_data(1,keyValue/1000);
smg_data(2,keyValue/100%10);
smg_data(3,keyValue/10%10);
smg_data(4,keyValue%10);
delay100(5000);
if(keyValue ==1250)
{
keyValue=1200;
}
}
if(mode==0)
{
smg_data(1,keyValue/1000);
smg_data(2,keyValue/100%10);
smg_data(3,keyValue/10%10);
smg_data(4,keyValue%10);
delay100(5000);
keyValue++;
if(keyValue ==1250)
{
keyValue=1200;
}
}
}
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。