嵌入式开发:使用STM32CubeMX 和 Keil uVision5实现数码管9-0循环显示实验

一、STM32CubeMx实现数码管

1、双击打开STM32CubeMX。
2、点击File选项,在File列表下选择New Project选项新建工程。
在这里插入图片描述
3、在图中所示位置的方框中输入我们使用的芯片型号来搜索芯片
在这里插入图片描述
4、与我们的搜索相关的芯片型号会在这里呈现,我们只需要选择我们需要的即可,这里我们双击第一个STM32F103C8T6即可完成芯片选型。
在这里插入图片描述
5、完成芯片选型之后我们会来到这个界面:

在这里插入图片描述
6、下一步我们先来配置程序下载方式:选中System Core清单下的SYS选项。在右侧弹出的窗口中有Debug选项,单击Debug选项右侧的小箭头,在下拉列表中选择Serial Wire选项。这一步是配置使用ST-LINK下载程序。
在这里插入图片描述
7、下一步是开启外部时钟。单击左侧列表中的RCC选项,右侧窗口会出现默认为Disable的HSE和LSE两个选项,即外部高速时钟和外部低速时钟。这里我们都选择第三项Crystal/Ceramic Resonator,意思是使用板载的外部晶振作为时钟源。
在这里插入图片描述
8、由于我们需要使用1位数码管来显示,所以需要给数码管配置GPIO。在这里我们给数码管的8个引脚全部配置为输出模式。单击需要配置的引脚,在弹出的列表中选择GPIO_Output。配置成功后引脚会变成绿色。
在这里插入图片描述
9.接下来我们需要配置时钟。点击上方的Clock Configuration选项,来到时钟树的界面。
在这里插入图片描述
10、时钟配置完成后点击上方的Project Manager选项,对工程进行设置。
在这里插入图片描述
配置完这个页面后我们选择左侧的Code Generator选项
在这里插入图片描述

在这里插入图片描述
11、工程已配置完成,单击右上角的GENERATE CODE选项生成代码。
在这里插入图片描述
然后会弹出如下界面
在这里插入图片描述
我们选择中间的选项直接打开工程
在这里插入图片描述

如图所示:左边是已经生成好的相关文件,我们只需要在其中添加我们的代码
12、代码如下:仅供参考,请根据实际情况自行更改。

void SMG(int x){
	//数码管显示0
	if(x == 0)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,GPIO_PIN_RESET);
	if(x == 0)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
	//数码管显示1
	if(x == 1)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_RESET);
	if(x == 1)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_SET);
	//数码管显示2
	if(x == 2)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7,GPIO_PIN_RESET);
	if(x == 2)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3|GPIO_PIN_6,GPIO_PIN_SET);
	//数码管显示3
	if(x == 3)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_7,GPIO_PIN_RESET);
	if(x == 3)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5|GPIO_PIN_6,GPIO_PIN_SET);
	//数码管显示4
	if(x == 4)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
	if(x == 4)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5,GPIO_PIN_SET);
	//数码管显示5
	if(x == 5)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
	if(x == 5)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_SET);
	//数码管显示6
	if(x == 6)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
	if(x == 6)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
	//数码管显示7
	if(x == 7)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_RESET);
	if(x == 7)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_SET);
	//数码管显示8
	if(x == 8)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
	//if(x == 8)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
	//数码管显示9
	if(x == 9)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_RESET);
	if(x == 9)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
}
  while (1)
  {
		
		for(int y = 9; y >= 0; y--){
			SMG(y);	//数码管显示
			HAL_Delay(1000); //HAL库的延时函数,延时1000ms
		
		}

13.进行编译
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编译成功

如果你在写注释的时候出现?或者乱码,设置一下编码格式
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,以下是使用Keil5和STM32芯片,使用C语言实现0-9数码管显示的代码以及仿真。 代码如下: ```c #include "stm32f10x.h" void delay(uint32_t time); int main(void) { uint8_t num[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数码管0-9显示的编码 uint8_t i = 0; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能GPIOB时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; // 数码管对应的引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化GPIOB while(1) { for(i = 0; i < 10; i++) // 循环显示0-9 { GPIO_Write(GPIOB, num[i] << 1); // 显示数字 delay(1000); // 延时1s } } } void delay(uint32_t time) { while(time--); } ``` 仿真步骤如下: 1. 打开Keil5软件,创建一个新的工程。 2. 选择对应的芯片型号和工作频率,点击“OK”按钮。 3. 在“Project”菜单下选择“Options for Target”选项。 4. 在弹出的窗口中选择“Debug”选项卡。 5. 在“Settings”选项卡中选择“ST-Link”调试器,并勾选“Serial Wire Viewer”和“Serial Wire Output”。 6. 点击“OK”按钮保存设置。 7. 在工程文件夹中找到“startup_stm32f10x_md_vl.s”文件,双击打开。 8. 在文件中找到“_stack_top”符号,并在其下方插入以下代码: ``` .word 0x20001000 ``` 9. 保存文件并关闭。 10. 在工程中添加上面的代码文件,编译工程并下载到STM32芯片中。 11. 打开“Debug”菜单下的“Start/Stop Debug Session”选项。 12. 点击“Run”按钮启动仿真。 13. 可以观察到数码管0-9依次显示。 注意:以上代码和步骤仅供参考,具体实现可能会有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-努力搬砖的小刘-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值