接线
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-D7
GPIO_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,所以要加0x0080
GPIO_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
}
需要整个工程文件的,看我上传的文件。
|