STM32
直播中

刘慧

7年用户 1604经验值
私信 关注
[问答]

怎样用STM32去驱动LCD1602呢

怎样用STM32去驱动LCD1602呢?其程序代码该怎样去编写呢?

回帖(1)

张志强

2021-10-22 15:50:25
  STM32驱动LCD1602,不是很难,主要注意GPIO_Write(GPIOD,(GPIO_ReadOutputData(GPIOD) & 0xff00) | cmd);对电平的读取是整个驱动的核心,其他均与51驱动一致。
  lcd.h文件
  #ifndef __LCD_H__
  #define __LCD_H__
  #include “stm32f10x.h”
  #define LED0 PBout(5)
  #define LED1 PEout(5)
  #define RS PDout(9)
  #define RW PDout(10)
  #define EN PDout(11)
  void LCD_init(void);
  void Wcmd(u8 cmd);
  void Wdat(u8 dat);
  #endif
  lcd.c文件
  #include “sys.h”
  #include “LCD.h”
  #include “delay.h”
  //发送命令
  void Wcmd(u8 cmd)
  {
  RS = 0;
  RW = 0;
  EN = 1;
  GPIO_Write(GPIOD,(GPIO_ReadOutputData(GPIOD) & 0xff00) | cmd);
  delay_ms(2);
  EN = 0;
  }
  //发送数据
  void Wdat(u8 dat)
  {
  RS = 1;
  RW = 0;
  EN = 1;
  GPIO_Write(GPIOD,(GPIO_ReadOutputData(GPIOD) & 0xff00) | dat);
  delay_ms(2);
  EN = 0;
  }
  //
  void LCD_init()
  {
  GPIO_InitTypeDef GPIO_Initlcd;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//
  GPIO_Initlcd.GPIO_Mode=GPIO_Mode_Out_PP; //设置工作模式
  GPIO_Initlcd.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_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; //选定引脚
  GPIO_Initlcd.GPIO_Speed=GPIO_Speed_50MHz; //选择工作频率
  GPIO_Init(GPIOD,&GPIO_Initlcd); //控制寄存器写入
  GPIO_Initlcd.GPIO_Mode=GPIO_Mode_Out_PP; //设置工作模式
  GPIO_Initlcd.GPIO_Pin=GPIO_Pin_5; //选定引脚
  GPIO_Initlcd.GPIO_Speed=GPIO_Speed_50MHz; //选择工作频率
  GPIO_Init(GPIOB,&GPIO_Initlcd);
  GPIO_Initlcd.GPIO_Mode=GPIO_Mode_Out_PP; //设置工作模式
  GPIO_Initlcd.GPIO_Pin=GPIO_Pin_5; //选定引脚
  GPIO_Initlcd.GPIO_Speed=GPIO_Speed_50MHz; //选择工作频率
  GPIO_Init(GPIOE,&GPIO_Initlcd);
  Wcmd(0x01); //清屏
  Wcmd(0x02); //光标归位
  Wcmd(0x06); //设置输入模式
  Wcmd(0x0C); //显示设置
  Wcmd(0x38); //功能设置
  }
  个人见解,感谢阅读。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分