LCD1602引脚介绍及STM32单片机驱动LCD1602程序

发布者:TechGuru123最新更新时间:2024-06-13 来源: elecfans关键字:LCD1602  引脚介绍  STM32  单片机驱动 手机看文章 扫描二维码
随时随地手机看文章

  LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。

  LCD1602特性:

  3.3V或5V工作电压,对比度可调


  内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能

  有80字节显示数据存储器DDRAM

  内建有192个5X7点阵的字型的字符发生器CGROM

  8个可由用户自定义的5X7的字符发生器CGRAM

  LCD1602引脚功能:

  字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:

LCD1602引脚介绍及STM32单片机驱动LCD1602程序

  STM32单片机驱动LCD1602程序:

  #ifndef _LCD1602_H

  #define _LCD1602_H

  #include “LCD1602.H”

  //============================端口位清除寄存器==============================================//

  #define LCD1602_RS0 GPIOE-》BRR = 0x00000004 //低电平 PE.2

  #define LCD1602_RW0 GPIOE-》BRR = 0x00000010 //低电平 PE.4

  #define LCD1602_EN0 GPIOE-》BRR = 0x00000040 //低电平 PE.6

  //============================端口位设置/清除寄存器=========================================//

  #define LCD1602_RS1 GPIOE-》BSRR = 0x00000004 //高电平 PE.2

  #define LCD1602_RW1 GPIOE-》BSRR = 0x00000010 //高电平 PE.4

  #define LCD1602_EN1 GPIOE-》BSRR = 0x00000040 //高电平 PE.4

  #define DATA_OUT GPIOD-》ODR//数据端口 PB0-PB7

  //==========================================================================================//

  //单片机系统时钟在72MHZ下的延时

  void Delay_us(unsigned long CountLing)

  {

  signed char i;

  while(CountLing--)

  {

  i = 10;

  while(i--);

  }

  }

  //==========================================================================================//

  //LCD1602液晶读忙状态

  void LCD_FBUF(void)

  {

  LCD1602_RS0; //RS信号拉低

  LCD1602_RW1; //RW信号拉高

  LCD1602_EN1;//EN信号拉高

  DATA_OUT = 0xFF; //数据端口 11111111全高电平

  while((DATA_OUT & 0x80) == 0x80); //判断数据端口PB7 是否一直高

  LCD1602_RW1;//RW信号拉高

  LCD1602_EN0; //EN信号拉低

  }

  //==========================================================================================//

  //LCD1602写指令子函数

  void Write_LCD1602_Instruction_Com(unsigned char Com)

  {

  LCD_FBUF(); //读忙状态

  LCD1602_RS0; //RS信号拉低写指令

  LCD1602_RW0; //RW信号拉低

  LCD1602_EN0; //EN信号拉低

  DATA_OUT = Com; //数据端口指令输入

  Delay_us(340); //延时1ms

  LCD1602_EN1; //EN信号一个高脉冲

  Delay_us(340); //延时1ms

  LCD1602_EN0;

  }

  //==========================================================================================//

  //LCD1602写数据子函数

  void Write_LCD1602_Instruction_Data(unsigned char Date)

  {

  LCD_FBUF(); //读忙状态

  LCD1602_RS1; //RS信号拉高写数据指令

  LCD1602_RW0;

  LCD1602_EN0; //EN信号拉低

  DATA_OUT = Date; //数据端口数据输入

  Delay_us(340); //延时1ms

  LCD1602_EN1; //EN信号一个高脉冲

  Delay_us(340); //延时1ms

  LCD1602_EN0;

  }

  //==========================================================================================//

  //LCD1602写指令和写数据子函数

  void Write_LCD1602_Instruction_Com_Data(unsigned char CountLiey, unsigned char Date)

  {

  if(CountLiey == 0) //CountLiey == 0 写指令

  {

  Write_LCD1602_Instruction_Com(Date); // 写指令

  }

  else //CountLiey !=0 写数据

  {

  Write_LCD1602_Instruction_Data(Date); //不等于0写数据

  }

  }

  //==========================================================================================//

  //LCD1602写指令初始化子函数

  void Init_LCD1602(void)

  {

  Write_LCD1602_Instruction_Com(0x38); //设置16×2显示,5×7点阵,8位数据接口

  Delay_us(6); //延时 200us

  Write_LCD1602_Instruction_Com(0x38); //设置16×2显示,5×7点阵,8位数据接口

  Delay_us(6); //延时 200us

  Write_LCD1602_Instruction_Com(0x0C); //设置打开显示

  Delay_us(6); //延时 200us

  Write_LCD1602_Instruction_Com(0x06); //读或写一个字符后地址指针加1

  Delay_us(6);

  Write_LCD1602_Instruction_Com(0x01); //显示清屏

  Delay_us(6);

  }

  #endif

  //========================================END==================================================//

  #include “stm32f10x_lib.h”

  #include “LCD1602.H”

  //#include “DS18B20.H”

  typedef volatile unsigned char uint8;

  typedef volatile unsigned int uint16;

  typedef volatile unsigned long uint32;

  //==========================================================================================//

  //配置GPIO端口

  void GPIO_InitStructReadtempCmd(void)

  {

  GPIO_InitTypeDef GPIO_InitStruct;

  //GPIOC端口初始化

  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_4 | GPIO_Pin_6; // LCD1602 RS-RW-EN脚

  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出

  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //输出速率50MHZ

  GPIO_Init(GPIOE, &GPIO_InitStruct); //GPIOE端口初始化

  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |//数据脚 PB0-PB7

  GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出

  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //输出速率50MHZ

  GPIO_Init(GPIOD, &GPIO_InitStruct); //GPIOD端口初始化

  }

  //==========================================================================================//

  //配置GPIO外设时钟

  void RCC_APB2PeriphReadtempyCmd(void)

  {

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // 开启GPIOD外设时钟

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); // 开启GPIOE外设时钟

  }

  //==========================================================================================//

  //函数主题

  int main(void)

  {

  RCC_APB2PeriphReadtempyCmd();//外设时钟初始化 //注意外设初始化一定要在GPIO端口配置初始化前面

  GPIO_InitStructReadtempCmd(); //GPIO端口配置初始化

  while(1)

  {

  Write_LCD1602_Instruction_Com_Data(0, 0x80+4); //0是写指令

  Write_LCD1602_Instruction_Com_Data(1, ‘A’ ); //1是写数据

  }

  }


关键字:LCD1602  引脚介绍  STM32  单片机驱动 引用地址:LCD1602引脚介绍及STM32单片机驱动LCD1602程序

上一篇:关于基于STM32系列单片机的DMD投影仪的驱动电路的相关设计
下一篇:在STM32F407板子上搭建TCP服务器及TFTP服务器

推荐阅读最新更新时间:2024-11-11 22:26

STM32开发笔记86:使用printf向串口输出数据
单片机型号:STM32L053R8T6 本文介绍使用printf向串口输出数据的方法,具体如下: 1、根据原理图确认使用哪路串口进行printf输出,并在config.h文件予以声明,程序如下: /** 配置调试信息 */ #define DEBUG_UART 2 //指定调试端口号 2、建立该串口类,从CMiniUART继承,初始化该串口,程序如下: #ifndef UART_COMMUNICATION_H_ #define UART_COMMUNICATION_H_ #include mini_uart.h #ifdef __cplusplus extern C { class CUart
[单片机]
<font color='red'>STM32</font>开发笔记86:使用printf向串口输出数据
STM32 ADC笔记单次转换已测试通过
下面分别为库函数和直接操作寄存器的两个范便,我都已测试通过 使用此程序前必要对GPIO设好为模拟输入方式 =====================================库函数版========================================= void AD_CONFIG_SINGLE(void ) { //先配置IO口: ADC_InitTypeDef adcInitStruct; // //PB1 作为模拟通道输入引脚 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE); //使能ADC和GPIOC时钟 //配置ADC:
[单片机]
如何配置stm32中断的优先级
写作原由:因为之前有对stm32 优先级做过研究,但是没时间把整理的东西发表,最近项目需要2个串口,但是不是两个串口同时使用,只是随机使用其中一个,程序对2个串口的优先级需要配置; 此文思路:“中断优先级”思维导图--》关键要点---》结合图和要点相关程序应用例程讲解; 我们先来看ST公司的一张图: 我自己依据此图理解,应用思维导图画了一张方便理解:(如果看不清可通过ctrl+鼠标滑轮 放大看;) 前提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱):NVIC_PriorityGroup_0》NVIC_PriorityGroup_1》NVIC_PriorityGroup_2》NVIC_PriorityGrou
[单片机]
如何配置<font color='red'>stm32</font>中断的优先级
STM32学习记录之cubemx配置IIC+逻辑分析仪的学习
首先 这里用的开发板是原子的STM32F429,就是通过CUBEMX配置IIC的总线,话不多说,上图 因为原子429的板子的IIC的数据线和时钟线是PH4和PH5,而I2C2的默认并不是这个引脚,大家要根据手上实际的电路图来呀。 这些都是初始化配置,没有需要修改的,就这样默认就好了,至于系统时钟的配置,选用的是外部时钟,只要不超出范围就好了。然后就是生成工程。 下面是主要的程序 #define ADDR_AT24C02_Write 0xA0 #define ADDR_AT24C02_Read 0xA1 uint8_t I2C_Buffer_Write ; uint8_t I2C_Buffer_Read ;
[单片机]
<font color='red'>STM32</font>学习记录之cubemx配置IIC+逻辑分析仪的学习
STM32启动BOOT0 BOOT1设置方法
不同的下载方式对应STM32启动方式也不同,如下图是STM32三种启动方式: ● 第一种启动方式是最常用的用户FLASH启动,正常工作就在这种模式下,STM32的FLASH可以擦出10万次,所以不用担心 芯片 哪天会被擦爆! ● 第二种启动方式是系统存储器启动方式,即我们常说的串口下载方式(ISP),不建议使用这种,速度比较慢。STM32 中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话可以切换BOOT0/1到该模式下重新烧写Flash即可恢复正常。 ● 第三种启动方式是STM32内嵌的SRAM启动。该模式用于调试。 在使用 开发板 时不小心下载了个有问题的程序,然后就悲剧了。无法往芯片中
[单片机]
<font color='red'>STM32</font>启动BOOT0 BOOT1设置方法
stm32定时器(基本定时器)操作寄存器版
定时器本质 定时器的本质:计数器 定时器的构成:时钟源+计数器+重载值 1、stm32的定时器 stm32定时器数量较多、功能比较强;不同的定时器功能有不同。 stm32的定时器进行类型划分。分为三类:①基本定时器;②通用定时器;③高级定时器 基本定时器:用于定时器,还可以用于触发DAC(数模转换器)、ADC(模数转换器)工作。 通用定时器:具备基本定时器所有的功能;捕获输入、比较输出、捕获PWM波、生成PWM波、支持霍尔元件 高级定时器:具备通用定时器所有的功能:支持死区、刹车功能。 STM32F407的基本定时器有TIM6、TIM7. STM32F407的通用定时器有TIM2~TI
[单片机]
<font color='red'>stm32</font>定时器(基本定时器)操作寄存器版
STM32小白入门(第12天)-------I2C协议
一、概述 二、信号概念 三、AT24C02(EEPROM电可擦除ROM)--配合单片机存贮掉电前需要保存的数据,类似单片机的硬盘 1、写时序 2、读时序 思考题2:在24c02控制时钟的时候,为什么要进行5us的延时,小于5us延时或许大于5us的延时是否可以,示例代码如下: //设置SCL高电平 SCL=1; delay_us(5); //设置SCL低电平 SCL=0; delay_us(5); 回答:大于5us是可以的,如果使用5ms是可以的。但是延时是不能低于1.2us,详细描述如下图。 3、起始信号和停止信号 //sda输
[单片机]
<font color='red'>STM32</font>小白入门(第12天)-------I2C协议
STM32-串口超时判断方式接收未知长度数据
usart.c串口中断处理函数: view plain copy void USART1_IRQHandler(void) { u8 res; if(USART1- SR&(1 5))//接收到数据 { res=USART1- DR; if(USART1_Recv_Len USART1_MAX_RECV_LEN) //还可以接收数据 { TIM3- CNT=0; //计数器清空 if(Rec_Over_Flag==0)TIM3_Set(1); //使能定
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved