STM32单片机的LCD1602液晶驱动移植过程

最近开始深入的接触STM32,接触到STM32才知道这款单片机是多么的有趣,当时买开发板的时候没有多少钱,就买了一款核心板,什么都没有,只有一个下载usb下载器,还只能下载到flash中,这烧的了几回呀,买了一个调试器,烧写到flash中去,没有tft液晶怎么办?好在以前在实验室还有几块12864、1602、nokia5110,先移植一个1602吧,比较简单的。

下面这个是.c文件

#include "stm32f10x_LCD1602.h"
void LCD1602_Configuration(void) 
{
		GPIO_InitTypeDef GPIO_InitStructure;
	
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC,ENABLE);	//开启端口时钟,这些都是要用到的。
	
		GPIO_InitStructure.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_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//输出模式,这个作为数据输出端口	
		GPIO_Init(GPIOC,&GPIO_InitStructure);	
	
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //pa0---rs  pa1--rw
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//这个是rs和rw控制端口
		GPIO_Init(GPIOA,&GPIO_InitStructure);
	
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_8|GPIO_Pin_2; //pB8 ---E,其余的只是定义了没有用
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
		GPIO_Init(GPIOB,&GPIO_InitStructure);
		LCD_Initial();
}

void delay(unsigned int t)	 //延时函数
{    
	while(t--);
}

void  LCD_Wait(void)	
{
	RS_OFF;
	RW_ON;
	E_ON;delay(2000);E_OFF;	//???			
} 

void LCD_Write(u8 style, unsigned char input)	 这个style是什么意思都懂吧
{
	if(style==1)
	GPIO_SetBits(GPIOA,GPIO_Pin_0);
	else
	GPIO_ResetBits(GPIOA,GPIO_Pin_0);
	RW_OFF;		
	GPIO_Write(GPIOC,input);	
	E_ON;delay(2000);E_OFF;	//这个延时函数非常重要,如果是200的话,显示的字符就会满屏跑,		
	LCD_Wait();	
}

void LCD_Initial(void)			  //???LCD
{
	LCD_Write(0,0x38);  		 //8?????,2???,5*7??
	LCD_Write(0,0x0c);           //????
	LCD_Write(0,0x01);           //??
	LCD_Write(0,0x06);           //????
	delay(300);

}

void GotoXY(unsigned char x, unsigned char y)  //?????????
{
	if(y==0)	LCD_Write(0,0x80|x);
	if(y==1)  LCD_Write(0,0xc0|x);
}

void Print(unsigned char *str)	 //?????????
{
	while(*str)  LCD_Write(1,*str++);
}

下面给出.h文件

#ifndef __STM32F10x_LCD1602_H
#define __STM32F10x_LCD1602_H
#define RS_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_0)
#define RS_ON GPIO_SetBits(GPIOA,GPIO_Pin_0)
#define RW_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_1)
#define RW_ON GPIO_SetBits(GPIOA,GPIO_Pin_1)
#define E_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_8)
#define E_ON GPIO_SetBits(GPIOB,GPIO_Pin_8)
#define RST_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_2)
#define RST_ON GPIO_SetBits(GPIOB,GPIO_Pin_2)
#define PSB_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_0)
#define PSB_ON GPIO_SetBits(GPIOB,GPIO_Pin_0)
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"
void LCD_Initial(void);
void GotoXY(unsigned char x, unsigned char y);
void Print(unsigned char *str);
void LCD_Wait(void);
void LCD_Write(u8 style, unsigned char input);
void delay(unsigned int t);
void LCD1602_Configuration(void);
#endif /* __STM32F10x_IT_H */

/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
显示的图片就不上传了,

你可能感兴趣的:(stm32)