OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2199|回复: 0

STM32F105系列单片机驱LCD1602显示

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2019-9-13
在线时间
7 小时
发表于 2019-10-24 11:27:12 | 显示全部楼层 |阅读模式
本程序参考帖子,本帖属于小白帖子。

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显示

LCD显示




显示

显示
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-1 02:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表