找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4261|回复: 8
收起左侧

求助!stm32f103c8t6驱动12864串行显示但没有显示

[复制链接]
ID:381035 发表于 2020-4-21 11:36 | 显示全部楼层 |阅读模式
stm32f103c8t6单片机,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函数

#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
                //初始化命令之间的延时所有定义为最长延时,20ms 手册上说是10 ms
                //这个延时可能会有点怪,我是为了后面还有作用,测试他的极限延时,
                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);                                                //这里是最重要的                                                                                                //,不同的功能切换的时候事先一定要声明是在哪个模式下的命令
        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);
}

//显示一个数据函数
void show_word(unsigned char ch)
{
        unsigned char data;                                                                                                                //发送数据,也是要分三个字节来发送,注意这次是fa开头,是发送,且发送的是数据的意思      
        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
}

//其实这货是不是100us,我是没算过,随便给它个数值,让他自己玩儿去。
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;                                                                //每次发送的数据或者命令的话,都先拉高时钟线和数据线
        LCD_RW=1;
        delay100us();
        while(i)
        {
                if(data & 0x80)
                        LCD_RW=1;
                else
                        LCD_RW=0;
                delay100us();
                LCD_EN = 0;                                                        //时钟线拉高,延时一段时间再拉低,拉低意味着数据线上的数据要被12864锁存了
                delay100us();
                delay100us();
                LCD_EN=1;
                delay100us();       
                data = data << 1;
                i = i -1;       
        }
}

void send_cmd(unsigned char com)                                                                                //发送命令,分三个字节发送,注意第一个字节哦,f8,是指发送动作,且是发送命令
{
        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;                                                                                                                //发送数据,也是要分三个字节来发送,注意这次是fa开头,是发送,且发送的是数据的意思
        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
952058.JPG
lcd12864接口图.JPG
回复

使用道具 举报

ID:687324 发表于 2020-4-25 12:20 | 显示全部楼层
楼主,现在能行了吗?我也遇到了同样的问题。。。
回复

使用道具 举报

ID:592807 发表于 2020-4-25 19:04 | 显示全部楼层
spi初始化呢?
回复

使用道具 举报

ID:505153 发表于 2020-10-16 17:14 | 显示全部楼层
引脚需要接1k上啦   psb接地不接地都行
回复

使用道具 举报

ID:414556 发表于 2020-10-16 19:16 | 显示全部楼层
调一下对比度看看,有时候程序对不显示就是对比度没调好.
回复

使用道具 举报

ID:160500 发表于 2020-10-16 20:18 | 显示全部楼层
        RST_1;
        delay_us(10);
        RST_0;
        delay_us(20);
        RST_1;
        delay_us(10);
        write_com(0x30);//30---基本指令动作
        HAL_Delay(5);
        write_com(0x30);//30---基本指令动作
        HAL_Delay(5);
        write_com(0x0c);//开显示,关游标
        HAL_Delay(5);
  slcdCls();//清屏,地址指针指向 00H
        write_com(0x03);
        HAL_Delay(10);

贴一段我的初始化
回复

使用道具 举报

ID:160500 发表于 2020-10-16 20:23 | 显示全部楼层
运行中的图片
51hei图片_20201016202209.jpg
回复

使用道具 举报

ID:476699 发表于 2020-10-16 20:30 | 显示全部楼层
片选,读写这些引脚都不用接个上拉的吗?
回复

使用道具 举报

ID:819974 发表于 2020-12-23 20:50 | 显示全部楼层

能分享程序吗?
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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