天天看點

STM32F105系列單片機驅LCD1602顯示

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);       

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;   

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                                 

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                               

        GPIO_Init(GPIOC, &GPIO_InitStructure);                                                                   

        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;

        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檔案(這些都在正點原子CD光牒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.顯示效果

STM32F105系列單片機驅LCD1602顯示

9.如果你看完後依然不會,恭喜你成為了一名合格的STM32小白玩家,下面請用坑逼的CSDN下載下傳源碼吧,早晚這個平台的資源會越來越少,現在準備轉戰其它平台,CSDN下載下傳實在太坑逼!坑逼!坑逼!(資源位址稍後更新)

繼續閱讀