基于stm32的lcd12864代码
时间: 2023-08-29 11:05:39 浏览: 43
以下是基于STM32的LCD12864的代码,使用的是4位并行通信方式:
```c
#include "stm32f10x.h"
#include "delay.h"
#define LCD_RS GPIO_Pin_0
#define LCD_RW GPIO_Pin_1
#define LCD_EN GPIO_Pin_2
#define LCD_DATA GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6
void LCD_WriteCmd(uint8_t cmd);
void LCD_WriteData(uint8_t dat);
void LCD_Init(void);
void LCD_GotoXY(uint8_t x, uint8_t y);
void LCD_Clear(void);
int main(void)
{
LCD_Init();
LCD_WriteCmd(0x01); //清屏
LCD_GotoXY(0,0);
LCD_WriteData('S');
LCD_WriteData('T');
LCD_WriteData('M');
LCD_WriteData('3');
LCD_WriteData('2');
LCD_WriteData('F');
LCD_WriteData('1');
LCD_WriteData('0');
LCD_WriteData('x');
LCD_WriteData('x');
LCD_GotoXY(0,1);
LCD_WriteData('L');
LCD_WriteData('C');
LCD_WriteData('D');
LCD_WriteData('1');
LCD_WriteData('2');
LCD_WriteData('8');
LCD_WriteData('6');
LCD_WriteData('4');
while(1)
{
}
}
void LCD_WriteCmd(uint8_t cmd)
{
GPIO_ResetBits(GPIOB,LCD_RS);
GPIO_ResetBits(GPIOB,LCD_RW);
GPIO_SetBits(GPIOB,LCD_EN);
GPIO_Write(GPIOB,cmd<<3);
delay_us(1);
GPIO_ResetBits(GPIOB,LCD_EN);
delay_us(50);
}
void LCD_WriteData(uint8_t dat)
{
GPIO_SetBits(GPIOB,LCD_RS);
GPIO_ResetBits(GPIOB,LCD_RW);
GPIO_SetBits(GPIOB,LCD_EN);
GPIO_Write(GPIOB,dat<<3);
delay_us(1);
GPIO_ResetBits(GPIOB,LCD_EN);
delay_us(50);
}
void LCD_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = LCD_RS|LCD_RW|LCD_EN|LCD_DATA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
delay_ms(50);
LCD_WriteCmd(0x30);
delay_ms(5);
LCD_WriteCmd(0x30);
delay_ms(1);
LCD_WriteCmd(0x30);
delay_ms(1);
LCD_WriteCmd(0x38);
LCD_WriteCmd(0x08);
LCD_WriteCmd(0x01);
LCD_WriteCmd(0x06);
LCD_WriteCmd(0x0C);
}
void LCD_GotoXY(uint8_t x, uint8_t y)
{
uint8_t addr;
if(y == 0)
{
addr = 0x80 + x;
}
else
{
addr = 0x80 + 0x40 + x;
}
LCD_WriteCmd(addr);
}
void LCD_Clear(void)
{
LCD_WriteCmd(0x01);
}
```
注意:以上代码仅供参考,具体实现需要根据实际情况进行修改。