新手上路
- 积分
- 36
- 金钱
- 36
- 注册时间
- 2019-9-13
- 在线时间
- 7 小时
|
本程序参考帖子,本帖属于小白帖子。
STM32驱动LCD1602步骤如下:
1. 选择LCD1602的数据IO和控制IO
本案例选择的STM32F105的GPIOE的Pin_0~Pin_7作为数据接口,GPIOC的Pin_11为LCD1602的BLA(背光源正极),GPIOC的Pin_13~Pin_15分别作为E(使能信号)、R/W(读/写选择端)和RS(数据命令选择端)。
2.使能选择的IO口和初始化LCD1602
源码如下:
void Init_LCD1602()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC, ENABLE); //使能PA,PC端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //LCD1602的三根控制线en,rw,rs
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //根据设定参数初始化GPIOC
GPIO_SetBits(GPIOC,GPIO_Pin_11);
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;//LCD1602的8跟数据线
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
write_com(0x38); //设置LCD两行显示,一个数据由5*7点阵表示,数据由8跟线传输
write_com(0x01); //清除屏幕显示
write_com(0x06); //设定输入方式,增量不移位
write_com(0x0c); //开整体显示,关光标,不闪烁
}
3.写命令函数
源码如下:
void write_com(u8 com)
{
//写指令 输入:RS=L,RW=L,E=下降沿脉冲
rs=0;
rw=0;
GPIO_Write(GPIOE, 0X00FF&com);//该函数一般用来往一次性一个GPIO的多个端口设置
en=1;
delay_ms(2);
en=0;
}
4.写数据函数
源码如下:
void write_com(u8 com)
{
//写指令 输入:RS=H,RW=L,E=下降沿脉冲
rs=1;
rw=0;
GPIO_Write(GPIOE, 0X00FF&com);//该函数一般用来往一次性一个GPIO的多个端口设置
en=1;
delay_ms(2);
en=0;
}
5.写字符串
源码如下:
void LcdShowStr( unsigned char *StrData, unsigned char row, unsigned char col )//row为“0”在第一行显示,“1”为第二行。col为该行的起始位置
{
unsigned char baseAddr = 0x00;
if ( row )
{
baseAddr = 0xc0;
}
else
{
baseAddr = 0x80;
}
baseAddr += col;
while ( *StrData != '\0' )
{
write_com(baseAddr|0x80);
write_dat( *StrData);
baseAddr++; //每次循环地址加一,数据指针加一
StrData++;
}
}
6..C包含头文件和.h文件(这些都在正点原子光盘A附带代码中)
.c头文件如下:
#include "LCD1602.h"
#include "sys.h"
#include "delay.h"
.h文件源码如下:
#ifndef __LCD1602HL__
#define __LCD1602HL__
#include "sys.h"
#define rs PCout(15)
#define rw PCout(14)
#define en PCout(13)
void Init_LCD1602(void);
void write_com(unsigned char com);
void write_dat(unsigned char date);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
void LcdShowStr( unsigned char *StrData, unsigned char row, unsigned char col );
#endif
7.main文件
main源码如下:
#include"sys.h"
#include "LCD1602.h"
unsigned char table[] = "HELLO WORLD!";
int main(void)
{
Init_LCD1602();
while(1)
{
LcdShowStr(table,1,2);
};
}
8.显示效果
LCD显示
|
-
显示
|