1602液晶显示时钟课程设计与51单片机源码

版权申诉
0 下载量 19 浏览量 更新于2024-11-26 收藏 13KB ZIP 举报
资源摘要信息:"该压缩包内包含了关于51单片机的液晶显示时钟课程设计的源码软件。具体来说,这份材料主要涉及单片机的编程与应用,以及如何通过51单片机控制18.1602液晶显示屏来制作一个数字时钟。本课程设计旨在通过实践活动让学生深入理解单片机的工作原理以及嵌入式硬件的开发流程。" 知识点详细说明: 1. 单片机基础知识: 单片机是集成电路芯片的一种,它将一个完整的计算机系统集成在一块芯片上。其中,51单片机是一种经典的8位微控制器,它具备处理信息的能力,如计算、控制输入输出、存储数据等。51单片机因其简单、稳定、成本低廉而广泛应用于教学和产品开发中。 2. 18.1602液晶显示模块: 1602液晶显示模块是一种字符型LCD,通常用来显示数字、字符和简单的图形。它具有16个字符宽度和2行的显示能力。18.1602液晶显示模块通常指的是字符高度为18像素的模块。这类显示屏因为接口简单、易于控制而成为单片机项目中常用的显示部件。 3. 数字时钟原理: 数字时钟是一种显示时间的电子设备,它可以使用各种技术来实现。在单片机项目中,数字时钟通常会涉及到计时器/计数器、中断、定时器等概念,这些都是单片机编程中必备的模块。本项目通过编程实现时钟功能,能够对时间进行显示、计时和校准。 4. 嵌入式硬件开发: 嵌入式硬件开发指的是针对特定的应用设计和编程,用于控制一个或多个电子设备的硬件系统。这类开发通常涉及硬件电路设计和软件编程两个方面。在本课程设计中,需要学生设计一个电路,连接51单片机和1602液晶显示屏,并通过编程使显示屏能够显示时间。 5. 单片机程序源码: 程序源码是指用于单片机的编程代码,通常是用C语言或汇编语言编写。在该课程设计中,源码文件包含了实现数字时钟功能的所有代码,以及如何控制1602液晶显示屏显示时间的相关代码。这些源码文件是学习和理解嵌入式系统开发过程的重要参考。 6. 课程设计要求: 课程设计是教学过程中的一个重要环节,它要求学生将理论知识与实践相结合,通过完成一个具体项目来加深对课程内容的理解。在这个设计中,学生需要理解51单片机的编程方法,学会使用C语言编写程序,并且能够对液晶显示屏进行控制,实现一个具备计时功能的数字时钟。 7. 文件压缩包内容说明: 从提供的压缩包文件名称“1602液晶显示一个时钟.rar”可以推测,压缩包中包含了与项目相关的所有文件。这可能包括项目文档、电路原理图、程序源码文件(.c和.h文件)、编译后的程序(.hex文件)、参考资料、以及可能的用户手册或项目报告。这些文件共同构成了一个完整的数字时钟设计项目。 总结: 18.1602液晶显示时钟项目的开发不仅涉及到51单片机的编程技术,还包括了硬件电路设计、时间算法的实现以及液晶显示控制等方面的知识。通过这样的课程设计,学生可以全面学习嵌入式系统的开发流程,从理论学习到实践操作,为未来从事嵌入式系统的设计与开发打下坚实的基础。

/** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0};//定义结构体变量RCC_OscInitStruct RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};//定义结构体变量RCC_ClkInitStruct RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};//定义结构体变量PeriphClkInit /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV2; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.LSIState = RCC_LSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12; 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_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(); } PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { Error_Handler(); } }

2023-07-15 上传

#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 上传