[求助] STM32 1602液晶程序无显示!求高手!

yuanlily0106   2011-7-27 17:26 楼主

程序如下,急需高手指点!为什么程序下载到1602上无任何显示?

//LCD

#define   LOW_RS()    GPIOD->BRR =GPIO_Pin_6
#define   LOW_RW()    GPIOD->BRR =GPIO_Pin_5
#define   LOW_E()     GPIOD->BRR =GPIO_Pin_4 //端口位清除寄存器
#define   HI_RS()     GPIOD->BSRR=GPIO_Pin_6 //PE.0--(LCD)RS //端口位设置/清除寄存器
#define   HI_RW()     GPIOD->BSRR=GPIO_Pin_5 //PE.1--(LCD)RW
#define   HI_E()      GPIOD->BSRR=GPIO_Pin_4 //PE.2--(LCD)E 
#define   DATAOUT     GPIOG->ODR   //端口输出数据寄存器
                           //端口输入数据寄存器
                     
                                                                       
unsigned char LINE;
unsigned char ROW;
      
int LCD_DATA[12]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2E,0x56};//要显示的ASC码,0x30为0的ASC码
int i=0;

//判断液晶屏忙
void LCD_WAIT()
{
 /* GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOD, &GPIO_InitStructure); //PD口输入*/

  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOG, &GPIO_InitStructure); //PG口输入
 
 LOW_RS();  //命令
 HI_RW();   //读取
 do{
     HI_E();
     Delay(1);
  LOW_E();
     Delay(1);
 }while(GPIOG->IDR & 0x80);            
  LOW_E();
 
  /*GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure); //PD口OD输出*/

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
  GPIO_Init(GPIOG, &GPIO_InitStructure); //PG口OD输出


}

void LCD_ENABLE(unsigned char a)
{
 LCD_WAIT();
 LOW_RS();
 LOW_RW();
 LOW_E();
 DATAOUT=a;
 HI_E();
 Delay(1);
 LOW_E();
 Delay(1);
}

void LCD_init()
{
 LCD_ENABLE(0x01);   //清屏
 LCD_ENABLE(0x38);   //2行8位数据(显示模式)
 LCD_ENABLE(0x0F);  //显示功能开,显示光标
 LCD_ENABLE(0x06);  //写入新数据后光标右移
 LCD_ENABLE(0x0C); //显示开
 LCD_ENABLE(0x80);
 LCD_ENABLE(0x18); //屏幕整体左移一格,用于滚动显示
 //LCD_ENABLE(0xC0); 
}

void LCD_DISPLAY_INIT()
{
 LINE=1;
 ROW=1;
 if(LINE==1)
 {
  LCD_ENABLE(0x80);//第一行,若为第二行,则为:LCD_ENABLE(0xc0);
 }
 else
 {
  LCD_ENABLE(0xC0);
 }
}

void LCD_DISPLAY()
 {
      while(1)
       {    
          LCD_WAIT();
          HI_RS();
          LOW_RW();
          DATAOUT=0x30;//ASC码输出到端口
          HI_E();
          Delay(1);
          LOW_E();
          Delay(1);
        }
  LCD_ENABLE(0x0C);//关闭光标,显示
  LCD_ENABLE(0x01);
        Delay(1);
 }

 

 

回复评论 (1)

楼主似乎未使能端口时钟吧
点赞  2011-10-3 22:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复