lcd1602的stm32f103c6的代码.c和.h,以及对应的delay.c和.h,says.c和.h

时间: 2024-03-07 18:50:29 浏览: 17
以下是一个简单的LCD1602的STM32F103C6代码,包括了lcd1602.c和lcd1602.h文件,以及对应的delay.c和delay.h,以及says.c和says.h文件。 lcd1602.h文件: ```c #ifndef __LCD1602_H__ #define __LCD1602_H__ #include "stm32f10x.h" #define LCD1602_GPIO_RCC RCC_APB2Periph_GPIOB //LCD1602所在GPIO的时钟 #define LCD1602_GPIO GPIOB //LCD1602所在GPIO #define LCD1602_E_PIN GPIO_Pin_0 //LCD1602的E引脚 #define LCD1602_RS_PIN GPIO_Pin_1 //LCD1602的RS引脚 #define LCD1602_RW_PIN GPIO_Pin_2 //LCD1602的RW引脚 #define LCD1602_DATA_PINS GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6 //LCD1602的数据引脚 void LCD1602_Init(void); void LCD1602_WriteCmd(uint8_t cmd); void LCD1602_WriteData(uint8_t data); void LCD1602_SetCursor(uint8_t x, uint8_t y); void LCD1602_Clear(void); void LCD1602_DisplayString(char* str); void LCD1602_DisplayNum(uint16_t num); #endif ``` lcd1602.c文件: ```c #include "lcd1602.h" #include "delay.h" //LCD1602初始化函数 void LCD1602_Init(void) { RCC_APB2PeriphClockCmd(LCD1602_GPIO_RCC, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = LCD1602_E_PIN | LCD1602_RS_PIN | LCD1602_RW_PIN | LCD1602_DATA_PINS; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD1602_GPIO, &GPIO_InitStructure); GPIO_WriteBit(LCD1602_GPIO, LCD1602_E_PIN, Bit_RESET); GPIO_WriteBit(LCD1602_GPIO, LCD1602_RS_PIN, Bit_RESET); GPIO_WriteBit(LCD1602_GPIO, LCD1602_RW_PIN, Bit_RESET); LCD1602_WriteCmd(0x38); LCD1602_WriteCmd(0x06); LCD1602_WriteCmd(0x0C); LCD1602_WriteCmd(0x01); } //LCD1602写命令函数 void LCD1602_WriteCmd(uint8_t cmd) { GPIO_WriteBit(LCD1602_GPIO, LCD1602_RS_PIN, Bit_RESET); GPIO_WriteBit(LCD1602_GPIO, LCD1602_RW_PIN, Bit_RESET); GPIO_WriteBit(LCD1602_GPIO, LCD1602_DATA_PINS, (cmd >> 4) & 0x0F); GPIO_WriteBit(LCD1602_GPIO, LCD1602_E_PIN, Bit_SET); Delay_us(1); GPIO_WriteBit(LCD1602_GPIO, LCD1602_E_PIN, Bit_RESET); GPIO_WriteBit(LCD1602_GPIO, LCD1602_DATA_PINS, cmd & 0x0F); GPIO_WriteBit(LCD1602_GPIO, LCD1602_E_PIN, Bit_SET); Delay_us(1); GPIO_WriteBit(LCD1602_GPIO, LCD1602_E_PIN, Bit_RESET); Delay_us(50); } //LCD1602写数据函数 void LCD1602_WriteData(uint8_t data) { GPIO_WriteBit(LCD1602_GPIO, LCD1602_RS_PIN, Bit_SET); GPIO_WriteBit(LCD1602_GPIO, LCD1602_RW_PIN, Bit_RESET); GPIO_WriteBit(LCD1602_GPIO, LCD1602_DATA_PINS, (data >> 4) & 0x0F); GPIO_WriteBit(LCD1602_GPIO, LCD1602_E_PIN, Bit_SET); Delay_us(1); GPIO_WriteBit(LCD1602_GPIO, LCD1602_E_PIN, Bit_RESET); GPIO_WriteBit(LCD1602_GPIO, LCD1602_DATA_PINS, data & 0x0F); GPIO_WriteBit(LCD1602_GPIO, LCD1602_E_PIN, Bit_SET); Delay_us(1); GPIO_WriteBit(LCD1602_GPIO, LCD1602_E_PIN, Bit_RESET); Delay_us(50); } //LCD1602设置光标位置函数 void LCD1602_SetCursor(uint8_t x, uint8_t y) { uint8_t addr = 0; if (y == 0) { addr = 0x00 + x; } else { addr = 0x40 + x; } LCD1602_WriteCmd(0x80 + addr); } //LCD1602清屏函数 void LCD1602_Clear(void) { LCD1602_WriteCmd(0x01); } //LCD1602显示字符串函数 void LCD1602_DisplayString(char* str) { while (*str) { LCD1602_WriteData(*str++); } } //LCD1602显示数字函数 void LCD1602_DisplayNum(uint16_t num) { char str[6]; sprintf(str, "%d", num); LCD1602_DisplayString(str); } ``` delay.h文件: ```c #ifndef __DELAY_H__ #define __DELAY_H__ #include "stm32f10x.h" void Delay_us(uint32_t us); void Delay_ms(uint16_t ms); #endif ``` delay.c文件: ```c #include "delay.h" volatile uint32_t g_Ticks; void SysTick_Handler(void) { g_Ticks++; } void Delay_us(uint32_t us) { uint32_t ticks = us * (SystemCoreClock / 1000000); uint32_t start = g_Ticks; while ((g_Ticks - start) < ticks); } void Delay_ms(uint16_t ms) { while (ms--) { Delay_us(1000); } } ``` says.h文件: ```c #ifndef __SAYS_H__ #define __SAYS_H__ #include "stm32f10x.h" void SaysHello(void); #endif ``` says.c文件: ```c #include "says.h" #include "lcd1602.h" void SaysHello(void) { LCD1602_DisplayString("Hello, World!"); } ```

相关推荐

最新推荐

recommend-type

STM32F103RET6TR中文数据手册.pdf

STM32F103RET6TR中文数据手册,同样适用于STM32F103RE 、 STM32F103ZE 、 STM32F103VE、STM32F103RD、 STM32F103VD、 STM32F103ZD、STM32F103RC、 STM32F103VC、 STM32F103ZC
recommend-type

STM32工程在keil下怎么移植到IAR环境(stm32f103c8).docx

往FWLIB添加文件:"stm32f10x_gpio.c" "stm32f10x_rcc.c" "stm32f10x_spi.c" "stm32f10x_usart.c",(这里是因为工程中使用到了一部分的外围,所以需要自己根据工程需求添加) c.往USER中添加: "stm32f10x_it.c" ...
recommend-type

STM32F103 传感器SPI通讯.doc

STM32F103 传感器SPI通讯。文档对bmp280进行数据读取,通讯方式为SPI,内有spi内容介绍及主要函数说明。
recommend-type

STM32F103做主控自制无刷电机(BLDC)控制器 有感/无感.docx

STM32F103做主控自制无刷电机(BLDC)控制器 有感/无感 先说有感,电源首先被分成了3个绕组U V W这个交流电还是有区别的。 它只是3个h桥按一定的顺序导通模拟出来的,本质还是直流电。 电机靠hall位置按一定顺序换...
recommend-type

STM32F103VCT6开发板使用说明.pdf

STM32F103VCT6开发板使用说明,适合stm32单片机新手入门学习,内容丰富,简单易操作,便于学习参考
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。