STM32串行驱动绘晶的12864ZW液晶屏不显示

2019-12-25 18:46发布

如题

STM32串行驱动绘晶的12864ZW液晶屏不显示

下面是程序
void screen_init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//RST
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOD,&GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//CLK
        GPIO_Init(GPIOD,&GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//SID
        GPIO_Init(GPIOD,&GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//CS
        GPIO_Init(GPIOD,&GPIO_InitStructure);
        delay_ms(50);
        GPIO_ResetBits(GPIOD,GPIO_Pin_4);//¸´Î»
        delay_ms(10);
        GPIO_SetBits(GPIOD,GPIO_Pin_4);
       
        delay_ms(50);
        LCD12864_Write(WRITE_CMD,0x34);
        delay_ms(10);
        LCD12864_Write(WRITE_CMD,0x30);
        delay_ms(10);
        LCD12864_Write(WRITE_CMD,0x06);
        delay_ms(10);
        LCD12864_Write(WRITE_CMD,0x01);
        delay_ms(10);
        LCD12864_Write(WRITE_CMD,0x0C);
        delay_ms(10);
        LCD12864_Write(WRITE_CMD,0x02);
       
       
}


void ShowChar(u8 addr, u8 *dat1 , u8 count)
{
        u8 i=0;
       
        LCD12864_Write(WRITE_CMD,addr);
        delay_ms(1);
//        for(i=0;i<count;i++)
        {
                LCD12864_Write(WRITE_DAT,0x30);
                delay_ms(10);
        }
}

void LCD12864_Write(u8 writeMode,u8 dat)
{
        GPIO_ResetBits(GPIOD,GPIO_Pin_7);
        GPIO_SetBits(GPIOD,GPIO_Pin_7);
        LCD12864_SendByte(writeMode);
        LCD12864_SendByte(0xF0 & dat);
        LCD12864_SendByte(0xF0 & (dat<<4));
        GPIO_ResetBits(GPIOD,GPIO_Pin_7);
}

void LCD12864_SendByte(u8 dat)
{
        u8 i;
        GPIO_SetBits(GPIOD,GPIO_Pin_6);
        LCD12864_SCK_HIGH();
        for(i=0;i<8;i++)
        {
               
                if((dat<<i)&0x80)
                {
                        GPIO_SetBits(GPIOD,GPIO_Pin_6);
                }
                else
                {
                        GPIO_ResetBits(GPIOD,GPIO_Pin_6);
                }
                LCD12864_SCK_LOW();
                delay_us(200);
                LCD12864_SCK_HIGH();
                delay_us(100);
        }
}

void LCD12864_SCK_LOW(void)
{
        GPIO_ResetBits(GPIOD,GPIO_Pin_5);
}

void LCD12864_SCK_HIGH(void)
{
        GPIO_SetBits(GPIOD,GPIO_Pin_5);
}

大神看看是哪里出了问题啊!!急等
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
snailmoving
1楼-- · 2019-12-26 00:43
自己顶一下,求大神帮忙啊
rogerllg
2楼-- · 2019-12-26 05:37
不同的液晶初使化函数是不一样,自己确认下初使化寄存器对不对吧~
moouse
3楼-- · 2019-12-26 09:57
你要看LCD使用的是哪家的芯片,一般都是兼容的,都是SPI接口,怎么用GPIO模拟呢
moouse
4楼-- · 2019-12-26 12:41
GPIO_InitStructure.GPIO_Pin = 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(GPIOD,&GPIO_InitStructure);
moouse
5楼-- · 2019-12-26 15:09
 精彩回答 2  元偷偷看……
gaolf_2012
6楼-- · 2019-12-26 16:50
片选是高选中?

一周热门 更多>