用keil4使用stm32f103c8t6配置三位静态数码管显示133的工程
时间: 2023-09-02 07:06:12 浏览: 104
好的,我可以为您提供一个简单的工程示例,实现STM32F103C8T6单片机驱动三位共阳数码管显示133的功能。请按照以下步骤进行操作:
1.硬件连接
将三位共阳数码管连接至单片机的PB0~PB2引脚,连接方式如下图所示:
![image](https://img-blog.csdn.net/20180513183714833?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bmdoYWl1NzI0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/50)
2.新建工程
在Keil4中新建一个工程,选择STMicroelectronics->STM32F10x MDK,输入工程名字,然后选择存储路径,最后点击OK按钮。
3.配置工程
在工程中添加需要的源文件和头文件,具体如下:
(1)添加头文件"stm32f10x.h"。
(2)在main函数中进行如下配置:
初始化GPIOB口,将PB0~PB2引脚设置为输出模式;
使用TIM2定时器,设置预分频系数为71,计数器自动重装载,计数器周期设置为1000,开启TIM2中断;
开启全局中断;
启动TIM2计数器。
4.编写代码
在main函数中编写如下代码:
```c
#include "stm32f10x.h"
void delay(int n) {
int i;
while (n--) {
for (i = 0; i < 1000; i++);
}
}
void TIM2_IRQHandler(void) {
static int cnt = 0;
static int digit = 0;
int i;
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
cnt++;
if (cnt == 1000) {
cnt = 0;
digit++;
if (digit == 3) {
digit = 0;
}
}
switch (digit) {
case 0:
GPIO_SetBits(GPIOB, GPIO_Pin_0);
GPIO_ResetBits(GPIOB, GPIO_Pin_1|GPIO_Pin_2);
break;
case 1:
GPIO_SetBits(GPIOB, GPIO_Pin_1);
GPIO_ResetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_2);
break;
case 2:
GPIO_SetBits(GPIOB, GPIO_Pin_2);
GPIO_ResetBits(GPIOB, GPIO_Pin_0|GPIO_Pin_1);
break;
}
switch (cnt / 333) {
case 0:
GPIO_SetBits(GPIOB, GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_3);
break;
case 1:
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
GPIO_SetBits(GPIOB, GPIO_Pin_4|GPIO_Pin_3);
break;
case 2:
GPIO_ResetBits(GPIOB, GPIO_Pin_4);
GPIO_SetBits(GPIOB, GPIO_Pin_5|GPIO_Pin_3);
break;
case 3:
GPIO_ResetBits(GPIOB, GPIO_Pin_3);
GPIO_SetBits(GPIOB, GPIO_Pin_5|GPIO_Pin_4);
break;
}
}
}
int main(void) {
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = 1000;
TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM2, ENABLE);
while (1) {
}
}
```
5.编译下载
编译代码并下载到单片机中,就可以看到三位共阳数码管上显示133了。
希望以上内容对您有所帮助!