標(biāo)題: 求助!stm32f103c8t6驅(qū)動(dòng)12864串行顯示但沒有顯示 [打印本頁]

作者: Robust    時(shí)間: 2020-4-21 11:36
標(biāo)題: 求助!stm32f103c8t6驅(qū)動(dòng)12864串行顯示但沒有顯示
stm32f103c8t6單片機(jī),lcd12864液晶顯示屏
用st-link下載程序后,顯示屏不顯示“welcome” (程序要求顯示welcome)
有大佬幫忙解答一下嗎? 謝謝!

接線:
#define LCD_GPIO   GPIOA
#define LCD_EN     PAout(2)
#define LCD_RW     PAout(1)
#define LCD_RS     PAout(0


下面是lcd12864.c函數(shù)

#include "lcd12864.h"
void delay20ms()
{
        unsigned int i = 50;
        while(i)
        {
                i = i - 1;
        }
}

void LCD12864_int(void)
{
          GPIO_Configuration();
                // the initial delay time i make it all the same
                //初始化命令之間的延時(shí)所有定義為最長延時(shí),20ms 手冊上說是10 ms
                //這個(gè)延時(shí)可能會有點(diǎn)怪,我是為了后面還有作用,測試他的極限延時(shí),
                send_cmd(0x34)        ;
                delay20ms();
                send_cmd(0x30)        ;
                delay20ms();
                send_cmd(0x0c)        ;
                delay20ms();
                send_cmd(0x01)        ;
                delay20ms();
                send_cmd(0x06)        ;
                delay20ms();
}
//指定在液晶的哪一行顯示  
void LCD12864_Pos(unsigned char x, unsigned char y)
{
        unsigned char pos = 0;
        send_cmd(0x30);                                                //這里是最重要的                                                                                                //,不同的功能切換的時(shí)候事先一定要聲明是在哪個(gè)模式下的命令
        if(x == 0)
                x = 0x80;
        else if(x == 1)
                x = 0x90;
        else if(x == 2)
                x = 0x88;
        else if(x == 3)
                x = 0x98;
       
        pos = x + y;
        send_cmd(pos);
}

//顯示一個(gè)數(shù)據(jù)函數(shù)
void show_word(unsigned char ch)
{
        unsigned char data;                                                                                                                //發(fā)送數(shù)據(jù),也是要分三個(gè)字節(jié)來發(fā)送,注意這次是fa開頭,是發(fā)送,且發(fā)送的是數(shù)據(jù)的意思      
        LCD_RS=1;
        data = ch;
        spi_function(0x0fa);
        spi_function(data & 0xf0);
        spi_function( (data << 4) & 0xf0);
        LCD_RS=0;       
}

void GPIO_Configuration()
{
                GPIO_InitTypeDef GPIO_InitStructure;
                RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
          GPIO_InitStructure.GPIO_Pin = LCD_EN | LCD_RW        | LCD_RS        ;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(LCD_GPIO, &GPIO_InitStructure);
                GPIO_SetBits(LCD_GPIO, LCD_EN | LCD_RW        | LCD_RS);         // turn off all led
}

//其實(shí)這貨是不是100us,我是沒算過,隨便給它個(gè)數(shù)值,讓他自己玩兒去。
void delay100us(void)
{
        unsigned int i = 50;
        while(i)
        {
                i = i - 1;
        }
}
void spi_function(unsigned char del)
{
        unsigned char i = 8 , data;
        data = del;
        LCD_EN=1;                                                                //每次發(fā)送的數(shù)據(jù)或者命令的話,都先拉高時(shí)鐘線和數(shù)據(jù)線
        LCD_RW=1;
        delay100us();
        while(i)
        {
                if(data & 0x80)
                        LCD_RW=1;
                else
                        LCD_RW=0;
                delay100us();
                LCD_EN = 0;                                                        //時(shí)鐘線拉高,延時(shí)一段時(shí)間再拉低,拉低意味著數(shù)據(jù)線上的數(shù)據(jù)要被12864鎖存了
                delay100us();
                delay100us();
                LCD_EN=1;
                delay100us();       
                data = data << 1;
                i = i -1;       
        }
}

void send_cmd(unsigned char com)                                                                                //發(fā)送命令,分三個(gè)字節(jié)發(fā)送,注意第一個(gè)字節(jié)哦,f8,是指發(fā)送動(dòng)作,且是發(fā)送命令
{
        unsigned char data;
        LCD_RS=1;
        data = com;
        spi_function(0x0f8);
        spi_function(data & 0xf0);
        spi_function( (data << 4) & 0xf0);
        LCD_RS=0;
}



void LCD12864_write(unsigned char cmd,unsigned char dat)
{
        unsigned char data;                                                                                                                //發(fā)送數(shù)據(jù),也是要分三個(gè)字節(jié)來發(fā)送,注意這次是fa開頭,是發(fā)送,且發(fā)送的是數(shù)據(jù)的意思
        LCD_RS=1;
        data = dat;
        if(cmd!=0) spi_function(0x0fa);
        else              spi_function(0x0f8);
        spi_function(data & 0xf0);
        spi_function( (data << 4) & 0xf0);
        LCD_RS=0;       
}


void LCD12864_writebyte(unsigned char *prointer)                               
{
    while(*prointer!='\0')
    {
        LCD12864_write(1,*prointer);
        prointer++;
    }
}

void LCD12864_clear(void)
{
    send_cmd(0x01);                        //清屏指令
                delay_ms(2);       
}

51hei圖片_20200421113032.jpg (1.34 MB, 下載次數(shù): 117)

51hei圖片_20200421113032.jpg

952058.JPG (151.23 KB, 下載次數(shù): 115)

952058.JPG

lcd12864接口圖.JPG (37.46 KB, 下載次數(shù): 133)

lcd12864接口圖.JPG

作者: bghui    時(shí)間: 2020-4-25 12:20
樓主,現(xiàn)在能行了嗎?我也遇到了同樣的問題。。。

作者: 黃youhui    時(shí)間: 2020-4-25 19:04
spi初始化呢?
作者: qinyuning    時(shí)間: 2020-10-16 17:14
引腳需要接1k上啦   psb接地不接地都行
作者: amandv    時(shí)間: 2020-10-16 19:16
調(diào)一下對比度看看,有時(shí)候程序?qū)Σ伙@示就是對比度沒調(diào)好.
作者: liuzx66    時(shí)間: 2020-10-16 20:18
        RST_1;
        delay_us(10);
        RST_0;
        delay_us(20);
        RST_1;
        delay_us(10);
        write_com(0x30);//30---基本指令動(dòng)作
        HAL_Delay(5);
        write_com(0x30);//30---基本指令動(dòng)作
        HAL_Delay(5);
        write_com(0x0c);//開顯示,關(guān)游標(biāo)
        HAL_Delay(5);
  slcdCls();//清屏,地址指針指向 00H
        write_com(0x03);
        HAL_Delay(10);

貼一段我的初始化
作者: liuzx66    時(shí)間: 2020-10-16 20:23
運(yùn)行中的圖片

51hei圖片_20201016202209.jpg (105.21 KB, 下載次數(shù): 124)

51hei圖片_20201016202209.jpg

作者: zhihong    時(shí)間: 2020-10-16 20:30
片選,讀寫這些引腳都不用接個(gè)上拉的嗎?

作者: 勿忘我123    時(shí)間: 2020-12-23 20:50
liuzx66 發(fā)表于 2020-10-16 20:23
運(yùn)行中的圖片

能分享程序嗎?





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1