⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd4.11.txt

📁 这里面是st7529应用实例
💻 TXT
📖 第 1 页 / 共 2 页
字号:
{
 CLI(); //disable all interrupts
 port_init();
 SEI(); //re-enable interrupts
}
*******************************************************/


//////////////LCD复位程序//////////////////////
void LCD_Reset(void )
{  
  //*********
    AT91F_PIO_CfgOutput( AT91D_BASE_PIO_RST, AT91B_RST ) ;
    AT91F_PIO_SetOutput( AT91D_BASE_PIO_RST, AT91B_RST );
    delay(50);       //1us   根据RESET的时序图
    AT91F_PIO_ClearOutput( AT91D_BASE_PIO_RST, AT91B_RST );
    delay(50);       //1us
    AT91F_PIO_SetOutput( AT91D_BASE_PIO_RST, AT91B_RST ); 
   //************
    
}

/////////////////////LCD初始化//////////////////////////
void WriteDDRAM(void)
{
  LCD_CmdWrite(0x0030);
  LCD_CmdWrite(0x00AE);
  LCD_CmdWrite(0x0007);
  LCD_DataWrite(0x0019);
  LCD_CmdWrite(0x0031);
  LCD_CmdWrite(0x00CD);
  LCD_DataWrite(0x0020);
  delay(50000000);    //100ms  据说明书  不知道看的对不对????????
  LCD_CmdWrite(0x00FC);//写入RAM
  delay(50000000);    //100ms
  LCD_CmdWrite(0x00CC);//取消RAM
  LCD_CmdWrite(0x0030);
  LCD_CmdWrite(0x00AF);//显示
  delay(50000000);    //100ms
}

void ReadDDRAM(void)
{//read sram
   LCD_CmdWrite(0x0030);
   LCD_CmdWrite(0x0007);
   LCD_DataWrite(0x0019);
   
   LCD_CmdWrite(0x0031);
   LCD_CmdWrite(0X00CD);     
   LCD_DataWrite(0X0000);
   
   delay(500000); //100ms
  
   LCD_CmdWrite(0X00FD);  //start read
   delay(500000); //100ms
  
   LCD_CmdWrite(0X00CC); 
   LCD_CmdWrite(0x0030);  //ext=0          
}

void LCD_INITIAL(void)
{
  LCD_CmdWrite(0X0030);     // EXT=0 
  
  LCD_CmdWrite(0X0094);     // SLEEP OUT 
  
  LCD_CmdWrite(0X00D1);    // INTERNAL OSCILLATION ON
  LCD_CmdWrite(0X0094);     // SLEEP OUT
  
  LCD_CmdWrite(0X0020);    // POWER CONTROL SET
  LCD_DataWrite(0X000B);   //booster must be on fist
  delay(500000);    //1ms
  
  LCD_CmdWrite(0X0020);    // POWER CONTROL SET
  LCD_DataWrite(0X000B);   // TURN ON BOOSTER AND REFERENCE VOLTAGE GENERATION CIRCUIT ;0bh
  
  LCD_CmdWrite(0X0081);    //ELECTRONIC CONTROL  EC control
  LCD_DataWrite(0X0012);   //Vop=18.0V???????????????///////
  LCD_DataWrite(0X0012);   //Vop=18.0V
  //LCD_DataWrite(0X00D6);   //EC increase 1
  
  LCD_CmdWrite(0X00CA);     // DISPLAY CONTROL 
  LCD_DataWrite(0X0000);   // CL DIVIDING RATIO ,F1 AND F2 DRIVE PATTERN
  LCD_DataWrite(0X0027);   // DIVER DUTY  duty=160
  LCD_DataWrite(0X0000);   // FR INVERSE-SET VALUE
  
  LCD_CmdWrite(0X00A6);    //normal display

  LCD_CmdWrite(0X00BB);     // com scan direction
  LCD_DataWrite(0X0001);    //C0M0-->COM79,C0M159-->COM80
 
  LCD_CmdWrite(0X00BC);     //data scan direction
  LCD_DataWrite(0X0001);
  LCD_DataWrite(0X0000);
  LCD_DataWrite(0X01);
  
  LCD_CmdWrite(0X0075);    //LINE ADDRESS SET
  LCD_DataWrite(0X0000);
  LCD_DataWrite(0X009F);
  
  LCD_CmdWrite(0X0015);    //COLUMN ADDRESS SET
  LCD_DataWrite(0X0000);
  LCD_DataWrite(0X0054);
  
  LCD_CmdWrite(0X0031);    //ExtOut
  
  LCD_CmdWrite(0X0032);    //ANALOG CIRCUIT SET
  LCD_DataWrite(0X0000);   //OSC frequence
  LCD_DataWrite(0X0001);
  LCD_DataWrite(0X0000);
  
  LCD_CmdWrite(0X0034);    //SOFTWARE INITIAL
  
  ReadDDRAM();
  
  LCD_CmdWrite(0X0030);    //ExtIn
  
  delay(500000); //100ms
  LCD_CmdWrite(0X00AF);    //DISPLAY ON
  
 // for(i=0;i<LCD_YSIZE;i++)                  //初始化显示缓冲区,0xffff为全白色
      // {
         //  for(j=0;j<LCD_XSIZE/3+1;j++)
           //    ScanBuff[i][j] = 0xffff;
     //  }  
}

///////////////////设置XY坐标/////////////////////////
void SetAddress(unsigned char ucXpos,unsigned char ucYpos)
{
   
     LCD_CmdWrite(0X0030);   //EXT=0
       
     LCD_CmdWrite(0X0075);   //THIRD  COMMAND SET LINE ADDRESS 
     LCD_DataWrite(ucXpos);    //START LINE
     LCD_DataWrite(0x009F);  //END   LINE
       
     LCD_CmdWrite(0X0015);   //THIRD  COMMAND SET COLUMN ADDRESS 
     LCD_DataWrite(ucYpos);  //START COLUMN  
     LCD_DataWrite(0x0053);  //END   COLUMN
           
}

///////////////////////读写函数///////////////////////////////////////////

void LCD_DataWrite(unsigned char Data_Data)
{   
       *(AT91C_SMC_BASE_Data ) = Data_Data;  
}

void LCD_CmdWrite(unsigned char Cmd_Data)
{   
       *(AT91C_SMC_BASE_Cmd ) = Cmd_Data;   
}

unsigned char Data;
unsigned char LCD_DataRead(void)
{
    Data = *(AT91C_SMC_BASE_Data );    
    return Data;  //返回判断
}

///////////////////LCD的点测试程序/////////////////////
void WretPointTest(unsigned char ucData)
{
    unsigned char i=0,l=0;

    LCD_CmdWrite(0X0030);   //EXT=0
       
    LCD_CmdWrite(0X0075);   //THIRD  COMMAND SET LINE ADDRESS 
    LCD_DataWrite(0x0000);    //START LINE
    LCD_DataWrite(0X009f);  //END   LINE
       
    LCD_CmdWrite(0X0015);   //THIRD  COMMAND SET COLUMN ADDRESS 
    LCD_DataWrite(0X0000);  //START COLUMN  
    LCD_DataWrite(0X0054);  //END   COLUMN  设定行从0行开始到159行结束
       
    LCD_CmdWrite(0X005C);   //DATA WRITE  writing to memery
    
    LCD_CmdWrite(0X0031);   //EXT=1

       for(i=0;i<160;i++)       
       {         
           for (l=0;l<162;l++)
          { 
                 LCD_DataWrite(ucData);

           }
       }

}

//////////////////////在坐标XY处开始写入1个点的数据,并且保持处于这列中的其它两个值不变////////////////////////
void WriteXY(unsigned char ucXpos,unsigned char ucYpos,unsigned char ucData)
{
  
    
   unsigned char ucData1,ucData2,ucData3,ucCol=0,ucSet=0;
    
     
   ucCol=ucYpos/3;//[得到Y轴上的列,一些写一个列,一个列里包含3个数据]
   ucSet=ucYpos%3;//[得到块上3个点中的一个]
     SetAddress(ucXpos,ucCol);  //[因为选择了行不变,而列由3个竖条小列组成,所以一次要写3个点]

   LCD_CmdWrite(0x005D);       //从RAM内读坐标的值    

   LCD_DataRead();  //[空读一个头数据]

   ucData1=LCD_DataRead();   //[读取原来的3个点的值]
   ucData2=LCD_DataRead();
   ucData3=LCD_DataRead();
   
   SetAddress(ucXpos,ucCol);  //在指定坐标的RAM内写入显示值
   LCD_CmdWrite(0x005C);
     switch(ucSet)
     {
          case 0:
          ucData1=ucData;
          ucData2=0x0000;
          ucData3=0x0000;
              break;
          case 1:
              ucData1=0x0000;
              ucData2=ucData;
              ucData3=0x0000;
              break;
          case 2:
              ucData1=0x0000;
              ucData2=0x0000;
              ucData3=ucData;
              break;
     }
     
   LCD_DataWrite(ucData1);    //[写入新点的值,并且保持原来两个点的值不变]
     LCD_DataWrite(ucData2);
     LCD_DataWrite(ucData3);
          
}

/////////////////////////主程序////////////////////////////////////
void main(void)
{
  AT91F_InitSMC();
 LCD_Reset();
 LCD_INITIAL();
 //WriteDDRAM();
 delay(5000); //10ms
 //while(1)
 for(;;)
   {   
        LCD_CmdWrite(0x005C);
       LCD_DataWrite(0x0055);
       delay(5000); //10ms
       LCD_DataWrite(0x00AA);
       delay(5000); //10ms
       // asm("nop"); 
       // asm("nop"); 
        //asm("nop"); 
        //asm("nop"); 
        //asm("nop"); 
        //asm("nop"); 
            
       LCD_DataRead(); 
       
       //WretPointTest(0x0055);
       LCD_DataRead();
      // WriteXY(2,30,0x55);
   }
      
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -