打印

RA8806液晶320×240显示驱动问题

[复制链接]
2293|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近需要做个320×240液晶的电路,主芯片是STM32F103ZET6。选用的液晶是3.3V的RA8806控制器的LCD320×240的蓝白色液晶。电路图按照手册上连接的。程序部分是根据厂家给的51程序改编而来。可是下进程序之后,液晶一直没有反应,后来查阅相关资料,数据线部分需要接上拉电阻,然后要配置成开漏输出。后来根据网上的资料进行了电路的修改,可是液晶依旧无法显示。液晶屏出厂时,厂家测试没有问题。最可能的就是程序有问题了。现把程序和电路贴出来,大家帮忙看看问题在哪里?
GPIO_InitTypeDef GPIO_InitStructure;
uint8_t d,h,m,s;
#define RS_H           GPIO_SetBits(GPIOE, GPIO_Pin_11)
#define RS_L      GPIO_ResetBits(GPIOE, GPIO_Pin_11)//PE11
#define WR_H      GPIO_SetBits(GPIOF, GPIO_Pin_15)
#define WR_L      GPIO_ResetBits(GPIOF, GPIO_Pin_15)//PF15
#define RD_H          GPIO_SetBits(GPIOG, GPIO_Pin_8)
#define RD_L      GPIO_ResetBits(GPIOG, GPIO_Pin_8)//PG8
#define CS1_H     GPIO_SetBits(GPIOA, GPIO_Pin_8)
#define CS1_L     GPIO_ResetBits(GPIOA, GPIO_Pin_8)//PA8
#define RST_H          GPIO_SetBits(GPIOD, GPIO_Pin_9)
#define RST_L     GPIO_ResetBits(GPIOD, GPIO_Pin_9)//PD9
#define BUSY      GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_8)

/***************************************************************************************
* 函 数 名   : LCD_PortInitial 液晶端口驱动配置
* 描    述   : 液晶端口配置为推挽输出。
* 输    入   : 无
* 输    出   : 无
* 返 回 值   : 无
***************************************************************************************/
void LCD_PortInitial(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
                         RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);

  GPIO_InitStructure.GPIO_Pin =        GPIO_Pin_8;
  //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//复用推挽输出
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//复用推挽输出
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =        GPIO_Pin_11;
  //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =        GPIO_Pin_15;
  //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOF, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =        GPIO_Pin_8;
  //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOG, &GPIO_InitStructure);
}
/***************************************************************************************
* 函 数 名   : LCD_DataInitial 液晶数据端口配置
* 描    述   : 液晶端口配置为开漏输出。
* 输    入   : 无
* 输    出   : 无
* 返 回 值   : 无
***************************************************************************************/
void LCD_DataInitial(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, 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_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //复用开漏输出
  GPIO_Init(GPIOG, &GPIO_InitStructure);
}
/***************************************************************************************
* 函 数 名   : delay_nms 延时程序
* 描    述   : ns延时程序
* 输    入   : 无
* 输    出   : 无
* 返 回 值   : 无
***************************************************************************************/
void delay_nms(uint16_t n)
{

  uint32_t f=n,k;
  for (; f!=0; f--)
  {
    for(k=0xFFF; k!=0; k--);
  }

}
/***************************************************************************************
* 函 数 名   : softrst 液晶软启动程序
* 描    述   : RST引脚(PD9)复位
* 输    入   : 无
* 输    出   : 无
* 返 回 值   : 无
***************************************************************************************/
void softrst(void)
{
         delay_nms(2);
         RST_L;//GPIO_ResetBits(GPIOD, GPIO_Pin_9);//rst=0;
         delay_nms(5);
         RST_H;//GPIO_SetBits(GPIOD, GPIO_Pin_9);//rst=1;
         delay_nms(5);  
}
/***************************************************************************************
* 函 数 名   : LCD_CmdWrite 写指令
* 描    述   : 无
* 输    入   : 液晶内部寄存器的命令
* 输    出   : 无
* 返 回 值   : 无
***************************************************************************************/
void LCD_CmdWrite(uint8_t Command)
{
  GPIOG->BRR = 0x00ff;
  GPIOG->BSRR  = Command; // 寄存器代码或数据送数据端口
  CS1_L;//GPIOC->BRR = LCD_CS1;  // CS1低CS2高有效
  RD_H;//GPIOC->BSRR = LCD_RD;
  RS_H;//GPIOC->BSRR = LCD_RS;
  WR_L;//GPIOC->BRR = LCD_WR;// 写置低
  delay_nms(20);
  WR_H;//GPIOC->BSRR = LCD_WR; // 写置高
  CS1_H;//GPIOC->BSRR = LCD_CS1;
}
/***************************************************************************************
* 函 数 名   : LCD_DataWrite 写数据
* 描    述   : 无
* 输    入   : 写对应的数据
* 输    出   : 无
* 返 回 值   : 无
***************************************************************************************/
void LCD_DataWrite(uint8_t DData)
{
  GPIOG->BRR = 0x00ff;
  GPIOG->BSRR  = DData ; //delay1(1);// 发送数据
  CS1_L;//GPIOC->BRR = LCD_CS1;// delay1(1);// 片选
  RD_H;//GPIOC->BSRR = LCD_RD;// delay1(1);//读失能
  RS_L;//GPIOC->BRR = LCD_RS; //delay1(1);//
  WR_L;//GPIOC->BRR = LCD_WR;  //delay1(1);// 写使能
  delay_nms(20);
  WR_H;//GPIOC->BSRR = LCD_WR; //delay1(1); //
  CS1_H;//GPIOC->BSRR = LCD_CS1;//delay1(1);//片选关
}
/***************************************************************************************
* 函 数 名   : LCD_CmdRead
* 描    述   : 读取对应寄存器的数据
* 输    入   : 写对应的寄存器
* 输    出   : 无
* 返 回 值   : 对应的数据
***************************************************************************************/
uint8_t LCD_CmdRead(uint8_t regname)
{                           
  uint16_t reg_rddata;
  uint8_t data;
  LCD_CmdWrite(regname);
  CS1_L;//GPIOC->BRR = LCD_CS1;//delay1(1);
  GPIOG->BSRR  = 0x00ff;
  RS_L;//GPIOC->BRR = LCD_RS; //delay1(1);
  WR_H;//GPIOC->BSRR = LCD_WR;// delay1(1);
  RD_L;//GPIOC->BRR = LCD_RD;//delay1(1);
  reg_rddata =  GPIOG->IDR ;//delay1(1);//需要修改度数据口数据
  delay_nms(20);
  RD_H;//GPIOC->BSRR = LCD_RD;//delay1(1);
  CS1_H;//GPIOC->BSRR = LCD_CS1;//delay1(1);//LCD_CS1 =1; // chip disable.
  delay_nms(50);
  data=(uint8_t)reg_rddata;
  return(data);
}


%)W`9Y@IFZFVE7O{$)}W{Z1.jpg (63.06 KB )

%)W`9Y@IFZFVE7O{$)}W{Z1.jpg
沙发
outstanding| | 2013-9-28 11:21 | 只看该作者
单步调试

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
yangliuzhu + 1 换了个模块了
板凳
yangliuzhu|  楼主 | 2013-9-28 11:42 | 只看该作者
端口输入输出,用串口程序测试过,可以读到要写的数据。手头没有示波器,只能根据现象来推测问题出在哪里。

使用特权

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

本版积分规则

2

主题

12

帖子

1

粉丝