用keil 写“数码管循环显示0到9”的代码和配置
时间: 2024-02-23 15:59:03 浏览: 38
好的,我给您提供一个使用Keil编写的STM32单片机程序,实现数码管循环显示0到9的功能。该程序使用了STM32F103C8T6开发板和共阴极数码管,使用了定时器中断和位移寄存器来控制数码管的显示。
首先,您需要在Keil中进行硬件配置。这里假设您已经连接好了STM32F103C8T6开发板,并且使用了PA8~PA11四个引脚连接了共阴极数码管。以下是硬件配置步骤:
1. 打开Keil软件,并在Project菜单中选择Options for Target。
2. 在Options for Target窗口中选择Device选项卡,选择您使用的STM32F103C8T6型号,并确保选择了正确的Crystal/Clock值和Flash算法。
3. 在Options for Target窗口中选择C/C++选项卡,勾选Use MicroLIB,并在Misc Controls中添加以下代码:
```
--library_type=microlib
```
4. 在Options for Target窗口中选择Debug选项卡,选择SW模式,并确保选择了正确的JTAG/SWD接口。
5. 点击OK保存配置。
6. 在Project菜单中选择Manage选项,并在Manage Project Items窗口中选择Device和Startup。
7. 在Device和Startup中选择CMSIS->core->startup目录,并将startup_stm32f10x_hd.s文件添加到项目中。
8. 在Device和Startup中选择CMSIS->device->ST->STM32F10x->Source->Templates目录,并将system_stm32f10x.c文件添加到项目中。
9. 在Project根目录下创建main.c文件,并将以下代码复制到文件中:
```
#include "stm32f10x.h"
// 数码管位移寄存器
uint8_t LED_CODE[10] = {
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f // 9
};
// 定时器2中断服务函数
void TIM2_IRQHandler(void)
{
static uint8_t num = 0;
uint8_t code = LED_CODE[num];
GPIOA->ODR = code << 8;
num++;
if(num >= 10)
{
num = 0;
}
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
int main(void)
{
// 使能外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
// 配置GPIO
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置定时器2
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 1000; // 定时器周期为1ms
TIM_TimeBaseStructure.TIM_Prescaler = 7200 - 1; // 分频系数为7200,时钟频率为10kHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// 使能定时器2中断
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
// 启动定时器2
TIM_Cmd(TIM2, ENABLE);
while(1);
}
```
10. 点击Project->Build Target编译程序,并使用JTAG/SWD接口下载程序到STM32F103C8T6开发板中。
11. 将共阴极数码管连接到PA8~PA11四个引脚上,并给开发板上电,就可以看到数码管循环显示0到9的效果了。
希望这个程序可以帮助到您!