stm32控制240128液晶没有显示

2019-07-14 21:46发布

我最近在用STM32驱动240128液晶,搞了几天了,一直没反应,有会的,或者搞过类型的请帮我解决一下。液晶是直接5V供电,我是用四线串行时序,信号线直接和探索者开发板的GPIO口相连。下面是我的程序,望帮小弟解决一下。
/******************************************************************
²âÊÔLCD240128Òº¾§Çý¶¯Í·Îļþ
******************************************************************/
#ifndef __LCD240128_H__
#define __LCD240128_H__
#include "sys.h"
#include "delay.h"
/********************************************
LCD¹Ü½Å¶¨Òå
********************************************/
//#define  LCD240128_CS  PAout(12)
//#define  LCD240128_RST PAout(13)
//#define  LCD240128_RS  PAout(14)
//#define  LCD240128_SCL PAout(15)
//#define  LCD240128_SDA PBout(15)


//#define  LCD240128_CS  PDout(14)
//#define  LCD240128_RST PDout(11)
//#define  LCD240128_RS  PDout(15)
//#define  LCD240128_SCL PEout(8)
//#define  LCD240128_SDA PEout(9)
#define  LCD240128_CS_L    GPIO_ResetBits(GPIOD, GPIO_Pin_14)
#define  LCD240128_CS_H    GPIO_SetBits(GPIOD, GPIO_Pin_14)
#define  LCD240128_RST_L   GPIO_ResetBits(GPIOD, GPIO_Pin_11)
#define  LCD240128_RST_H   GPIO_SetBits(GPIOD, GPIO_Pin_11)
#define  LCD240128_RS_L    GPIO_ResetBits(GPIOD, GPIO_Pin_15)
#define  LCD240128_RS_H    GPIO_SetBits(GPIOD, GPIO_Pin_15)
#define  LCD240128_SCL_L   GPIO_ResetBits(GPIOE, GPIO_Pin_8)
#define  LCD240128_SCL_H   GPIO_SetBits(GPIOE, GPIO_Pin_8)
#define  LCD240128_SDA_L   GPIO_ResetBits(GPIOE, GPIO_Pin_9)
#define  LCD240128_SDA_H   GPIO_SetBits(GPIOE, GPIO_Pin_9)


#define DIS_ON  0X3D
#define DIS_OFF        0X3C
#define REST    0X76


#define LCD240128_ClrAll    128
#define LCD240128_Direction 0 //ĬÈÏÇé¿öÏÂÊǺáÆÁÏÔʾ
/*********************************************
LCDÏà¹Øº¯Êý¶¨Òå
**********************************************/
void LCD240128_WriteCommand(u8 Command);
void LCD240128_WriteData(u8 Sdata);
void LCD240128_ClearDisplay(u8 page);
void LCD240128_Draw(u8 line,u8 list,u8 pw,u8 ph,u8 *Draw,u8 fbit);
void DrawPicture(u8 line,u8 list,const u8 *Sk,u8 fbit);
void LCD240128_Init(void);
void SetXY(u8 x, u8 y);
void ShowString(u8 x, u8 y, u8* str);
#endif

#include "lcd240128.h"
/*******************************************************************************************
* º¯ÊýÃèÊö£º·¢ËÍÖ¸ÁÊý£¬¸ßλÏÈËÍ
* È«¾Ö×ÊÔ´£º
* ÊäÈë²ÎÊý£º°ËλָÁîÂë
* º¯Êý·µ»Ø£ºÎÞ
*******************************************************************************************/
void LCD240128_WriteCommand(u8 Command)
{
   
    u8 i;
    LCD240128_CS_L;
          delay_ms(5);
    LCD240128_RS_L;
          delay_ms(5);
    for(i = 0; i < 8; i++)
    {
        LCD240128_SCL_L;
        if(Command & 0x80) { LCD240128_SDA_H; }
        else { LCD240128_SDA_L; }
                                delay_ms(5);
        LCD240128_SCL_H;
        Command <<= 1;
    }
                delay_ms(5);
    LCD240128_CS_H;
    delay_ms(5);
}
/*******************************************************************************************
* º¯ÊýÃèÊö£º·¢ËÍÊý¾Ýº¯Êý£¬¸ßλÏÈËÍ
* È«¾Ö×ÊÔ´£º
* ÊäÈë²ÎÊý£º°ËλÊý¾Ý
* º¯Êý·µ»Ø£ºÎÞ
*******************************************************************************************/
void LCD240128_WriteData(u8 Sdata)
{
    u8 i;
    LCD240128_CS_L;
          delay_ms(5);
    LCD240128_RS_H;
          delay_ms(5);
    for(i = 0; i < 8; i++)
    {
        LCD240128_SCL_L;
        if(Sdata & 0x80) {LCD240128_SDA_H;}
        else {LCD240128_SDA_L;}
        delay_ms(5);
        LCD240128_SCL_H;
        Sdata <<= 1;
    }
                delay_ms(5);
    LCD240128_CS_H;
                delay_ms(5);
}
/*****************************************************************************************
ÏÔʾ×Ö·û´®
*****************************************************************************************/
void SetXY(u8 x, u8 y)
{  
   LCD240128_WriteCommand(0X01);
         LCD240128_WriteCommand(x);
         LCD240128_WriteCommand(0xC0);
         LCD240128_WriteCommand(y);
         
}
/********************************************************************************************
ÏÔʾ×Ö·û´®
*********************************************************************************************/
void ShowString(u8 x, u8 y, u8* str)
{
   SetXY(x, y);
         while(*str!='')
         {
                  LCD240128_WriteData(*str++);
         }
}
/*******************************************************************************************
* º¯ÊýÃèÊö£ºÇåÏÔʾ£¬°´Ò³Çå³ý¡£Èç¹ûÊäÈëÒ³Êý´óÓÚ7£¨LCD240128_ClrAll£©£¬ÕûÆÁÇå³ý
* È«¾Ö×ÊÔ´£º
* ÊäÈë²ÎÊý£ºÒ³£¬page¡££¨LCD240128_ClrAll£©
* º¯Êý·µ»Ø£º
*******************************************************************************************/
void LCD240128_ClearDisplay(u8 page)
{
    u8 i;
    u8 j;
    if(page > LCD240128_ClrAll - 1)
    {
        //ÇåÆÁ
        for(i = 0; i < LCD240128_ClrAll; i++)
        {
            LCD240128_WriteCommand(0X01);                         //ÉèÖÃҪдÈëµÄÒ³µØÖ·
            LCD240128_WriteCommand(i);                                //Ò³µØַдÈë
            LCD240128_WriteCommand(0XC0);                         //ÉèÖÃҪдÈëµÄÁеØÖ·
            LCD240128_WriteCommand(0);                                //ÁеØַдÈë
            for(j = 0; j < 32; j++)
            {
                LCD240128_WriteData(0x00);                //ÇåÆÁ
            }
        }
    }
    else{        //ÇåÖ¸¶¨Ò³
        LCD240128_WriteCommand(0X01);                         //ÉèÖÃҪдÈëµÄÒ³µØÖ·
        LCD240128_WriteCommand(page);                        //Ò³µØַдÈë
        LCD240128_WriteCommand(0XC0);                         //ÉèÖÃҪдÈëµÄÁеØÖ·
        LCD240128_WriteCommand(0);                                //ÁеØַдÈë
        for(j = 0; j < 32; j++)
        {
            LCD240128_WriteData(0x00);                        //ÇåÆÁ
        }
    }
}
/*******************************************************************************************
* º¯ÊýÃèÊö£ºÔÚÖ¸¶¨Î»ÖÃÏÔʾͼ±ê¡¢×ÖÄ£
                        ͼ±êÔÚºáÆÁʱ¿í±ØÐëÊÇ8µÄÕûÊý£¬¼áÆÁʱ¸ß±ØÐëÊÇ8µÄÕûÊý¡£
* È«¾Ö×ÊÔ´£ºÂÔ
* ÊäÈë²ÎÊý£ººá×ø±ê£¬×Ý×ø±ê£¬Í¼±ê¿í£¬Í¼±ê¸ß£¬Í¼±êÖ¸Õ룬·´ÏÔ±ê־λ¡£
* º¯Êý·µ»Ø£ºÎÞ
*******************************************************************************************/
void DrawPicture(u8 line,u8 list,const u8 *Sk,u8 fbit)
{
        u8 i,j;
        u8 skdata;


        for(i=0;i<128;i++)         //ͼƬ¸ß¶È
        {
                LCD240128_WriteCommand(0X01);                         //ÉèÖÃÒªÏÔʾµÄÐеØÖ·
                LCD240128_WriteCommand(line+i);                        //µØַдÈë
                LCD240128_WriteCommand(0XC0);                         //ÉèÖÃÒªÏÔʾµÄÁеØÖ·
                LCD240128_WriteCommand(list);                                //µØַдÈë
                for(j=0;j<30;j++)                                //ͼƬ¿í¶È=240/8
                {
                        skdata=*(Sk+j+i*30);
                        if(fbit)                                         //Èç¹û·´ÏÔλΪ1£¬·´ÏÔÊý¾Ý
                        {
                                skdata=~skdata;
                        }
                        LCD240128_WriteData(skdata);                                               
                }                       
        }
}
/**************************************************************************************
»­µãº¯Êý
**************************************************************************************/
void LCD240128_Draw(u8 line,u8 list,u8 pw,u8 ph,u8 *Draw,u8 fbit)
{
    u8 i, j;
    u8 lie, page;
    u8 plie, ppage;
    switch(LCD240128_Direction)
    {
        case 0://ºáÆÁ
            plie = pw / 8;
            ppage = ph;
            lie = line / 8 + 2;
            page = list + 1;
            break;
        case 1://¼áÆÁ
            plie = ph / 8;
            ppage = pw;
            lie = list / 8 + 2;
            page = line + 1;
            break;
        case 2:
            break;
        case 3:
            break;
    }
    for(i = 0; i < ppage; i++)                                //ͼռҳÊý£¨Í¼±êÔÚºáÆÁʱ¸ß±ØÐëÊÇ8µÄÕûÊý£¬¼áÆÁʱ¿í±ØÐëÊÇ8µÄÕûÊý£©
    {
        LCD240128_WriteCommand(0X01);                         //ÉèÖÃҪдÈëµÄÒ³µØÖ·
        LCD240128_WriteCommand(page + i);                        //Ò³µØַдÈë
        LCD240128_WriteCommand(0XC0);                         //ÉèÖÃҪдÈëµÄÁеØÖ·
        LCD240128_WriteCommand(lie);                                //ÁеØַдÈë
        for(j = 0; j < plie; j++)
        {
            if(fbit)
            {
                LCD240128_WriteData(~(*Draw));
            }
            else
            {
                LCD240128_WriteData(*Draw);
            }
            Draw++;
        }
    }
}
/*******************************************************************************************
* º¯ÊýÃèÊö£ºÒº¾§ÆÁ³õʼ»¯º¯Êý
* È«¾Ö×ÊÔ´£º
* ÊäÈë²ÎÊý£º
* º¯Êý·µ»Ø£º
*******************************************************************************************/
void LCD240128_Init(void)
{
          //³õʼ»¯LCDµÄ¸÷¸öIO¿Ú
    GPIO_InitTypeDef  GPIO_InitStruct;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);       
          GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_14|GPIO_Pin_15; //
          GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
          GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOD, &GPIO_InitStruct);
          GPIO_SetBits(GPIOD, GPIO_Pin_11|GPIO_Pin_14|GPIO_Pin_15);
       
          GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;//
          GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
          GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOE, &GPIO_InitStruct);
          GPIO_SetBits(GPIOE, GPIO_Pin_8|GPIO_Pin_9);
          
    LCD240128_RST_L;
    delay_ms(50);
    LCD240128_RST_H;
    delay_ms(20);
       
    delay_ms(20);
    LCD240128_WriteCommand(REST);
    delay_ms(30);


    LCD240128_WriteCommand(0X2F);        //µçÔ´¿ØÖÆ0 0 0 0 1 0 1 VS VC VF
    LCD240128_WriteCommand(0X3A);        //0 0 1 1 1 0 1 OSCOFF
    LCD240128_WriteCommand(0X35);        //LCDƫѹ0 0 1 1 0 BS2 BS1 BS0    30=1/7, 31=1/8, 32=1/9, 33=1/10, 34=1/11, 35=1/12, 36=1/13, 37=1/14
    LCD240128_WriteCommand(0X38);        //SLEEP  0 0 1 1 1 0 0 SLP


    LCD240128_WriteCommand(0X44);        //GRAY CONTROL 44H=MONO  45H=4GRAY ÁÁ¶È¼¶±ð
    LCD240128_WriteCommand(0X6C); //ÏÔʾÇý¶¯¿ØÖÆ£¬°üÀ¨·½Ïò£¬È«ÆÁ£¬·´ÏÔ£¬


    LCD240128_WriteCommand(0X74); //ÉèÖÃÊÓ´°µÄ´¹Ö±ÏÔʾ·¶Î§.¸ù¾ÝÆÁµÄÏñËضø¶¨
    LCD240128_WriteCommand(0X00);        //¿ªÊ¼µØÖ·
    LCD240128_WriteCommand(0X7F);        //½áÊøµØÖ·Y=128


    LCD240128_WriteCommand(0X75); //ÉèÖÃÊÓ´°µÄˮƽÏÔʾ·¶Î§.¸ù¾ÝÆÁµÄÏñËضø¶¨
    LCD240128_WriteCommand(0X00);        //¿ªÊ¼µØÖ·
    LCD240128_WriteCommand(0XEF);        //½áÊøµØÖ·x=240


    LCD240128_WriteCommand(0X90);        //ÉèÖÃDUTY COM×ÜÊý
    LCD240128_WriteCommand(0X80);        //128


    LCD240128_WriteCommand(0XB1);        //ÉèÖñ¶Ñ¹Öµ£¬Í¨¹ý´ËÖµ¿ÉÒÔµ÷Õû¶Ô±È¶È
    LCD240128_WriteCommand(0X58);        //дÈë


    LCD240128_WriteCommand(0XB2);        //Frame¿ØÖÆ£¬ÉèÖÃÏÔʾˢÐÂƵÂÊ
    LCD240128_WriteCommand(0X3C);        //
    LCD240128_WriteCommand(0X01);


    LCD240128_WriteCommand(0XE1); //ζȲ¹³¥¿ª


    LCD240128_WriteCommand(0X88);
    LCD240128_WriteCommand(0X88);
    LCD240128_WriteCommand(0X88);
    LCD240128_WriteCommand(0X88);
    LCD240128_WriteCommand(0X8A);
    LCD240128_WriteCommand(0X60);
    LCD240128_WriteCommand(0x41);                //¶àÔö¼ÓÒÔÏÂÈýÌõÖ¸Áî
    LCD240128_WriteCommand(0x19);                //
    LCD240128_WriteCommand(0x2F);                //
    LCD240128_WriteCommand(0XE3); //¿Õ²Ù×÷Ö¸Áî
    LCD240128_WriteCommand(0X00);
    LCD240128_WriteCommand(0X7F);
    LCD240128_WriteCommand(0X75);
    LCD240128_WriteCommand(0X02);
    LCD240128_WriteCommand(0X1F);


    LCD240128_WriteCommand(0XC0); //ÉèÖÃÒªÏÔʾµÄÊ×ÁеØÖ·
    LCD240128_WriteCommand(0X02);        //µØַдÈë


    LCD240128_WriteCommand(0X01); //ÉèÖÃÒªÏÔʾµÄÊ×ÐеØÖ·
    LCD240128_WriteCommand(0X00);        //µØַдÈë
    delay_ms(50);


    //        LCD_CmdWrite(0xE3);


    LCD240128_WriteCommand(DIS_ON);//¿ªÏÔʾ
    delay_ms(50);

}
#include "lcd240128.h"
#include "lcd240128font.h"
/************************************************
************************************************/
u8 str1[]= "baofeng";


int main(void)
{       
  delay_init();
        LCD240128_Init();
        //LCD240128_ClearDisplay(LCD240128_ClrAll);
        //DrawPicture(0, 2, logo, 1);
        ShowString(5,0,str1);
  while(1);
}
#ifndef __LCD240128FONT_H__
#define __LCD240128FONT_H__
#include "sys.h"
const u8 logo[]={
0x01,0x02,0x10,0x00,0x7D,0x01,0x67,0x80,0x05,0xF0,0x44,0x80,0x46,0x10,0x44,0x80,
0x2C,0x23,0x44,0x80,0x28,0x81,0x44,0x80,0x10,0x81,0x54,0x80,0x10,0x81,0x64,0x80,
0x29,0x41,0x45,0x80,0x29,0x41,0x04,0x00,0x42,0x21,0x04,0x00,0x04,0x12,0xFF,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
#endif





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
鸿宇
1楼-- · 2019-07-15 08:53
xp3539989 发表于 2015-10-10 08:18
屏是好的  这点无疑的  在其他51单片机上试过了是好的,我抓了时序,好像有点问题,我也不确定是不是stm32主频太高了,还是硬件有点问题。搞了几天了   还是不行,很奇怪

你觉得主频高就试试降低数据的速率,看看效果会不会好些,有些点阵屏的某些指令需要有严格的时序要求,详细的看看数据手册,做对应的调整。

一周热门 更多>