最近开始深入的接触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****/
显示的图片就不上传了,