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

📄 avrst7529.txt

📁 AVR驱动ST7529 AVR驱动ST7529 AVR驱动ST7529
💻 TXT
📖 第 1 页 / 共 2 页
字号:
  
  LCD_CmdWrite(0X31);     // EXT=1
  
  LCD_CmdWrite(0X32);    // ANALOG CIRCUIT SET 
  LCD_DataWrite(0X03);   // OSC FREQUENCEY ADJUSTMENT
  LCD_DataWrite(0X01);   // BOOSTER EFFICIENCY SET
  LCD_DataWrite(0X00);   // BIAS SETTING 
  DelayXms(10);
 
  LCD_CmdWrite(0X22);    // WEIGHTING
  LCD_DataWrite(0X03);   // WEIGHTING VALUE
  LCD_DataWrite(0X02);   // EDGE VALUE
  LCD_DataWrite(0X00);   // ENABLE FLAG
  
  LCD_CmdWrite(0X34);    // DITHERER OFF
  DelayXms(10);
    //===================================================== 
  
  //==================================================== 
  LCD_CmdWrite(0X20);    // SET GRAY VALUE
  
   LCD_DataWrite(0X00);  // START PARA  00
  LCD_DataWrite(0X03);  // START PARA  03 
  LCD_DataWrite(0X06);  // START PARA  06
  LCD_DataWrite(0X09);  // START PARA  09
  
  LCD_DataWrite(0X0B);  // START PARA  
  LCD_DataWrite(0X0D);  // START PARA
  LCD_DataWrite(0X0E);  // START PARA 
  LCD_DataWrite(0X0F);  // START PARA
 
  LCD_DataWrite(0X10);  // START PARA  
  LCD_DataWrite(0X11);  // START PARA
  LCD_DataWrite(0X12);  // START PARA 
  LCD_DataWrite(0X14);  // START PARA
  
  LCD_DataWrite(0X16);  // START PARA  
  LCD_DataWrite(0X18);  // START PARA
  LCD_DataWrite(0X1B);  // START PARA 
  LCD_DataWrite(0X1F);  // START PARA
//******************************************

  LCD_CmdWrite(0X21);    // SET GRAY VALUE
  
   LCD_DataWrite(0X00);  // START PARA  00
  LCD_DataWrite(0X03);  // START PARA  03 
  LCD_DataWrite(0X06);  // START PARA  06
  LCD_DataWrite(0X09);  // START PARA  09
  
  LCD_DataWrite(0X0B);  // START PARA  
  LCD_DataWrite(0X0D);  // START PARA
  LCD_DataWrite(0X0E);  // START PARA 
  LCD_DataWrite(0X0F);  // START PARA
 
  LCD_DataWrite(0X10);  // START PARA  
  LCD_DataWrite(0X11);  // START PARA
  LCD_DataWrite(0X12);  // START PARA 
  LCD_DataWrite(0X14);  // START PARA
  
  LCD_DataWrite(0X16);  // START PARA  
  LCD_DataWrite(0X18);  // START PARA
  LCD_DataWrite(0X1B);  // START PARA 
  LCD_DataWrite(0X1F);  // START PARA
  
//******************************************

  LCD_CmdWrite(0X30);    // EXT=1
  
  LCD_CmdWrite(0XBC);   // FORTH  COMMAND SET DATA SCAN DRECTION 
  LCD_DataWrite(0X01);  // NORMAL/REVERSE DISPLAY OF ADDRESS AND ADDRESS SCAN DRICTION 
  LCD_DataWrite(0X00);  // RGB ARRANGEMENT    
  LCD_DataWrite(0X02);  // 32 GRAY-SCALE 65K
  
  
  LCD_CmdWrite(0X75);   // THIRD  COMMAND SET LINE ADDRESS 
  LCD_DataWrite(0X00);  // START LINE
  LCD_DataWrite(0X9f);  // END   LINE
  DelayXms(5);
  
  LCD_CmdWrite(0X15);   // THIRD  COMMAND SET COLUMN ADDRESS 
  LCD_DataWrite(0X00);  // START COLUMN
  LCD_DataWrite(0X35);  // END   COLUMN
  DelayXms(5);
 
   LCD_CmdWrite(0x030);
   LCD_CmdWrite(0x07);
   LCD_DataWrite(0x19);
   LCD_CmdWrite(0x031);
   LCD_CmdWrite(0XCD);     
   LCD_DataWrite(0X00);
   DelayXms(20);
   DelayXms(20);
   DelayXms(20);
   LCD_CmdWrite(0XFD);
   DelayXms(20);
   DelayXms(20);  
   DelayXms(20);
   LCD_CmdWrite(0XCC); 
 
   LCD_CmdWrite(0x30);
           
}

//////////////LCD复位程序//////////////////////
void LCD_Reset(void )
{  
    LCD_RST1;
    DelayXms(10);
    LCD_RST0;
    DelayXms(10);
    LCD_RST1;
}
//////////////LCD写命令////////////////////////
void LCD_CmdWrite(unsigned char Cmd_Data)
{
    LCD_RD1;
    /*LCD_ChkBusy();*/         //Call LCD_ChkBusy to Check Busy Bit
    LCD_Command = Cmd_Data;
    LCD_RS0;    //RS=0  写命令                   
    LCD_CS0;
    LCD_WR1;
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    LCD_WR0;
} 
//////////////LCD写数据//////////////////////////////
void LCD_DataWrite(unsigned char Data_Data)
{
      DDRD=0xFF; //写入
    /*LCD_ChkBusy(); */      //Call LCD_ChkBusy to Check Busy Bit
    LCD_RD1;
    LCD_Data = Data_Data;
    LCD_RS1;         //RS=1 写数据          
    LCD_CS0;
    LCD_WR1;
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    LCD_WR0;
} 

///////////////////LCD读数据/////////////////////////////
unsigned char LCD_DataRead(void)
{
    unsigned char Dat_m=0;
    
    DDRD=0x00;  //读出

    LCD_CS1;
    //LCD_Data=0XFF;    //清P1, 注意WR=1或CS=1; 
    LCD_RS1;                     
    LCD_CS0;
    LCD_WR1;
    LCD_RD1;
    NOP();
    NOP();
   LCD_RD0;
   NOP();
   NOP();
   Dat_m=LCD_Data_Out;
   LCD_RD1;
   NOP();
   NOP();
   return  Dat_m;
}                   //第一个数据是“0xed”,后面是DDRAM数据。



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

    LCD_CmdWrite(0X30);   //EXT=0
       
    LCD_CmdWrite(0X75);   //THIRD  COMMAND SET LINE ADDRESS 
    LCD_DataWrite(00);    //START LINE
    LCD_DataWrite(0X9f);  //END   LINE
       
    LCD_CmdWrite(0X15);   //THIRD  COMMAND SET COLUMN ADDRESS 
    LCD_DataWrite(0X00);  //START COLUMN  
    LCD_DataWrite(0X35);  //END   COLUMN  设定行从0行开始到159行结束
       
    LCD_CmdWrite(0X5C);   //DATA WRITE 


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

           }
       }

}

//////////////////////////LCD显示汉字/////////////////////////////////////
char  DisPlay(uchar ucStartX,uchar ucStartY,const uchar ucDisTable[],uchar ucFontWide,uchar ucFontHeight)
{
    unsigned char ucLine=0,ucCol=0;
    unsigned int uiPos=0;
    //unsigned char ucPos=0;
    if((ucStartX+ucFontWide)>160 || ((ucStartY+ucFontHeight)>160))    /*显示边界*/
    {
        return 1;     
    }
    for(ucLine=0;ucLine<ucFontHeight;ucLine++)
    {
        for(ucCol=0;ucCol<ucFontWide;ucCol++)
        {
            // ucPos=ucCol/8+(ucLine*(ucFontHeight/8));

           if( (ucDisTable[(uiPos>>3)] & (1<<(7-(ucCol%8)))) >0)
           {
             // SetWritePos(ucStartX+ucCol,ucStartY+ucLine);
                   WriteXY(ucStartX+ucCol,ucStartY+ucLine,0xff);
           }
           uiPos++;
        }
        
    }
     
   return 0;
}

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

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

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

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

///////////////////设置XY坐标/////////////////////////
void SetAddress(unsigned char ucXpos,unsigned char ucYpos)
{
   
     LCD_CmdWrite(0X30);   //EXT=0
       
     LCD_CmdWrite(0X75);   //THIRD  COMMAND SET LINE ADDRESS 
     LCD_DataWrite(ucXpos);    //START LINE
     LCD_DataWrite(159);  //END   LINE
       
     LCD_CmdWrite(0X15);   //THIRD  COMMAND SET COLUMN ADDRESS 
     LCD_DataWrite(ucYpos);  //START COLUMN  
     LCD_DataWrite(0x53);  //END   COLUMN
           
}

/////////////////////////主程序////////////////////////////////////
void main(void)
{
 uchar jj;
 init_devices();
 LCD_Reset();
 LCD_INITIAL();
 DelayXms(10);
 while(1)
   {
       LCD_CmdWrite(0XAF);   //Display on
       
       WretPointTest(0x00);
    
        LCD_CmdWrite(0XBC);   //FORTH  COMMAND SET DATA SCAN DRECTION 
        LCD_DataWrite(0X00);  //NORMAL/REVERSE DISPLAY OF ADDRESS AND ADDRESS SCAN DRICTION 
        LCD_DataWrite(0X00);  // RGB ARRANGEMENT    
        LCD_DataWrite(0X02);  // 32 GRAY-SCALE 3B3P
        
        WretPointTest(0x00);
   //    while(1);
       
       DisPlay(6,20,XiaoXin,144,104);
       //DisPlay(行地址[0-159],小列地址[0-159],数组,行长度X,列长度Y);
   // DisPlay(30,47,ucLi,32,32);
     //DisPlay(30,83,ucDian,32,32);
   // DisPlay(30,118,ucZi,32,32);
       
       while(1)
       {
           led5_on();
         DelayXms(100);//延时1S
         led5_off();
         DelayXms(100);    
       }
   }
}


Re:[原创]使用AVR驱动ST7529芯片点亮液晶的程序
请问
LCD_CmdWrite(0X30); // EXT=1

LCD_CmdWrite(0XBC); // FORTH COMMAND SET DATA SCAN DRECTION 
LCD_DataWrite(0X01); // NORMAL/REVERSE DISPLAY OF ADDRESS AND ADDRESS SCAN DRICTION 
LCD_DataWrite(0X00); // RGB ARRANGEMENT 
LCD_DataWrite(0X02); // 32 GRAY-SCALE 65K
我把他改成
LCD_CmdWrite(0X30); // EXT=1

LCD_CmdWrite(0XBC); // FORTH COMMAND SET DATA SCAN DRECTION 
LCD_DataWrite(0X01); // NORMAL/REVERSE DISPLAY OF ADDRESS AND ADDRESS SCAN DRICTION 
LCD_DataWrite(0Xff); // 这里我做了修改
LCD_DataWrite(0X02); // 32 GRAY-SCALE 65K

我再把值改回去以后,屏幕好像就不能回复到原来的底色拉?
我要改变背景的颜色,应该这么做

⌨️ 快捷键说明

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