液晶模块LCD1602+PCF8574P在ESP8266 (RTOS3.2)上调试的驱动

本文介绍了如何在ESP8266(RTOS3.2)上利用PCF8574P模块驱动LCD1602液晶显示模块,通过I2C接口实现控制,减少了GPIO口的占用。文中还提到了硬件电平转换的方法以及软件部分的代码结构,包括my_iic和lcd1602_pcf8574的相关头文件和源文件。
摘要由CSDN通过智能技术生成

液晶模块LCD1602+PCF8574P在ESP8266 (RTOS3.2)上调试的驱动

模块简介

直接用lcd1602的话,至少占用8个gpio口,所以用的PCF8574P模块,只需要用I2C控制即可;

硬件原理图

手边只有一个5v的LCD1602,VDDIO口也要5V,我在处理I2C5v和3v的VDDIO电平连接时,使用n-mos管,稍微稳定一些,当然也可以上专门的电平互转IC;
在这里插入图片描述
在这里插入图片描述  在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

软件部分

  • main.c
    • lcd1602_pcf8574.h
    • lcd1602_pcf8574.c
      • my_iic.h
      • my_iic.c
  1. main.c部分:
/* main
   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "esp_log.h"
#include "esp_system.h"
#include "esp_err.h"

#include "driver/i2c.h"
#include "lcd1602_pcf8574.h"


void app_main(void)
{
   
   char str1[41] = "Show text..";

   	i2c_master_init();
   	clear();
    lcd_init_chip(I2C_EXAMPLE_MASTER_NUM);
    isBacklight(1); //open Backlight
    LCD_Write_String(0,0,str1);//从第一行第一个位置开始显示
	i2c_driver_delete(I2C_EXAMPLE_MASTER_NUM);
}
  1. lcd1602_pcf8574.h:
/* lcd1602+pcf8574 display model

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "esp_system.h"
#include "esp_err.h"

#include "my_iic.h"



#include "my_iic.h"

/*
pcf8574 | lcd1602
  p0    ->  RS
  p1    ->  RW
  p2    ->  CS
  p3    ->  LED-K by PNP
  p4    ->  P4
  p5    ->  P5
  p6    ->  P6
  p7    ->  P7
  VDD   ->  LED-A
*/

#define Rs 0x1  // Register select bit
#define Rw 0x2  // Read/Write bit
#define En 0x4  // Enable bit

// flags for backlight control
#define LCD_BACKLIGHT 0x01<<3
#define LCD_NOBACKLIGHT 0x00

// flags for function set
#define LCD_8BITMODE 0x10
#define LCD_4BITMODE 0x00
#define LCD_2LINE 0x08
#define LCD_1LINE 0x00
#define LCD_5x10DOTS 0x04
#define LCD_5x8DOTS 0x00

// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04
#define LCD_DISPLAYCONTROL 0x08
#define LCD_CURSORSHIFT 0x10
#define LCD_FUNCTIONSET 0x20
#define LCD_SETCGRAMADDR 0x40
#define LCD_SETDDRAMADDR 0x80

// flags for display on/off control
#define LCD_DISPLAYON 0x04
#define LCD_DISPLAYOFF 0x00
#define LCD_CURSORON 0x02
#define LCD_CURSOROFF 0x00
#define LCD_BLINKON 0x01
#define LCD_BLINKOFF 0x00

// flags for display/cursor shift
#define LCD_DISPLAYMOVE 0x08
#define LCD_CURSORMOVE 0x00
#define LCD_MOVERIGHT 0x04
#define LCD_MOVELEFT 0x00

// flags for display entry mode
#define 
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值