OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10441|回复: 14

stm32 lcd19264驱动程序无法显示,背光亮了,但是文字没法显示

[复制链接]

35

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-8-15
在线时间
2 小时
发表于 2014-12-12 13:22:45 | 显示全部楼层 |阅读模式
5金钱
我用的是stm32f407的开发板,lcm19264b的液晶屏

求问哪里出了问题,难道是我的硬件连接错了吗?求高手指正!!!

头文件:
#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// B.0
#define LCD_E   GPIOB, GPIO_Pin_1// B.1 
#define LCD_CS1 GPIOB, GPIO_Pin_2// B.2
#define LCD_RST GPIOB, GPIO_Pin_3// B.3
#define LCD_CS2 GPIOB, GPIO_Pin_4// B.4 
#define LCD_CS3 GPIOB, GPIO_Pin_5// B.5
#define LCD_RW  GPIOB, GPIO_Pin_6// B.6
#define LCD_DATA_IN(x)  GPIOE->IDR=(GPIOE->IDR&0x807F)|((x & 0x00FF)<<7) //PE7~14,作为数据线
#define LCD_DATA_OUT(x)  GPIOE->ODR=(GPIOE->ODR&0x807F)|((x & 0x00FF)<<7) //PE7~14,作为数据线
#define LCD_PAGE_ADDR 0xb8 
#define LCD_COL_ADDR  0x40    

void wtcom(void);
void Locatexy(void);
void SelectChip1(void);
void SelectChip2(void);
void SelectChip3(void);
void WriteCommandL( unsigned char CommandByte );
void WriteCommandM( unsigned char CommandByte );
void WriteCommandR( unsigned char CommandByte );
void LcmClear( void );
void LcmInit( void );
void LcmPutDots( unsigned char DotByte );
void LcmPutHeng( unsigned char DotByte );
void LcmPutBMP( unsigned char *puts );
void LcmPutHz(unsigned char Col_x,unsigned char age_y,unsigned char *puts );

#endif

驱动程序:
#include "Lcd_Driver.h"
#include "delay.h"
//function all         函数定义=========================

unsigned int age;     //页 地址
unsigned int Col;   //列 地址
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_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  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_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        
        GPIO_SetBits(GPIOB, GPIO_Pin_0);
        GPIO_SetBits(GPIOB, GPIO_Pin_1);
        GPIO_SetBits(GPIOB, GPIO_Pin_2);
        GPIO_SetBits(GPIOB, GPIO_Pin_3);
        GPIO_SetBits(GPIOB, GPIO_Pin_4);
        GPIO_SetBits(GPIOB, GPIO_Pin_5);
        GPIO_SetBits(GPIOB, GPIO_Pin_6);
}

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

void SelectChip2(void) //选择第2屏
{
        GPIO_SetBits(LCD_CS1);
        GPIO_ResetBits(LCD_CS2);
        GPIO_SetBits(LCD_CS3);
        wtcom();
}
void SelectChip3(void) //选择第3屏

        GPIO_SetBits(LCD_CS1);
        GPIO_SetBits(LCD_CS2);
        GPIO_ResetBits(LCD_CS3);  
        wtcom();
}

void wtcom(void)
{
                                //BUSY_CS=0;  //坚鸿测试架增加指令,控制P0.7输入输出
        GPIO_ResetBits(LCD_RS);  //RS = 0;         //指令
        GPIO_SetBits(LCD_RW);//RW = 1;
        //P0 = 0xFF;      //输出0xff以便读取正确
        GPIO_SetBits(LCD_E);//E  = 1;
        Delay(200);
        //while(P0 & 0x80);       //Status Read Bit7 = BUSY
        GPIO_ResetBits(LCD_E);//E  = 0;
        Delay(200);
        //GPIO_SetBits(LCD_CS);//BUSY_CS=1;
}

/********************************************************/
/*根据设定的坐标数据,定位LCM上的下一个操作单元位置     */
/********************************************************/
void Locatexy(void)
{
        
        unsigned char x,y;
        switch (Col&0xc0)       /*  col.and.0xC0        */
        {                       /*条件分支执行          */
          case 0:                                 {SelectChip1();break;}/*左区  */
          case 0x40:      {SelectChip2();break;}/*中区  */
          case 0x80:      {SelectChip3();break;}/*右区  */
        }
        x = Col&0x3F|0x40;      /* col.and.0x3f.or.Set Y Address*/
        y = age&0x07|0xB8;     /* row.and.0x07.or.set Page     */
        wtcom();                /* waitting for enable  */
        GPIO_ResetBits(LCD_RS);//RS = 0;                 //指令
        GPIO_ResetBits(LCD_RW);//RW = 0;                 //写
        LCD_DATA_OUT(y);                 //设置页面地址
        GPIO_SetBits(LCD_E);//E  = 1;
        Delay(200);
        GPIO_ResetBits(LCD_E);//E  = 0;
        Delay(200);
        wtcom();                /*  waitting for enable */
        GPIO_ResetBits(LCD_RS);//RS = 0;
        GPIO_ResetBits(LCD_RW);//RW = 0;
        LCD_DATA_OUT(x);                 //设置列地址
        GPIO_SetBits(LCD_E);//E  = 1;
        Delay(200);
        GPIO_ResetBits(LCD_E);//E  = 0;
        Delay(200);
}

/***************************/
/*写指令                   */
/***************************/
void WriteCommandL( unsigned char CommandByte )
{
        SelectChip1();
        //P1 = CommandByte;
        GPIO_ResetBits(LCD_RS);//RS = 0;         //指令
        GPIO_ResetBits(LCD_RW);//RW = 0;
                                LCD_DATA_OUT(CommandByte);
        GPIO_SetBits(LCD_E);//E  = 1;
        Delay(200);
        GPIO_ResetBits(LCD_E);//E  = 0;
        Delay(200);
}

void WriteCommandM( unsigned char CommandByte )
{
        SelectChip2();
       //P1 = CommandByte;
        GPIO_ResetBits(LCD_RS);//RS = 0;         //指令
        GPIO_ResetBits(LCD_RW);//RW = 0;
                                LCD_DATA_OUT(CommandByte);
        GPIO_SetBits(LCD_E);//E  = 1;
        Delay(200);
        GPIO_ResetBits(LCD_E);//E  = 0;
        Delay(200);
}

void WriteCommandR( unsigned char CommandByte )
{
                                SelectChip3();
        //P1 = CommandByte;
        GPIO_ResetBits(LCD_RS);//RS = 0;         //指令
        GPIO_ResetBits(LCD_RW);//RW = 0;
                                LCD_DATA_OUT(CommandByte);
        GPIO_SetBits(LCD_E);//E  = 1;
        Delay(200);
        GPIO_ResetBits(LCD_E);//E  = 0;
        Delay(200);
}

/***************************/
/*读数据                   */
/***************************/
unsigned char ReadData( void )
{
                                unsigned char DataByte;
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
        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_PuPd = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
       
        Locatexy();     /*坐标定位,返回时保留分区状态不变      */
        GPIO_SetBits(LCD_RS);//RS = 1;         /*数据输出*/
        GPIO_SetBits(LCD_RW);//RW = 1;         /*读入  */
        LCD_DATA_OUT(0xFF);//P1 = 0xFF;              //输出0xff以便读取正确
        GPIO_SetBits(LCD_E);//E  = 1;         /*读入到LCM*/
        Delay(200);
        DataByte=LCD_DATA_OUT(0xFF);//DataByte = P1;  /*数据读出到数据口P1 */
        GPIO_ResetBits(LCD_E);//E  = 0;
        Delay(200);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
        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_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        return DataByte;
}


/***************************/
/*写数据                   */
/***************************/
void WriteData( unsigned char DataByte )
{
        Locatexy();     /*坐标定位,返回时保留分区状态不变      */
        GPIO_SetBits(LCD_RS);//RS = 1;         /*数据输出*/
        GPIO_ResetBits(LCD_RW);//RW = 0;         /*写输出  */
        Delay(200);
        LCD_DATA_OUT(DataByte);  /*数据输出到数据口 */
        GPIO_SetBits(LCD_E);//E  = 1;         /*写入到LCM*/
        Delay(200);
        GPIO_ResetBits(LCD_E);//E  = 0;
        Delay(200);
}

void LcmClear( void )
{
        Page = 0;
        Col  = 0;
        for(Page=0;Page<8;Page++)
                for(Col=0;Col<192;Col++)
                        WriteData(0x00);
}

void LcmInit( void )
{
        WriteCommandL(0x3f);    //开显示
        WriteCommandM(0x3f);
        WriteCommandR(0x3f);

        WriteCommandL(0xc0);    //设置起始地址=0
        WriteCommandM(0xc0);
        WriteCommandR(0xc0);

        WriteCommandL(0x3f);    //开显示
        WriteCommandM(0x3f);
        WriteCommandR(0x3f);

        LcmClear();
        Col = 0;
        Page= 0;
        Locatexy();
}

void LcmPutDots( unsigned char DotByte )
{
        Page = 0;
        Col  = 0;
        for(Page=0;Page<8;Page++)
        {
                for(Col=0;Col<100;Col++)
                {
                        WriteData( DotByte );
                        DotByte = ~DotByte;
                }
        }
}

void LcmPutHeng( unsigned char DotByte )
{
        Page = 0;
        Col  = 0;
        for(Page=0;Page<8;Page++)
        {
                for(Col=0;Col<192;Col++)
                {
                        WriteData( DotByte );
                }
        }
}

void LcmPutBMP( unsigned char *puts )
{
        unsigned int X=0;
        Page = 0;
        Col  = 0;
        for(Page=0;Page<8;Page++)
        {
                for(Col=0;Col<192;Col++)
                {
                        WriteData( puts[X] );
                        X++;
                }
        }
}

void LcmPutHz(unsigned char Col_x,unsigned char Page_y,unsigned char *puts )
{
        unsigned int X=0;
        for(Page=Page_y;Page<2+Page_y;Page++)
        {
            for(Col=Col_x;Col<16+Col_x;Col++)
             {
             WriteData( puts[X] );
             X++;
             }
          }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

35

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-8-15
在线时间
2 小时
 楼主| 发表于 2014-12-12 14:49:08 | 显示全部楼层
大神们,I need your help!!!!!!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-12-12 22:21:12 | 显示全部楼层
帮顶。。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2014-12-12 23:43:19 | 显示全部楼层
stm32f407板是拿来学习的。不会只能对自己说:这是学习用的,不会很正常啊!会了你还来学习吗?
回复

使用道具 举报

35

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-8-15
在线时间
2 小时
 楼主| 发表于 2014-12-14 20:19:07 | 显示全部楼层
回复【4楼】physh:
-----------------------------


实在不懂呀   T T
回复

使用道具 举报

35

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-8-15
在线时间
2 小时
 楼主| 发表于 2014-12-14 20:23:01 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,我的程序有问题吗。。实在搞不懂。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-12-14 22:39:32 | 显示全部楼层
回复【6楼】cjiamoo:
---------------------------------
看不出,呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

259

主题

806

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2012-10-28
在线时间
353 小时
发表于 2014-12-15 12:15:14 | 显示全部楼层
帮顶。。。。。

目前木有使用过这个lcd 的控制器哦,控制器的型号是5位数子 的,估计很高档的了哈
回复

使用道具 举报

35

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-8-15
在线时间
2 小时
 楼主| 发表于 2014-12-15 20:12:23 | 显示全部楼层
太奇怪了,我觉得程序应该没有问题了,但是一直是白屏啊,内容没法显示
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-4-3
在线时间
0 小时
发表于 2015-4-3 17:19:25 | 显示全部楼层
回复【2楼】cjiamoo:
---------------------------------
你好   我也在学习19264 也是遇到白屏不显示   可否告诉我一下你是怎么解决的这个问题吗   我的邮箱juniorcui@163.com   非常感谢  期待你的回复
回复

使用道具 举报

35

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-8-15
在线时间
2 小时
 楼主| 发表于 2015-4-13 17:14:33 | 显示全部楼层
回复【10楼】juniorcui:
---------------------------------
那些管脚你都接了吗?我一开始没有接滑动变阻器,所以显示不出来
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-4-3
在线时间
0 小时
发表于 2015-4-16 09:33:59 | 显示全部楼层
回复【11楼】cjiamoo:
---------------------------------
我这边是因为延时的问题   最后才发现   谢谢你的回复
回复

使用道具 举报

25

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2015-5-2
在线时间
59 小时
发表于 2015-9-23 19:00:13 | 显示全部楼层
回复【12楼】juniorcui:
---------------------------------
楼主,可以分享下19264的驱动代码么,现在需要用,谢谢了
回复

使用道具 举报

25

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2015-5-2
在线时间
59 小时
发表于 2015-9-24 21:41:46 | 显示全部楼层
回复【13楼】Draway:
---------------------------------
楼主可以分享下你的驱动代码么,回复【13楼】Draway:
---------------------------------我的邮箱:852211909@qq.com,楼主看到的话,分享下驱动代码噢,谢谢
回复

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2015-9-25 09:01:08 | 显示全部楼层
先确保你的硬件没问题吧,再确定驱动没问题,例如能画一个点,再确定取模没问题
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 09:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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