stm32仿真 74hc238流水灯 数码管动态数字显示

news/2025/2/27 2:13:03/

请添加图片描述

f103c6t6a_hex文件

#include "main.h"![请添加图片描述](https://i-blog.csdnimg.cn/direct/8c0d44b121134cf08f5186df316ea07f.gif)#include "stdlib.h"void SystemClock_Config(void);
static void MX_GPIO_Init(void);
// 自定义abc引脚
#define A_PIN GPIO_PIN_1
#define B_PIN GPIO_PIN_2 
#define C_PIN GPIO_PIN_0 //y0到y7输出
void segment(char c){if(c == 'a'){GPIOB->BRR = A_PIN | B_PIN | C_PIN; }else if(c == 'b'){GPIOB->BSRR = A_PIN; GPIOB->BRR =  B_PIN | C_PIN; 
}else if(c == 'c'){GPIOB->BSRR = B_PIN; GPIOB->BRR =  A_PIN | C_PIN; 
}else if(c == 'd'){GPIOB->BSRR = A_PIN|B_PIN ; GPIOB->BRR =   C_PIN; 
}else if(c == 'e'){GPIOB->BSRR = C_PIN; GPIOB->BRR =  A_PIN | B_PIN; 
}else if(c == 'f'){GPIOB->BSRR = A_PIN| C_PIN; GPIOB->BRR =  B_PIN ; 
}else if(c == 'g'){GPIOB->BSRR =B_PIN| C_PIN; GPIOB->BRR = A_PIN ; 
}else if(c == 'p'){GPIOB->BSRR =A_PIN |B_PIN| C_PIN; 
}}char segment_list[]={'a','b','c','d','e','f','g','p'};
int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();while (1){for(int i=0;i<=7;i++){segment(segment_list[i]);HAL_Delay(500);}} }void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the CPU, AHB and APB busses clocks */RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB busses clocks */RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){Error_Handler();}
}/*** @brief GPIO Initialization Function* @param None* @retval None*/
static void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIOInitStruct = {0}; // 初始化 GPIO 结构体// 使能 GPIO 端口时钟__HAL_RCC_GPIOB_CLK_ENABLE();// 设置 GPIO 的通用配置GPIOInitStruct.Mode = GPIO_MODE_OUTPUT_PP;    // 设置为推挽输出模式GPIOInitStruct.Pull = GPIO_NOPULL;            // 不使用上拉或下拉GPIOInitStruct.Speed = GPIO_SPEED_FREQ_LOW;   // 设置为低速// 配置 GPIOB 端口的所有引脚GPIOInitStruct.Pin = GPIO_PIN_All; // 指定所有引脚HAL_GPIO_Init(GPIOB, &GPIOInitStruct); // 初始化配置}void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state *//* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT

控制74hc238显示变化的数字
请添加图片描述

c6t6控制74hc238 hex文件

#include "main.h"
#include "stdlib.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
// 定义74hc238输入引脚
#define A_PIN GPIO_PIN_1
#define B_PIN GPIO_PIN_2 
#define C_PIN GPIO_PIN_0 // 数码管段码
const uint16_t num_to_segment[] = {0x3F,0x06,0x5b,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};void segment(char c){//74HC238三位输入对应八位输出GPIOB -> BRR = GPIO_PIN_8;//E3拉低 关闭输出if(c == 'a'){GPIOB->BRR = A_PIN | B_PIN | C_PIN; }else if(c == 'b'){GPIOB->BSRR = A_PIN; GPIOB->BRR =  B_PIN | C_PIN; 
}else if(c == 'c'){GPIOB->BSRR = B_PIN; GPIOB->BRR =  A_PIN | C_PIN; 
}else if(c == 'd'){GPIOB->BSRR = A_PIN|B_PIN ; GPIOB->BRR =   C_PIN; 
}else if(c == 'e'){GPIOB->BSRR = C_PIN; GPIOB->BRR =  A_PIN | B_PIN; 
}else if(c == 'f'){GPIOB->BSRR = A_PIN| C_PIN; GPIOB->BRR =  B_PIN ; 
}else if(c == 'g'){GPIOB->BSRR =B_PIN| C_PIN; GPIOB->BRR = A_PIN ; 
}else if(c == 'p'){GPIOB->BSRR =A_PIN |B_PIN| C_PIN; 
}GPIOB -> BSRR = GPIO_PIN_8;//E3拉高 输出
HAL_Delay(1/100);//显示1ms
}void hc238_disnumber(int num){//74hc238显示数字for(int i7=0;i7<2;i7++){GPIOB->BSRR = GPIO_PIN_5|GPIO_PIN_6; //拉高公共端(阴极),关闭显示	int num_1 = num%10;num = num/10;if(i7==0){GPIOB->BRR = GPIO_PIN_6; //显示个位//HAL_Delay(1);//	break;
}
else{GPIOB->BRR = GPIO_PIN_5; //显示十位//HAL_Delay(1);//	break;
}
switch(num_1){case 0://显示0segment('a');segment('b');segment('c');segment('d');segment('e');segment('f');break;case 1://显示1segment('b');segment('c');break;case 2://显示2segment('a');segment('b');segment('g');segment('d');segment('e');break;case 3:segment('a');segment('b');segment('c');segment('d');segment('g');break;case 4:segment('b');segment('c');segment('f');segment('g');break;case 5:segment('a');segment('f');segment('c');segment('d');segment('g');break;case 6:segment('a');segment('c');segment('d');segment('e');segment('f');segment('g');break;case 7:segment('a');segment('b');segment('c');break;case 8:segment('a');segment('b');segment('c');segment('d');segment('e');segment('g');segment('f');break;case 9:segment('a');segment('b');segment('f');segment('c');segment('d');segment('g');break;}if (num==0){
break;
}}
}void display_number1(int n);//函数声明int main(void){SystemClock_Config();MX_GPIO_Init();
while (1)	//while (1){for(int i=0;i<=9;i++){for(int t=0;t<13;t++){//显示时间控制display_number1(i+50);//直连数码管数字显示hc238_disnumber(i*10);//控制74hc238显示数字}}} //while}//mainint p1;
int i1;void display_number1(int n1){for (i1=0;i1<2;i1++){GPIOA->BRR = GPIO_PIN_All;//清除GPIO端口A的所有引脚p1 = n1%10;//求余数,47%10=7,4%10=4GPIOA->ODR =num_to_segment[p1];//向gpioA端口写入段码n1 = n1/10;//进位,47/10=4GPIOA->BSRR = GPIO_PIN_11|GPIO_PIN_12; //共阴极拉高,清除显示switch(i1){case 0:GPIOA->BRR = GPIO_PIN_12; //个位break;case 1:GPIOA->BRR = GPIO_PIN_11; //十位break;}HAL_Delay(1);if (n1 == 0){break;}}}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the CPU, AHB and APB busses clocks */RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB busses clocks */RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){Error_Handler();}
}/*** @brief GPIO Initialization Function* @param None* @retval None*/
static void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIOInitStruct = {0}; // 初始化 GPIO 结构体// 使能 GPIO 端口时钟__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOD_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();// 设置 GPIO 的通用配置GPIOInitStruct.Mode = GPIO_MODE_OUTPUT_PP;    // 设置为推挽输出模式GPIOInitStruct.Pull = GPIO_NOPULL;            // 不使用上拉或下拉GPIOInitStruct.Speed = GPIO_SPEED_FREQ_LOW;   // 设置为低速// 配置 GPIOA和B 端口的所有引脚GPIOInitStruct.Pin = GPIO_PIN_All; // 指定所有引脚HAL_GPIO_Init(GPIOB, &GPIOInitStruct); // 初始化B配置HAL_GPIO_Init(GPIOA, &GPIOInitStruct);// 初始化A配置 }void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state *//* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{ /* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

http://www.ppmy.cn/news/1575142.html

相关文章

MQ(Message Queue)

目录 MQ(Message Queue)基本概念 为什么要使用消息队列&#xff1f; 使用消息队列有什么缺点&#xff1f; 如何保证消息不丢失?(如何保证消息的可靠性传输?/如何处理消息丢失的问题?) 通用的MQ场景&#xff1a; RabbitMQ如何保证消息不丢失&#xff1f; 生产者丢数据…

PHP课程预约小程序源码

&#x1f4f1; 课程预约小程序&#xff1a;为您专属定制的便捷预约新体验 在这个快节奏的时代&#xff0c;我们深知每一位瑜伽爱好者、普拉提追随者以及培训机构管理者对高效、便捷服务的迫切需求。因此&#xff0c;我们匠心独运&#xff0c;推出了一款基于PHPUniApp框架开发的…

docker-rss:容器更新的RSS订阅源

简介 什么是 docker-rss &#xff1f; docker-rss 是一个用 Go 语言编写的服务器&#xff0c;能通过 RSS Feed 通知 Docker 镜像的更新。 主要特点 功能&#xff1a;提供 Docker 镜像更新的 RSS Feed&#xff0c;便于用户跟踪重要软件的更新&#xff0c;特别适合用于个人实验…

WPS中Word表格做好了,忘记写标题了怎么办?

大家好&#xff0c;我是小鱼。 在使用wps制作Word表格时经常会遇到这种情况&#xff0c;就是辛辛苦苦把word表格制作好了&#xff0c;却突然发现忘了为表格添加标题了。怎么都没法为表格重写添加标题&#xff0c;真是一阵操作猛如虎&#xff0c;结果觉得表格真是白做了。其实&…

从零开始:使用PyTorch构建DeepSeek R1模型及其训练详解

本文将引导你使用 PyTorch 从零开始构建 DeepSeek R1 模型&#xff0c;并详细解释模型架构和训练步骤。DeepSeek R1 是一个假设的模型名称&#xff0c;为了演示目的&#xff0c;我们将构建一个基于 Transformer 的简单文本生成模型。 1. 模型架构 DeepSeek R1 的核心是一个基…

【数据结构】第五章:树与二叉树

本篇笔记课程来源&#xff1a;王道计算机考研 数据结构 【数据结构】第五章&#xff1a;树与二叉树 一、树的定义1. 基本概念2. 基本术语3. 常见性质 二、二叉树的定义1. 基本概念2. 特殊二叉树3. 常见性质 三、二叉树的存储结构1. 顺序存储2. 链式存储 四、二叉树的遍历1. 先序…

如何使用深度学习进行手写数字识别(MNIST)

目录 手写数字识别(MNIST)1. 导入必要的库2. 加载和预处理数据3. 构建模型4. 编译模型5. 训练模型6. 评估模型7. 可视化训练过程(可选)代码说明运行环境总结当然可以!下面是一个使用Python和Keras(TensorFlow后端)实现的简单深度学习案例——手写数字识别(MNIST数据集)…

LabVIEW Browser.vi 库说明

browser.llb 库位于C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform目录&#xff0c;它是 LabVIEW 平台下用于与网络浏览器相关操作的重要库。该库为 LabVIEW 开发者提供了一系列工具&#xff0c;用于实现网页浏览控制、网页数据获取与交互等功能&a…