STM32驱动LCD1602

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); //功能设置
}

个人见解,感谢阅读。

你可能感兴趣的:(STM32)