IO接线:
RS PA8
RW PB6
E PB7
LCD1602_IO PB8-PB15
所有的口都配置成开漏输出,并且所有的口都通过10k电阻上拉至5V,部分电路图如下:

程序代码
LCD1602.C

#include"lcd1602.h"
void LCD1602_GPIO_Init_Out()//LCD1602端口初始化,配置为输出
{GPIO_InitTypeDef GPIO_InitStructrue;RCC_APB2PeriphClockCmd(LCD1602_Timer_GPIOA | LCD1602_Timer_GPIOB, ENABLE);//使能端口时钟GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_Out_OD;//开漏输出GPIO_InitStructrue.GPIO_Pin = LCD1602_RS; GPIO_InitStructrue.GPIO_Speed = GPIO_Speed_10MHz;//低速输出GPIO_Init(LCD1602_GPIOA, &GPIO_InitStructrue);//初始化GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_Out_OD;//开漏输出GPIO_InitStructrue.GPIO_Pin = LCD1602_RW |  LCD1602_E | LCD1602_IO ; GPIO_InitStructrue.GPIO_Speed = GPIO_Speed_10MHz;// 低速输出GPIO_Init(LCD1602_GPIOB, &GPIO_InitStructrue);//初始化
}void LCD1602_GPIO_Init_Inupt()//LCD1602端口初始化,配置为输入
{GPIO_InitTypeDef GPIO_InitStructrue;RCC_APB2PeriphClockCmd(LCD1602_Timer_GPIOB, ENABLE);//使能端口时钟GPIO_InitStructrue.GPIO_Mode =  GPIO_Mode_IN_FLOATING;//浮空输入GPIO_InitStructrue.GPIO_Pin =  GPIO_Pin_15; GPIO_Init(LCD1602_GPIOB, &GPIO_InitStructrue);//初始化
}void LCD1602_WaitReady(void)//用于LCD忙检测
{u8 sta = 0;LCD1602_GPIO_Init_Out();//LCD1602端口初始化,配置为输出GPIOB->ODR =0xff00;LCD1602_RS_RESET();LCD1602_RW_SET();//读状态LCD1602_GPIO_Init_Inupt();//LCD1602端口初始化,配置为输入do{LCD1602_E_SET();sta = GPIO_ReadInputDataBit(LCD1602_GPIOB, GPIO_Pin_15);LCD1602_E_RESET();}while(sta);LCD1602_GPIO_Init_Out();//LCD1602端口初始化,配置为输出
}void LCD1602_WriteCmd(u16 cmd)//用于写指令
{LCD1602_WaitReady();//等待液晶准备好LCD1602_RS_RESET();LCD1602_RW_RESET();//写指令GPIOB->ODR &=((cmd<< 8)|0x0000);LCD1602_E_SET();LCD1602_E_RESET();//高脉冲}void LCD1602_WriteDate(u16 date)//用于写数据
{LCD1602_WaitReady();//等待液晶准备好LCD1602_RS_SET();LCD1602_RW_RESET();//写数据GPIOB->ODR &=((date << 8)|0x0000);LCD1602_E_SET();LCD1602_E_RESET();//高脉冲
}void LCD1620_SetAddress(unsigned char x,unsigned char y)
{if(y == 0)LCD1602_WriteCmd(0x80 | x);//从第一行开始显示else LCD1602_WriteCmd(0x80 | 0x40 | x);//从第二行开始显示
}void LCD1602_ShowStr(unsigned char x,unsigned char y,unsigned char *str)//LCD1602显示字符串
{LCD1620_SetAddress(x,y);//设置数据地址指针while(*str != '\0')LCD1602_WriteDate(*str++);//写数据
}void LCD1602_ShowChar(unsigned char x,unsigned char y,unsigned char date)//LCD1602显示字符
{LCD1620_SetAddress(x,y);//设置数据地址指针LCD1602_WriteDate(date);//写数据
}void LCD1602_ShowNum(unsigned char x,unsigned char y,unsigned char *str,unsigned char i)//LCD1602显示数字
{LCD1620_SetAddress(x,y);//设置数据地址指针str = str+ i;LCD1602_WriteDate(*str);//写数据
}void LCD1602_Init(void)//液晶初始化函数
{LCD1602_GPIO_Init_Out();LCD1602_WriteCmd(0x38);//设置16*2显示,5*7点阵,8位数据接口LCD1602_WriteCmd(0x0c);//开显示,显示光标,光标不闪烁LCD1602_WriteCmd(0x06);//光标加1,屏幕显示不移动LCD1602_WriteCmd(0x01);//清屏
}

LCD1602.h

#ifndef __LCD1602_H
#define __LCD1602_H#include"sys.h"
#include"stm32f10x.h"#define  LCD1602_Timer_GPIOA RCC_APB2Periph_GPIOA
#define  LCD1602_Timer_GPIOB RCC_APB2Periph_GPIOB
#define  LCD1602_GPIOA GPIOA
#define  LCD1602_GPIOB GPIOB
#define  LCD1602_RS   GPIO_Pin_8
#define  LCD1602_RW   GPIO_Pin_6
#define  LCD1602_E    GPIO_Pin_7
#define  LCD1602_IO   GPIO_Pin_8 |  GPIO_Pin_9 |  GPIO_Pin_10 |  GPIO_Pin_11 |  GPIO_Pin_12 |  GPIO_Pin_13 |  GPIO_Pin_14 |  GPIO_Pin_15#define  LCD1602_I0_SET() GPIO_SetBits(GPIOB, LCD1602_IO)#define  LCD1602_RS_SET()   GPIO_SetBits(GPIOA,LCD1602_RS)
#define  LCD1602_RS_RESET() GPIO_ResetBits(GPIOA,LCD1602_RS)#define  LCD1602_RW_SET()   GPIO_SetBits(GPIOB,LCD1602_RW)
#define  LCD1602_RW_RESET() GPIO_ResetBits(GPIOB,LCD1602_RW)#define  LCD1602_E_SET()   GPIO_SetBits(GPIOB,LCD1602_E)
#define  LCD1602_E_RESET() GPIO_ResetBits(GPIOB,LCD1602_E)void LCD1602_Init(void);//液晶初始化函数
void LCD1602_ShowNum(unsigned char x,unsigned char y,unsigned char *str,unsigned char i);//LCD1602显示数字
void LCD1602_ShowStr(unsigned char x,unsigned char y,unsigned char *str);//LCD1602显示字符串#endif

程序移植时,只需要改.h文件程序,以及.c文件中的

sta = GPIO_ReadInputDataBit(LCD1602_GPIOB, GPIO_Pin_15);
GPIOB->ODR &=((cmd<< 8)|0x0000);
GPIOB->ODR &=((date << 8)|0x0000);

将其配置成你所需要的管脚即可。

STM32驱动LCD1602程序(调试已成功)相关推荐

  1. 显卡服务器已停止响应,显卡驱动停止响应并已成功恢复问题,找到根本原因,彻底解决!...

    原标题:显卡驱动停止响应并已成功恢复问题,找到根本原因,彻底解决! 大家玩电脑的时候,应该都遇到过一种情况,那就是电脑突然黑屏3-4秒(特别是看电影或者玩一些3D游戏的时候),然后又自动恢复.开始没在 ...

  2. OV7670 STM32驱动 YUYV格式调试总结

    前言 单片机只有能够看见世界,才能真正的走向智能化,所以,用单片机驱动摄像头很有必要.而在摄像头当中,OV7670是比较经典的一款. 硬件准备 1 .STM32开发板: 2. OV7670模块: OV ...

  3. stm32cubeide驱动LCD1602显示屏

    STM32驱动LCD1602 硬件连接关系 STM32CUBEIDE设置 代码 项目设置 最后运行 硬件连接关系 LCD1602 STM32 VCC VCC GND GND VO VCC-滑动变阻 R ...

  4. 显卡服务器已停止响应,电脑提示显卡驱动已停止响应并且已成功恢复该怎么解决?...

    "显卡驱动已停止响应,并且已成功恢复"这种问题就本人来说是因为显卡配置出现问题,比如我使用的3D图形软件MAYA2015对显卡要求比较高,我使用默认配置没有配置正确.所以说,显卡的 ...

  5. 使用USB转TTL串口板和ST-LINK调试下载器给STM32单片机下载程序

    使用USB转TTL串口板和ST-LINK调试下载器给STM32单片机下载程序 简介 STM32的启动模式 JTAG和SWD接口引脚对比 驱动安装 使用官方STM32 ST-LINK Utility软件 ...

  6. 成功解决基于VS2015(Visual Studio2015)编写C++程序调试时弹出窗口一闪而过的问题

    成功解决基于VS2015(Visual Studio2015)编写C++程序调试时弹出窗口一闪而过的问题 目录 解决问题 解决方法 T1.修改配置属性的控制台

  7. 已成功与服务器建立连接,但是在登录过程中发生错误。(provider:TCP提供程序,error:0-指定的网络名不再可用。)(Microsoft SQL Server,错误:64)

    问题的发生:今天处于公网的测试服务器数据库SQL SERVER 2008 在连接时突然报错: 已成功与服务器建立连接,但是在登录过程中发生错误.(provider:TCP提供程序,error:0-指定 ...

  8. 成功解决无法安装64位版本的office,因为在您的PC上找到了以下32位程序,已有32位版本

    成功解决无法安装64位版本的office,因为在您的PC上找到了以下32位程序,已有32位版本 目录 解决问题 解决思路 解决问题 无法安装64位版本的office,因为在您的PC上找到了以下32位程 ...

  9. 微信小程序支付(已调试通过)

    微信小程序支付(已调试通过) 1.安装证书 解压后找到apiclient_cert.p12 双击apiclient_cert.p12 ,输入密钥. 不知道密钥的话,可以尝试输入商户号 2.支付调试中出 ...

  10. 微信小程序调试模式请求失败,真机模式、调试带控制台模式却都成功

    微信小程序预览模式和真机调试模式和带控制台信息的预览模式 微信小程序的双缝干涉问题 微信小程序的双缝干涉问题 最近在项目中碰到了一个BUG. 测试时候发现真机调试和预览模式中居然不一样,这种情况其实也 ...

最新文章

  1. Linux下C语言线程池的实现(1)
  2. ssh免密码登录的原理
  3. Hadoop “Unable to load native-hadoop library for y
  4. 前缀函数及kmp算法
  5. STM32启动BOOT0 BOOT1设置方法 [
  6. 剑桥大学申请start up签证的有用的网站
  7. Zookeeper的典型应用场景(1)
  8. ios 蓝牙命令发送_实战恢复cisco 2950交换机的IOS
  9. day20 Python 高阶函数,函数,嵌套,闭包 装饰器
  10. Commons Configuration2 - Quick start guide
  11. 详解Python中re.sub
  12. python学习——格拉布斯准则实现
  13. mysql的update怎么恢复_mysql误update数据恢复
  14. OpenCV C++案例实战二十三《网孔检测》
  15. 男孩子不上学了学计算机要学历吗,十三岁男孩不上学,能学什么手艺?
  16. 【经验总结】CS与MSF之间的会话传递
  17. 在支付宝中开通信用卡快捷支付
  18. imagebutton图片缩放
  19. guided filter matlab,导向滤波器(Guided Filter)
  20. 数学规划模型(三):整数规划模型

热门文章

  1. U盘硬盘等修复、维护、修理工具集合
  2. Cesium:加载OSGB倾斜摄影三维模型
  3. 如何共享扫描仪-Netscan
  4. 国产分布式ETL调度管理工具 TASKCTL 8.0 核心/代理节点部署
  5. STM32F4 使用 JFlash 加密后无法再擦除了
  6. Axure团队项目之Axure share与 SVN
  7. Linux命令大全(超详细版)
  8. layer使用心得3
  9. 远程桌面管理工具Remote Desktop Connection Manager
  10. FFmpeg合并多个ts视频文件