TM1639: 天微8x8数码管驱动芯片,经济高效

需积分: 10 3 下载量 152 浏览量 更新于2024-07-15 收藏 685KB PDF 举报
TM1639是一款由天微电子生产的专为LED驱动和键盘扫描设计的集成电路,它集成了微控制器(MCU)、数据锁存器、LED驱动器以及键盘扫描功能,适用于各种小型家电设备,如智能热水器、微波炉等,可以实现自动扫描显示,显著节省单片机的时间资源。这款芯片采用CMOS工艺,具备8段×8位的显示模式,支持4×2bit的键扫描,能进行辉度调节,提供串行接口包括CLK、STB和DIO。其工作方式为RC振荡,内置上电复位电路,有SOP24和SDIP24两种封装形式。 TM1639的主要特性包括: 1. CMOS工艺:确保了芯片的低功耗和可靠性。 2. 8x8显示模式:支持大规模的字符显示。 3. 键扫描功能:可以有效处理和响应外部按键输入。 4. 辉度调节:通过改变占空比实现不同程度的亮度控制。 5. 串行接口:便于与微控制器和其他外围设备通信。 6. 内置复位电路:保证了系统在上电后的初始状态稳定。 7. 多种封装形式:适应不同应用场合的封装选择。 管脚定义部分详细列出了各个引脚的功能,例如DIO用于数据的输入输出,CLK作为时钟信号,STB作为片选信号,而K0和K1作为键扫描输入,SGE1/KS1至SEG4/KS4则同时作为输出段驱动和键扫描信号。GRID1到GRID8是位输出,而SEG9至SEG12是额外的段输出,这些引脚都采用了N管开漏输出,确保了驱动LED的高效工作。 TM1639是一款性价比高的LED驱动控制芯片,其丰富的功能和良好的兼容性使其成为构建小型家电和电子设备中数字显示模块的理想选择。对于电子工程师和DIY爱好者来说,理解并熟练运用这款芯片,能极大提升产品的设计效率和性能。

#include "main.h" #include "stdio.h" #include "string.h" #include "time.h" UART_HandleTypeDef huart1; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_USART1_UART_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); while (1) { time_t now = time(NULL); struct tm *timeinfo = localtime(&now); char time_str[9]; sprintf(time_str, "%02d:%02d:%02d", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); HAL_UART_Transmit(&huart1, (uint8_t *)time_str, strlen(time_str), HAL_MAX_DELAY); HAL_Delay(1000); } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } static void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOA_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET); /*Configure GPIO pin : PA9 */ GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } 在以上代码的基础上,编写代码以实现计算发送 hh:mm:ss到单片机,修改单片机时间

2023-05-30 上传