LCD12864并行驱动(STM32)5V和3.3V

一、前期准备
单片机:STM32F103ZET6
开发环境:MDK5.14
库函数:标准库V3.5
LCD12864模块:淘宝有售
这里写图片描述

二、实验效果
3.3V LCD12864
这里写图片描述

5V LCD12864
这里写图片描述

三、驱动原理
5V和3.3V模块均可以用STM32直接驱动,而不像1602那样5V必须是用5V驱动。注意的是模块上面的PSB脚接VCC,接VCC的话是采用并口传输数据,接GND采用串口传输,串口程序会在以后的博客中跟新。RST脚接VCC,此处没有用到硬件复位,所以直接接VCC,其复位低电平有效。驱动芯片资料,请自行搜索ST7920,里面自带字库。
需要完整工程或者有问题的请加QQ:1002521871,验证:呵呵。

四、驱动代码
LCD12864.h

#ifndef __LCD_12864_H__
#define	__LCD_12864_H__
#include "stm32f10x.h"
#include "gpio.h"
#include "delay.h"

//IO Definitions
#define			RS			PCout(0)	
#define			RW			PCout(1)
#define			EN			PCout(2)
//#define			PSB			PCout(3)
//#define			RST			PCout(4)

#define			RS_Pin		GPIO_Pin_0
#define			RW_Pin		GPIO_Pin_1
#define			EN_Pin		GPIO_Pin_2
//#define			PSB_Pin		GPIO_Pin_3
//#define			RST_Pin		GPIO_Pin_4

typedef enum
{
	Command,
	Data
}WR_Mode;

#define			LINE1		0x80
#define			LINE2 		0x90
#define			LINE3 		0x88
#define			LINE4 		0x98
extern void LCD12864_Show(uint8_t line, uint8_t pos, uint8_t *str);
extern void LCD12864Configuration(void);
extern void LCD_Clr(void);
#endif

LCD12864.c

#include "lcd12864.h"

void LCD_Wait_Ready(void)
{
	uint8_t status;
	RS = 0;
	RW = 1;
	
	GPIOD->ODR = 0xFF;
	do
	{
		EN = 1;
		DelayMs(5);
		status = GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_7);
	}while(status & 0x80);
	
	EN = 0;
}

void LCD_Write_Cmd(uint8_t cmd)
{
	LCD_Wait_Ready();
	RS = 0;
	RW = 0;
	EN = 1;
	GPIOD->ODR = cmd;
	EN = 0;
}

void LCD_Write_Dat(uint8_t dat)
{
	LCD_Wait_Ready();
	RS = 1;
	RW = 0;
	EN = 1;
	GPIOD->ODR = dat;
	EN = 0;
}

void LCD_Init(void)
{
	LCD_Write_Cmd(0x30);
	LCD_Write_Cmd(0x0C);
	LCD_Write_Cmd(0x01);
}

void LCD_Write_Word(uint8_t *str)
{
	while (*str > 0)
	{
		LCD_Write_Dat(*str);
		str ++;
	}
}

void LCD_Write_Test(WR_Mode mode, uint8_t word)
{
	switch(mode)
	{
		case Command:
			LCD_Write_Cmd(word);
			break;
		case Data:
			LCD_Write_Dat(word);
			break;
	}
}

void LCD_Clr(void)
{
	LCD_Write_Test(Command, 0x01);
}

void LCM_CLR(void)
{
	uint8_t clear[16] = "                ";
	//                  "1234567812345678"
	LCD_Write_Test(Command, LINE1);
	LCD_Write_Word(clear);
	LCD_Write_Test(Command, LINE2);
	LCD_Write_Word(clear);
	LCD_Write_Test(Command, LINE3);
	LCD_Write_Word(clear);
}

void LCD12864_Show(uint8_t line, uint8_t pos, uint8_t *str)
{
	LCD_Write_Test(Command, line + pos);
	LCD_Write_Word(str);
}
void LCD12864Configuration(void)
{
	GPIO_InitTypeDef    GPIO;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
    
    GPIO.GPIO_Pin   = RS_Pin | RW_Pin | EN_Pin;//| PSB_Pin | RST_Pin;
    GPIO.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO.GPIO_Mode  = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOC, &GPIO);
    
	//Data Port , PD0 ~ PD7
	GPIO.GPIO_Pin	= 0xFF;
	GPIO_Init(GPIOD, &GPIO);
	
	LCD_Init();
	LCD_Clr();
}

由于作者能力有限,有不妥之处欢迎指正,邮箱alex_hua@foxmail.com

  • 17
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 在STM32F103C8T6上并行驱动LCD12864的程序需要经过以下几个步骤: 1. 首先,我们需要连接LCD12864STM32F103C8T6的引脚。LCD12864通常包括数据引脚D0-D7,控制引脚RS、RW、EN以及背光引脚。将这些引脚与STM32F103C8T6的相应引脚连接。 2. 接下来,在STM32 CubeMX中进行引脚配置。在引脚管理器中,将LCD12864所使用的引脚配置为GPIO通用输出。配置完成后,生成对应的初始化代码。 3. 在main函数中,通过调用HAL库函数初始化GPIO引脚,并设置输出模式。例如,使用HAL_GPIO_Init函数对RS、RW、EN和背光引脚进行初始化。 4. 在并行驱动LCD12864时,需要控制数据引脚同时传输8位数据。我们可以通过将8位数据存储在一个字节中,然后通过调用HAL库函数一次性写入。例如,通过HAL_GPIO_WritePin函数将8位数据写入D0-D7引脚。 5. 然后,我们需要按特定的时序顺序控制LCD12864的EN引脚来进行数据的写入。通过调用HAL_Delay函数或使用定时器和中断来控制EN的高低电平变化。 6. 最后,我们可以编写控制LCD12864显示内容的函数。例如,编写函数来设置光标位置,清除屏幕内容,以及显示字符和字符串等。 综上所述,通过以上步骤,我们可以实现STM32F103C8T6的并行驱动LCD12864的程序。当然,在实际编程过程中,需要根据具体的硬件平台和开发环境进行相应的配置和实现。 ### 回答2: STM32F103C8T6是一种基于ARM Cortex-M3内核的微控制器,而LCD 12864则是一种128列64行的点阵式液晶显示器。下面是一个使用STM32F103C8T6并行驱动LCD 12864的简单程序。 首先,需要设置STM32F103C8T6的GPIO管脚连接到LCD 12864的数据线和控制线上。可以使用STM32的库函数来配置GPIO管脚。根据LCD 12864并行接口规范,将数据线(DB0-DB7)连接到STM32的GPIO管脚,将控制线(RS,RW,E,PSB)连接到另外的GPIO管脚。 接下来,需要编写LCD 12864驱动程序。首先,需要定义一些相关常量和函数,如初始化LCD、清屏、写入命令、写入数据等。使用STM32的库函数可以方便地操作GPIO管脚。 在初始化LCD时,需要按照LCD 12864的规范设置相关参数,如显示模式、光标等。可以通过写入命令来实现。 在写入数据时,可以通过写入命令和数据到对应的GPIO管脚实现。可以使用库函数来操作GPIO管脚的高低电平。 最后,可以在主程序中调用相关函数来显示所需内容。首先调用初始化函数对LCD进行初始化,然后根据需要调用其他函数,如清屏、写入命令和数据等。 总之,通过配置STM32F103C8T6的GPIO管脚,并编写相应的驱动程序,即可实现对LCD 12864并行驱动。这只是一个简单的示例,实际应用中还需要根据具体的需求进行相应的配置和编码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值