接线
GPIOG0-7:D0-D7
RS:GPIOD13
RW:GPIOD14
EN:GPIOD15
程序
lcd.h
#ifndef _lcd_H
#define _lcd_H
#include "stm32f10x.h"
#include "SysTick.h"#define RS GPIO_Pin_13
#define RW GPIO_Pin_14
#define EN GPIO_Pin_15/**RS RW EN拉高*/
#define Set_RS GPIO_SetBits(GPIOD, RS)
#define Set_RW GPIO_SetBits(GPIOD, RW)
#define Set_EN GPIO_SetBits(GPIOD, EN)/**RS RW EN拉低*/
#define Reset_RS GPIO_ResetBits(GPIOD, RS)
#define Reset_RW GPIO_ResetBits(GPIOD, RW)
#define Reset_EN GPIO_ResetBits(GPIOD, EN)#define GPIO0_7 GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7/**GPIOG、GPIOD端口初始化**/
void GPIODG_Init(void);/**lcd写指令函数**/
void Write_Cmd(u16 cmd);/**lcd初始化函数**/
void Lcd_Init(void);/**lcd写数据函数**/
void Write_Data(u16 address, u16 data);#endif
lcd.c
#include "lcd.h"void GPIODG_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG|RCC_APB2Periph_GPIOD,ENABLE); //使能GD管脚时钟GPIO_InitTypeDef GPIO_InitStructure;//定义gpio初始化结构体GPIO_InitStructure.GPIO_Pin = GPIO0_7;//GPIOG0-7对应D0-D7GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//选择输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//选择输出速度GPIO_Init(GPIOG, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = RS|RW|EN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//选择输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//选择输出速度GPIO_Init(GPIOD, &GPIO_InitStructure);
}/**lcd写指令函数,按照写操作时序图编写**/
void Write_Cmd(u16 cmd)
{Reset_RS;Reset_RW;GPIO_Write(GPIOG, cmd);delay_ms(1);Set_EN;//拉高使能端delay_ms(1);Reset_EN;//拉低使能端
}/**lcd初始化函数**/
void Lcd_Init(void)
{Write_Cmd(0x003C);//功能设置delay_ms(1);Write_Cmd(0x0001);//清屏指令delay_ms(1);Write_Cmd(0x0006);//输入模式设置delay_ms(1);Write_Cmd(0x000C);//显示开
}/**lcd写数据函数,按照写操作时序图编写**/
void Write_Data(u16 address, u16 data)
{//地址设置Reset_RS;Reset_RW;//地址第八位为1即D7位为1,所以要加0x0080GPIO_Write(GPIOG, address + 0x0080);delay_ms(1);Set_EN;delay_ms(1);Reset_EN;delay_ms(500);//显示的数据Set_RS;Reset_RW;GPIO_Write(GPIOG, data);delay_ms(1); Set_EN;delay_ms(1);Reset_EN;
}
main.c
#include "stm32f10x.h"
#include "lcd.h"
#include "SysTick.h"//引入延时函数, 用于形成准确的延时int main()
{SysTick_Init(72);GPIODG_Init();Lcd_Init();delay_ms(500);Write_Data(0x0000, 0x0030);//在第一行第一位显示0
}
需要整个工程文件的,看我上传的文件。