stm32F103驱动lcd1602

news/2024/11/19 0:41:59/

接线

GPIOG0-7:D0-D7

RS:GPIOD13

RW:GPIOD14

EN:GPIOD15

程序

lcd.h

#ifndef _lcd_H
#define _lcd_H
#include "stm32f10x.h"
#include "SysTick.h"#define RS GPIO_Pin_13
#define RW GPIO_Pin_14
#define EN GPIO_Pin_15/**RS RW EN拉高*/
#define Set_RS GPIO_SetBits(GPIOD, RS)
#define Set_RW GPIO_SetBits(GPIOD, RW)
#define Set_EN GPIO_SetBits(GPIOD, EN)/**RS RW EN拉低*/
#define	Reset_RS GPIO_ResetBits(GPIOD, RS)
#define	Reset_RW GPIO_ResetBits(GPIOD, RW)
#define	Reset_EN GPIO_ResetBits(GPIOD, EN)#define GPIO0_7 GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7/**GPIOG、GPIOD端口初始化**/
void GPIODG_Init(void);/**lcd写指令函数**/
void Write_Cmd(u16 cmd);/**lcd初始化函数**/
void Lcd_Init(void);/**lcd写数据函数**/
void Write_Data(u16 address, u16 data);#endif

lcd.c

#include "lcd.h"void GPIODG_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG|RCC_APB2Periph_GPIOD,ENABLE); //使能GD管脚时钟GPIO_InitTypeDef GPIO_InitStructure;//定义gpio初始化结构体GPIO_InitStructure.GPIO_Pin = GPIO0_7;//GPIOG0-7对应D0-D7GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//选择输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//选择输出速度GPIO_Init(GPIOG, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = RS|RW|EN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//选择输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//选择输出速度GPIO_Init(GPIOD, &GPIO_InitStructure);
}/**lcd写指令函数,按照写操作时序图编写**/
void Write_Cmd(u16 cmd)
{Reset_RS;Reset_RW;GPIO_Write(GPIOG, cmd);delay_ms(1);Set_EN;//拉高使能端delay_ms(1);Reset_EN;//拉低使能端
}/**lcd初始化函数**/
void Lcd_Init(void)
{Write_Cmd(0x003C);//功能设置delay_ms(1);Write_Cmd(0x0001);//清屏指令delay_ms(1);Write_Cmd(0x0006);//输入模式设置delay_ms(1);Write_Cmd(0x000C);//显示开
}/**lcd写数据函数,按照写操作时序图编写**/
void Write_Data(u16 address, u16 data)
{//地址设置Reset_RS;Reset_RW;//地址第八位为1即D7位为1,所以要加0x0080GPIO_Write(GPIOG, address + 0x0080);delay_ms(1);Set_EN;delay_ms(1);Reset_EN;delay_ms(500);//显示的数据Set_RS;Reset_RW;GPIO_Write(GPIOG, data);delay_ms(1); Set_EN;delay_ms(1);Reset_EN;
}

main.c

#include "stm32f10x.h"
#include "lcd.h"
#include "SysTick.h"//引入延时函数, 用于形成准确的延时int main()
{SysTick_Init(72);GPIODG_Init();Lcd_Init();delay_ms(500);Write_Data(0x0000, 0x0030);//在第一行第一位显示0
}

需要整个工程文件的,看我上传的文件。


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

相关文章

STM32F103-LCD1602驱动

STM32驱动LCD1602,不是很难,主要注意GPIO_Write(GPIOD,(GPIO_ReadOutputData(GPIOD) & 0xff00) | cmd);对电平的读取是整个驱动的核心,其他均与51驱动一致。 lcd.h文件 #ifndef __LCD_H__ #define __LCD_H__ #include "stm3…

stm32f103

配置:PLLCLK 32 参考电路图stlink与正点原子的接口连的时候,注意板子上接口实际正反是反的 蓝牙模块 一 蓝牙的AT指令模式 注意EN要接3.3v/EN什么都不接,长按蓝牙按钮的同时然后再上电. 慢闪是AT模式,快闪是透传模式. 指令集: AT //返回OK ATNAME? //返回蓝牙模块的名字…

【mcuclub】时钟模块DS1302

一、实物图 二、原理图 编号名称功能1VCC2双供电配置中的主电源供应引脚。DS1302工作于 VCC1和VCC2中较大者.当VCC2比VCC1高0.2V 时,VCC2 给 DS1302供电。当VCC1比VCC2高时, VCC1给DS1302供电2X132.768kHz晶振引脚3X24GND电源地5CE使能引脚。输入信号,在…

STM32F103操作DS1302时钟芯片串口显示(标准库和HAL库)

目录 DS1302的性能指标 DS1302的寄存器及片内RAM 标准库实现 HAL库实现 源码链接 单片机型号:STM32F103C8T6 在日常生活中,很多情况下会需要使用时间,单片机中虽然也是有定时器但并不能较为准备的实现计时功能,而且定时计时…

高等数学❤️第一章~第二节~极限❤️极限的概念与性质~函数极限(自变量趋于有限值时的极限)详解

【精讲】高等数学中函数极限:自变量趋于有限值时的极限 博主:命运之光的主页 专栏:高等数学 目录 【精讲】高等数学中函数极限:自变量趋于有限值时的极限 导言 二、函数极限自变量趋于有限值的判定方法 三、函数极限自变量趋于…

【LLM】Langchain使用[三](基于文档的问答)

文章目录 一、基于文档的问答1. 创建向量存储2. 不同类型的chain链 二、本地知识库问答Reference 一、基于文档的问答 1. 创建向量存储 使用Dock Array内存搜索向量存储,作为一个内存向量存储,不需要连接外部数据库创建向量存储:导入一个索…

MySQL8.0 msi 版本安装教程

MySQL8.0 msi 版本安装教程 MySQL8.0 msi 版本安装教程 1> 官网下载安装包 MySQL官网下载地址如下:https://dev.mysql.com/downloads/mysql/ 说明: 如果需要8.0版本下的其他小版本,可以参考下图: 如需5.7及其之前版本&#…

mysql-installer-community.msi新手安装教程(详细图文)

安装 先去官网下载需要的msi,在这放出官网下载地址 这里我具体以5.7.25.msi为安装例子,除了最新版安装界面有些变动以往的都是差不多的。 过去的版本在这里 打开5.7的下载页面,点击图片进入到5.7版本的msi下载页面 第一个是在线安装,安装时需要连接网络 第二个离线,我们…