打印
[STM32]

stm32上接lcd19264屏,为啥老是没法显示

[复制链接]
2675|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cjiamoo|  楼主 | 2014-12-11 13:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
--------------------Lcd_Driver.h-----------------------
#######################################################
#include "stm32f4xx_conf.h"       
#include "stdint.h"
#include "stm32f4xx.h"
#include "stdint.h"
#ifndef __LCD_DRIVER_H
#define __LCD_DRIVER_H

#define LCD_RS  GPIOB, GPIO_Pin_0// PF.0
#define LCD_E   GPIOB, GPIO_Pin_1// PF.1
#define LCD_CS1 GPIOB, GPIO_Pin_2// PF.2
#define LCD_RST GPIOB, GPIO_Pin_3// PF.3
#define LCD_CS2 GPIOB, GPIO_Pin_4// PF.4
#define LCD_CS3 GPIOB, GPIO_Pin_5// PF.5
#define LCD_DATA(x)  GPIOE->ODR=(GPIOE->ODR&0x807F)|((x & 0x00FF)<<7) //PE7~14,作为数据线
#define LCD_PAGE_ADDR 0xb8
#define LCD_COL_ADDR  0x40   
void LCDPortSet(void); //LCD IO口配置
void LcdInit(void);   //初始化程序
void LcdClear(void); //清屏程序
void WriteChr16x16(u8 pag,u8 col, u8  *chr);  //写一个汉字   
#endif



--------------------Lcd_Driver.c-----------------------
#######################################################
#include "Lcd_Driver.h"
#include "fonts.h"
//function all         函数定义=========================
void LCDPortSet(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;                       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 // 最高输入速率50MHz
  GPIO_Init(GPIOE, &GPIO_InitStructure);                                 // 选择E端口,连接数据线

        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_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        GPIO_SetBits(GPIOF, GPIO_Pin_0);
        GPIO_SetBits(GPIOF, GPIO_Pin_1);
        GPIO_SetBits(GPIOF, GPIO_Pin_2);
        GPIO_SetBits(GPIOF, GPIO_Pin_3);
        GPIO_SetBits(GPIOF, GPIO_Pin_4);
        GPIO_SetBits(GPIOF, GPIO_Pin_5);
        GPIO_SetBits(GPIOF, GPIO_Pin_6);
}

void SelectChip1(void) //选择第1屏
{
        GPIO_ResetBits(LCD_CS1);
        GPIO_SetBits(LCD_CS2);
        GPIO_SetBits(LCD_CS3);
}

void SelectChip2(void) //选择第2屏
{
        GPIO_SetBits(LCD_CS1);
        GPIO_ResetBits(LCD_CS2);
        GPIO_SetBits(LCD_CS3);
}
void SelectChip3(void) //选择第3屏
{
        GPIO_SetBits(LCD_CS1);
        GPIO_SetBits(LCD_CS2);
        GPIO_ResetBits(LCD_CS3);  
}
void WriteCommand(u8 cmd)   //写命令
{     
        GPIO_ResetBits(LCD_RS);    //写命令
        //RW=0;  
        LCD_DATA(cmd);
        GPIO_SetBits(LCD_E);
        delay_us(10);
        GPIO_ResetBits(LCD_E);
}
void WriteData(u8  dat)  //写数据
{  
  GPIO_SetBits(LCD_RS);//写数据
        //RW=0;
        LCD_DATA(dat);//数据输出到数据口
  GPIO_SetBits(LCD_E);  //写入到LCD
  delay_us(10);
  GPIO_ResetBits(LCD_E);
}

void LcdClear(void) //清屏
{
        u16  j = 0;
        u16  k = 0;
        GPIO_ResetBits(LCD_CS1);
        GPIO_ResetBits(LCD_CS2);
        GPIO_ResetBits(LCD_CS3);  
        WriteCommand(LCD_PAGE_ADDR + 0);
        WriteCommand(LCD_COL_ADDR  + 0);
        for(k=0;k<8;k++)
        {
                WriteCommand(LCD_PAGE_ADDR+k);
                for(j=0;j<64;j++)  
                {
                        WriteData(0x00);
                }
        }
        GPIO_SetBits(LCD_CS1);
        GPIO_SetBits(LCD_CS2);
        GPIO_SetBits(LCD_CS3);  
}

void LcdInit(void) //初始化程序
{
        GPIO_ResetBits(LCD_RST);
        delay_us(20);
        GPIO_SetBits(LCD_RST);
        delay_us(5);
        GPIO_ResetBits(LCD_CS1);
        GPIO_ResetBits(LCD_CS2);
        GPIO_ResetBits(LCD_CS3);
        WriteCommand(0x3f);  //设置开显示命令
        WriteCommand(0xc0);//设置起始位置
        GPIO_SetBits(LCD_CS1);
        GPIO_SetBits(LCD_CS2);
        GPIO_SetBits(LCD_CS3);
        LcdClear();    //清屏
}
void WriteChr16x16(u8 pag,u8 col,u8 *chr) //写一个汉字
{
        u8 i = 0;
        u8 j = 0;
        u8 col_t = 0;
        WriteCommand(0xc0);
        col_t = col;
        for(i=0;i<2;i++)
        {
                for(j=0;j<16;j++)
                {
                        switch(col_t&0xc0)
                        {
                                case 0:
                                        SelectChip1();
                                        WriteCommand(LCD_PAGE_ADDR + pag + i);
                                        WriteCommand(LCD_COL_ADDR  + col_t - 0 );
                                        WriteData(chr[16*i + j]);
                                        col_t++;
                                        break;
                                case 0x40:
                                        SelectChip2();
                                        WriteCommand(LCD_PAGE_ADDR + pag + i);
                                        WriteCommand(LCD_COL_ADDR  + col_t - 64);
                                        WriteData(chr[16*i + j]);
                                        col_t++;
                                        break;
                                case 0x80:
                                        SelectChip3();
                                        WriteCommand(LCD_PAGE_ADDR + pag + i);
                                        WriteCommand(LCD_COL_ADDR  + col_t - 128);
                                        WriteData(chr[16*i + j]);
                                        col_t++;
                                        break;
                                default:  break;
                        }
                }
                col_t=col_t-16;
        }
}


编译通过了,但是不知道为什么就是没法在屏上显示我需要的内容

相关帖子

沙发
cjiamoo|  楼主 | 2014-12-11 13:16 | 只看该作者
------------------------------main.c-----------------------------------如下
########################################################################

#include "main.h"
#include "Lcd_Driver.h"
#include "delay.h"
u8 table[][32]={
/*--  文字:  我  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00,
0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00,
/*--  文字:  们  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x60,0xF8,0x07,0x00,0xF8,0x01,0x06,0x00,0x04,0x04,0x04,0xFC,0x00,0x00,
0x01,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,
/*--  文字:  都  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x26,0x20,0xFE,0x02,0x22,0xDA,0x06,0x00,
0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x00,
/*--  文字:  是  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x7F,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x7F,0x00,0x00,0x00,0x00,
0x81,0x41,0x21,0x1D,0x21,0x41,0x81,0xFF,0x89,0x89,0x89,0x89,0x89,0x81,0x81,0x00,
/*--  文字:  好  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,
0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,
/*--  文字:  孩  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x02,0x02,0x02,0xF2,0x8A,0x46,0x08,0x88,0xC8,0xA8,0x99,0x8E,0x88,0x48,0x28,0x00,
0x02,0x42,0x81,0x7F,0x00,0x00,0x88,0x88,0x44,0x44,0x22,0x11,0x28,0x44,0x82,0x00,
/*--  文字:  子  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*--  文字:  我  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00,
0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00,
/*--  文字:  们  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x60,0xF8,0x07,0x00,0xF8,0x01,0x06,0x00,0x04,0x04,0x04,0xFC,0x00,0x00,
0x01,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,
/*--  文字:  都  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x26,0x20,0xFE,0x02,0x22,0xDA,0x06,0x00,
0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x00,
/*--  文字:  是  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x7F,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x7F,0x00,0x00,0x00,0x00,
0x81,0x41,0x21,0x1D,0x21,0x41,0x81,0xFF,0x89,0x89,0x89,0x89,0x89,0x81,0x81,0x00,
/*--  文字:  好  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,
0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00
};
int main(void)
{  
u8 i = 0;
SystemInit();
delay_ms(5);
LCDPortSet();    //LCD口设置
LcdInit();  //LCM初始化程序
delay_ms(100);
while(1)
{
LCD_DATA(0x55);
delay_ms(5);
LCD_DATA(0xf0);
while(1)
{         
delay_ms(1000);
for(i=0;i<12;i++)
WriteChr16x16(0,i*16,table[i]);
for(i=0;i<12;i++)
WriteChr16x16(2,i*16,table[i]);
for(i=0;i<12;i++)
WriteChr16x16(4,i*16,table[i]);
for(i=0;i<12;i++)
WriteChr16x16(6,i*16,table[i]);
delay_ms(500);
}   
}  
}

使用特权

评论回复
板凳
cjiamoo|  楼主 | 2014-12-11 13:30 | 只看该作者
这是什么原因,求指正

使用特权

评论回复
地板
coody| | 2014-12-11 16:32 | 只看该作者
那就是STM32有问题,打电话找STM32的技术支持问问

使用特权

评论回复
5
cjiamoo|  楼主 | 2014-12-11 19:44 | 只看该作者
棘手。。

使用特权

评论回复
6
书的那页| | 2015-9-17 23:22 | 只看该作者
请问下 您的问题解决了么 ?我用的多和你一样的驱动程序 也不中啊 求指教啊

使用特权

评论回复
7
zhaoyu2005| | 2015-9-18 07:58 | 只看该作者
数据端口定义成输入,你在当51用么。解决问题的思维、能力有待提高

使用特权

评论回复
8
NE5532| | 2015-9-18 08:43 | 只看该作者
鬼影出来了么?能乱显么?楼主这种一口吃个胖子的程序调试方法注定导致失败,请看“程序调试黑宝书”,在本论坛侃单片机版面精华里找。

使用特权

评论回复
9
springvirus| | 2016-4-5 15:16 | 只看该作者
楼主的19264驱动成功了吗,偶也在弄这个
只是手头是5V的液晶,已用51驱动成功
stm32的3.3V不知是否能否驱动

使用特权

评论回复
10
ywjianghu| | 2017-1-27 09:54 | 只看该作者
springvirus 发表于 2016-4-5 15:16
楼主的19264驱动成功了吗,偶也在弄这个
只是手头是5V的液晶,已用51驱动成功
stm32的3.3V不知是否能否驱动 ...

看液晶屏的情况了。
我的5.5V和3.3V都可以驱动。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

17

帖子

0

粉丝