3428|6

5

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

stm32 lcd19264驱动程序无法显示,背光亮了,但是文字没法显示 [复制链接]

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

#include "Lcd_Driver.h"
#include "delay.h"
//function all         函数定义=========================

unsigned int Page;     //页 地址
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 = Page&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++;
             }
          }
}
此帖出自stm32/stm8论坛

最新回复

程序不对呀。  详情 回复 发表于 2014-12-23 22:26
点赞 关注(1)
 

回复
举报

5

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
头文件如下:
#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// PB.0
#define LCD_E   GPIOB, GPIO_Pin_1// PB.1
#define LCD_CS1 GPIOB, GPIO_Pin_2// PB.2
#define LCD_RST GPIOB, GPIO_Pin_3// PB.3
#define LCD_CS2 GPIOB, GPIO_Pin_4// PB.4
#define LCD_CS3 GPIOB, GPIO_Pin_5// PB.5
#define LCD_RW  GPIOB, GPIO_Pin_6// PB.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 Page_y,unsigned char *puts );

#endif
此帖出自stm32/stm8论坛
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我用的是stm32F407的开发板
此帖出自stm32/stm8论坛
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

4
 
在线等!!!!!!
此帖出自stm32/stm8论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

5
 
顶一个,求助~
此帖出自stm32/stm8论坛
 
 
 

回复

405

帖子

1

TA的资源

一粒金砂(高级)

6
 
可能是硬件的问题,屏上应该有一个对比度端口,可能是背景和显示一样了,具体看显示屏的手册
此帖出自stm32/stm8论坛
 
 
 

回复

164

帖子

0

TA的资源

一粒金砂(中级)

7
 
程序不对呀。
此帖出自stm32/stm8论坛
 
个人签名专业电子方案/zigbee方案设计,毕业设计。QQ:1397905781
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表