当前位置: 代码迷 >> 单片机 >> LCM19264程序无法显示。连容易的字符或汉字也无法显示,不知道什么原因。还请大牛们多多指教
  详细解决方案

LCM19264程序无法显示。连容易的字符或汉字也无法显示,不知道什么原因。还请大牛们多多指教

热度:118   发布时间:2016-04-28 15:13:10.0
LCM19264程序无法显示。连简单的字符或汉字也无法显示,不知道什么原因。还请大牛们多多指教。
PB15---/CS3
PB14---/CS2
PB13---/CS1
PB12---E
PB11---RW
PB10---RS
PB7-PB0 -------D7-D0
使用XRDSC-G19264DDYSWSD-1(A)显示屏。其中PB3、PB4与JTAG复用。但是已经关闭JTAG功能程序如下所示:不知道什么原因,连简单的字符都无法显示。清屏命令改成0xff。也没有显示。
#include "stm32f10x.h"
#include  "delay.h"

//#define Data_Bus(data) GPIOB->BSRR = (uint32_t)((((~data) & 0xFF)<<16) | data);

#define RS_LOW      GPIO_ResetBits(GPIOB,GPIO_Pin_10)
#define RS_HI       GPIO_SetBits(GPIOB,GPIO_Pin_10)
#define RW_LOW      GPIO_ResetBits(GPIOB,GPIO_Pin_11)
#define RW_HI       GPIO_SetBits(GPIOB,GPIO_Pin_11)
#define E_LOW       GPIO_ResetBits(GPIOB,GPIO_Pin_12)
#define E_HI        GPIO_SetBits(GPIOB,GPIO_Pin_12)
#define CS1_LOW     GPIO_ResetBits(GPIOB,GPIO_Pin_13)
#define CS1_HI      GPIO_SetBits(GPIOB,GPIO_Pin_13)
#define CS2_LOW     GPIO_ResetBits(GPIOB,GPIO_Pin_14)
#define CS2_HI      GPIO_SetBits(GPIOB,GPIO_Pin_14)
#define CS3_LOW     GPIO_ResetBits(GPIOB,GPIO_Pin_15)
#define CS3_HI      GPIO_SetBits(GPIOB,GPIO_Pin_15)

/* Instuction Table */
#define LCM_ON      0x3f
#define LCM_OFF     0x3e

#define LCD_PAGE_ADDR 0xb8 
#define LCD_COL_ADDR  0x40   


void Write_CMD(uint8_t cmd);


void Data_Bus(uint8_t data)
{
GPIOB->BSRR = (uint32_t)((((~data) & 0xFF)<<16) | data);
}

void RCC_Config(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
}

void LCM_GPIO_Config(void)
{
  GPIO_InitTypeDef lcm_gpio;

  AFIO->MAPR |= (0x02 << 24)|(0x00 << 4);
  lcm_gpio.GPIO_Pin = GPIO_Pin_All;                      
  lcm_gpio.GPIO_Speed = GPIO_Speed_50MHz;
  lcm_gpio.GPIO_Mode  = GPIO_Mode_Out_PP;   
  GPIO_Init(GPIOB,&lcm_gpio);
}
uint16_t Read_Data()
{
  uint16_t  tmp;

  E_HI;
  delay_us(1);
  E_LOW;
    delay_us(1);

  RW_HI;
    RS_HI;   
  
  delay_ms(1);
  E_HI;
  delay_ms(1);   

  GPIOB->CRL = 0x44444444;
  tmp = GPIO_ReadInputData(GPIOB);
  GPIOB->CRL = 0x33333333;
  delay_ms(1);
  E_LOW;
  RW_LOW;
  RS_LOW;

  return tmp;
}
void Wait_Ready(void)
{   
    uint8_t test;

  E_HI;
  delay_us(1);
  E_LOW;
  delay_us(1);
  RW_HI;
    RS_LOW;
  delay_ms(1);
  E_HI;
  delay_ms(1);

  Data_Bus(0xFF);

  GPIOB->CRL = 0x44444444;
  while((test = (uint8_t)GPIO_ReadInputData(GPIOB)) & 0x80 != 0);
  GPIOB->CRL = 0x33333333;
  delay_ms(1);
  E_LOW;
  RW_LOW;
  RS_HI;
}

void Write_CMD(uint8_t cmd)
{
  Wait_Ready();
  E_HI;
  delay_us(1);
  E_LOW;
  delay_us(1);
  RS_LOW; //instruction       
    RW_LOW; 
    delay_us(1);
  E_HI;
    delay_us(1);
    Data_Bus(cmd);  
    delay_ms(1);       
    E_LOW;
    delay_us(1);
    E_HI;
    RW_HI;
    RS_HI;
}

void Write_Data(uint8_t data)
{   
  Wait_Ready();
  E_HI;
  delay_us(1);
  E_LOW;
  delay_us(1);
  RS_HI;//data
  RW_LOW;//write    
  E_HI;
    Data_Bus(data);
  delay_ms(1);   
  E_LOW;
  delay_us(1);
  E_HI;
  RW_HI;
  RS_LOW;
}
void SelectL(void)
{
  CS1_LOW;
  CS2_HI;
  CS3_HI;  
}
void SelectM(void)
{
  CS1_HI;
  CS2_LOW;
  CS3_HI;   
}
  相关解决方案