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