stm32 LCD1602 标准库例程

lcd1602.c

#include "lcd1602.h"
#include "delay.h"
#include <stdio.h>void GPIO_Configuration(void)
{GPIO_InitTypeDef   GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF | RCC_AHB1Periph_GPIOE| RCC_AHB1Periph_GPIOG,ENABLE);//使能PB,PD端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOE, &GPIO_InitStructure);             //初始化GPIOD0~7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //IO口速度为50MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOF, &GPIO_InitStructure);                //初始化GPIB15,14,13GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOG, &GPIO_InitStructure);                //初始化GPIB15,14,13
}/* 等待液晶准备好 */
void LCD1602_Wait_Ready(void)
{u8 sta;DATAOUT(0xff);LCD_RS_Clr();LCD_RW_Set();do{LCD_EN_Set();delay_ms(5);    //延时5ms,非常重要
//      sta = GPIO_ReadInputData(GPIOF);//读取状态字sta =GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_7);LCD_EN_Clr();}while(sta & 0x80);//bit7等于1表示液晶正忙,重复检测直到其等于0为止
}/* 向LCD1602液晶写入一字节命令,cmd-待写入命令值 */
void LCD1602_Write_Cmd(u8 cmd)
{LCD1602_Wait_Ready();delay_ms(1);LCD_RS_Clr();delay_ms(1);LCD_RW_Clr();delay_ms(1);DATAOUT(cmd);delay_ms(1);LCD_EN_Set();delay_ms(1);LCD_EN_Clr();delay_ms(1);//printf("%d",cmd);
}/* 向LCD1602液晶写入一字节数据,dat-待写入数据值 */
void LCD1602_Write_Dat(u8 dat)
{LCD1602_Wait_Ready();delay_ms(1);LCD_RS_Set();delay_ms(1);LCD_RW_Clr();delay_ms(1);DATAOUT(dat);delay_ms(1);LCD_EN_Set();delay_ms(1);LCD_EN_Clr();delay_ms(1);
}/* 清屏 */
void LCD1602_ClearScreen(void)
{LCD1602_Write_Cmd(0x01);
}/* 设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */
void LCD1602_Set_Cursor(u8 x, u8 y)
{u8 addr;if (y == 0)addr = 0x00 + x;elseaddr = 0x40 + x;LCD1602_Write_Cmd(addr | 0x80);
}/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */
void LCD1602_Show_Str(u8 x, u8 y, u8 *str)
{LCD1602_Set_Cursor(x, y);while(*str != '\0'){LCD1602_Write_Dat(*str++);}
}/* 初始化1602液晶 */
void LCD1602_Init(void)
{GPIO_Configuration();LCD1602_Write_Cmd(0x38);  //16*2显示,5*7点阵,8位数据口LCD1602_Write_Cmd(0x0c);  //开显示,光标关闭LCD1602_Write_Cmd(0x06);   //文字不动,地址自动+1LCD1602_Write_Cmd(0x01);   //清屏//    LCD1602_Write_Cmd(0X02);
//    LCD1602_Write_Cmd(0X06);
//  LCD1602_Write_Cmd(0X00);
//  LCD1602_Write_Cmd(0X0C); // LCD1602_Write_Cmd(0X38);
//  LCD1602_Write_Cmd(0x01);               }

lcd1602.h

#ifndef __LCD1602_H
#define __LCD1602_H
#include "sys.h"//1602液晶指令/数据选择引脚
#define LCD_RS_Set()    GPIO_SetBits(GPIOF, GPIO_Pin_0)
#define LCD_RS_Clr()    GPIO_ResetBits(GPIOF, GPIO_Pin_0)//1602液晶读写引脚
#define LCD_RW_Set()    GPIO_SetBits(GPIOF, GPIO_Pin_1)
#define LCD_RW_Clr()    GPIO_ResetBits(GPIOF, GPIO_Pin_1)//1602液晶使能引脚
#define LCD_EN_Set()    GPIO_SetBits(GPIOG, GPIO_Pin_15)
#define LCD_EN_Clr()    GPIO_ResetBits(GPIOG, GPIO_Pin_15)//1602液晶数据端口  PD0~7
#define DATAOUT(x)  GPIO_Write(GPIOE, x)void GPIO_Configuration(void);
void LCD1602_Wait_Ready(void);
void LCD1602_Write_Cmd(u8 cmd);
void LCD1602_Write_Dat(u8 dat);
void LCD1602_ClearScreen(void);
void LCD1602_Set_Cursor(u8 x, u8 y);
void LCD1602_Show_Str(u8 x, u8 y, u8 *str);
void LCD1602_Init(void);#endif

stm32 控制 lcd1602相关推荐

  1. STM32通过(软/硬IIC)控制LCD1602液晶显示屏(IIC转8位并口的PCF8574转接板的使用)原创

    STM32通过(软/硬IIC)控制LCD1602液晶显示屏(IIC转8位并口的PCF8574转接板的使用)原创 A0,A1,A2全部悬空,那么PCF8574的IIC地址为0x4e.(具体原因,看PCF ...

  2. Ardino基础教程 21_最简单最快控制LCD1602

    实验二十一:最简单最快控制LCD1602 实验接线图 下面个摇杆模块,不用接先不忙管. #include <LiquidCrystal.h> LiquidCrystal lcd(12, 1 ...

  3. MPU6050工作原理及STM32控制MPU6050

    一·简介: 1.要想知道MPU6050工作原理,得先了解下面俩个传感器: ①陀螺仪传感器: 陀螺仪的原理就是,一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的.人们根据这个道理,用它来保持 ...

  4. STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序

    STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序 一.ULN2003驱动器 1.工作原理 2.步距角以及一圈所需步数的计算 二.硬件连接 三.STM32F103定时器中断 ...

  5. 物联网开发笔记(25)- 使用Micropython开发ESP32开发板之控制LCD1602显示屏

    这一节我们讲解了如何控制LCD1602显示屏,显示两行字. 一.目的 使用MicroPython开发ESP32开发板控制LCD1602显示屏 二.环境 ESP32 + LCD1602显示屏 + Tho ...

  6. mysql gprs 程序_基于STM32控制的GPS定位与GPRS发送数据(程序源码)

    一个用STM32控制的GPS与GPRS程序,GPS使用ublox的GPS,GPRS使用SIM800E,主要实现每隔几分钟(间隔时间由服务器设定,默认5分钟)将模块的定位结果数据发送到服务器中,服务器返 ...

  7. 51单片机控制LCD1602模块

    51单片机控制LCD1602模块 视频播放:LCD1602视频 (1)LCD1602概述 先来看看LCD1602什么意思?Liquid Crystal Display(LCD)表示液晶显示,1602 ...

  8. STM32控制HC-05蓝牙模块进行通信

    一.HC-05蓝牙模块 1. 简介 HC-05主从一体蓝牙串口模块采用英国CSR公司BlueCore4系列的芯片,符合符合蓝牙2.0+EDR规范,可以同带同种蓝牙功能的电脑.蓝牙主机和手机等智能终端配 ...

  9. HC-05蓝牙模块与STM32控制led灯亮详解

    HC-05蓝牙模块与STM32控制led灯亮 一.HC-05蓝牙模块解析 1.简介 2.HC-05原理 3.HC-05实物图 二.使用AT指令进行配置 1.进入命令响应工作模式 2.配置串口 3.进行 ...

最新文章

  1. 从python开始学编程vamei_从python开始学编程-vamei(1)
  2. fabric 简单理解
  3. Linkis1.0下载地址
  4. postsharp初体验
  5. 『设计模式』开发设计的七大原则,我做人还是挺有原则,那些代码呢?
  6. Android APK系列4-------Android编译APK后的系统结构
  7. 为了有利于保护安全性,IE已限制此网页运行可以访问计算机的脚本或 ActiveX 控件。请单击这里获取选项......
  8. 盘点俄罗斯大神写的几款软件,你用过几个?最后1个是我的童年
  9. 【语料库】语料库资源汇总
  10. Mac删除声音输出设备
  11. php怎么看回调的异步通知的数据_paypal支付,异步回调(php)
  12. 集成学习方法及思想总结
  13. Win10下的外接显示器不能识别的解决方法
  14. niushop分销版开源商城旗舰版v3.7商城源码旗舰版PJ版
  15. 属于程序员的“高考”考题,我估计没准还有很多人没有看过(建议不要收藏)
  16. 劝说语合理使用计算机,用一句名言来劝说家长让孩子接触计算机
  17. iar stm32_STM32强大的生态,在这里一起总结!
  18. scikit-video读写视频
  19. 【心理咨询师考试笔记】操作技能(三)——咨询基本技能
  20. python中列表概念_详解python列表

热门文章

  1. 2019年才准备考一级消防工程师有用吗_好文推荐
  2. netsh命令的详解
  3. 2022年G2电站锅炉司炉理论题库及在线模拟考试
  4. 无线距离测试软件,无线传输距离测试
  5. 14款奔驰R400升级ACC自适应巡航系统,解放您双脚
  6. 2017计算机硬件知识,2017计算机硬件知识参考试题(2)
  7. 征文 | 一个奋斗者的学习之路
  8. Ubuntu16.04利用expect模拟键盘输入实现自动化交互
  9. mysql string 转int mybatis
  10. 拼多多笔试题 回合制游戏