首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2013-11-14 
LCM19264程序无法显示。连简单的字符或汉字也无法显示,不知道什么原因。还请大牛们多多指教。PB15---/CS3PB14

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;  
}


void SelectR(void)
{
  CS1_HI;
  CS2_HI;
  CS3_LOW; 
}
void LCM_Clear(void)
{
  uint16_t j,k;
  CS1_LOW;
  CS2_LOW;
  CS3_LOW;     

  for(k=0;k<8;k++)
  { 
 Write_CMD(LCD_PAGE_ADDR + k);
 Write_CMD(LCD_COL_ADDR);
 for(j=0;j<64;j++)
 {
  Write_Data(0xFF);
 }
}
CS1_HI;
  CS2_HI;
  CS3_HI;
}

void LCM_Init(void)
{
  SelectL(); 
  Write_CMD(0x3e);//OFF
  Write_CMD(0xc0);
  Write_CMD(0x3f);
  SelectM();
  Write_CMD(0x3e);
  Write_CMD(0xc0);
  Write_CMD(0x3f);
  SelectR();
  Write_CMD(0x3e);
  Write_CMD(0xc0);
  Write_CMD(0x3f);

  LCM_Clear();
}
void WriteChr16x16(uint8_t page,uint8_t col,uint8_t *chr)
{
  uint8_t i,j;
    uint8_t tmp;
  uint8_t col_t = col;  

  for(i=0;i<2;i++)
  {
  for(j=0;j<16;j++)
        {
            SelectL();
  Write_CMD(LCD_PAGE_ADDR + page + i);
  Write_CMD(LCD_COL_ADDR + col_t - 0);
  
  Write_Data(chr[i*16+j]);
  col_t++;
  tmp = Read_Data();
}
        col_t = col_t - 16;
}

}
uint8_t han[]={0x10,0x60,0x01,0x86,0x60,0x04,0x1C,0xE4,0x04,0x04,0x04,0xE4,0x1C,0x04,0x00,0x00, 
              0x04,0x04,0x7E,0x01,0x40,0x20,0x20,0x10,0x0B,0x04,0x0B,0x10,0x30,0x60,0x20,0x00
               };
void Disp_num(uint8_t ch1,uint8_t ch2)
{
   uint32_t i,j;
   uint8_t temp = 0xb8;
   
   SelectL();
   Write_CMD(0xc0);
   for(j=0;j<8;j++)
   {  
   Write_CMD(temp);
   Write_CMD(LCD_COL_ADDR);
   for(i=0;i<32;i++)
   {
  Write_Data(ch1);
  Write_Data(ch2);
 }
       temp++;
 }
 
}
   
int main()

   uint16_t tmp;  
   
   RCC_Config();
   LCM_GPIO_Config();
   delay_init(72);

   //LCM_Init();   
     LCM_Clear();
   Write_CMD(0x3f);//LCM ON    
     
     WriteChr16x16(0,0,han);
  // Disp_num(4,6);
   

   Write_CMD(0xB8);//page address
   Write_CMD(0x40);//col address 
    tmp = Read_Data();

   return 0;
}

STM32F103?LCM19264
[解决办法]
很多人刚用的时候都会忽略那个调对比度的电阻
调的看看
[解决办法]

引用:
这个还真想过了。早都怀疑了。不过还有个问题。液晶屏采用3.3V电压驱动。有点怀疑啊!

内部有升压的

热点排行