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); //功能设置
}
个人见解,感谢阅读。