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

📄 12864_driver.c

📁 12864的avr单片机读写驱动
💻 C
字号:
/****************************************************************************
 **             - lcd_12864a_driver.c -
 **
 **     12864a型号的LCD驱动程序
 **
 **     
 **
**             mader:许利军
 **    
 **     File version: $2007.8.1$
 **
 ***************************************************************************/
#include "lcd_12864_driver.h"
#include "asc_code.h"

/******************************************基本函数**************************/



void LcdInit()
{ 
  __delay_cycles(1000);// 等待液晶进入工作状态
  LCD_12864A_RES = 0;
  __delay_cycles(1000);
  LCD_12864A_RES = 1; // 复位脚有个上升沿
  __delay_cycles(10);
  WriteControlData(0xa3);//LCD BIAS SET ( A2 1/8;A3 1/65DUTY)
  __no_operation();
  WriteControlData(0xa0);//ADC  select,NORMAL   0-->127
  __no_operation();
  WriteControlData(0xaf);// DISPLAY ON/OFF
  __no_operation();
  WriteControlData(0x2f);//power control(VB,VR,VF=1,1,1)
  __no_operation();
  WriteControlData(0x23); // VOLT REGULATOR RADIO SET
  __no_operation();
  WriteControlData(0x81);//ELECTRONIC VOLUME mode setting 100B 对比度命令
  __no_operation();
  WriteControlData(0x28);//REFERENCE VOLT REG  set
  __no_operation();
  WriteControlData(0xc0);//SHL SELECT
  __no_operation();
  WriteControlData(0xaf);//DISPLAY ON/OFF
  __no_operation();
  WriteControlData(0x40);// DISPLAY START LINE SET
  __no_operation();
 
  __no_operation();

}

void WriteControlData(unsigned char com)
{
  LCD_12864A_CS1 = 0;
  LCD_12864A_A0 = 0;
  ShiftData(com);
  LCD_12864A_CS1 = 1;
}

void WriteDisplayData(unsigned char dat)
{
  LCD_12864A_CS1 = 0;
  LCD_12864A_A0 = 1;
  ShiftData( dat );
  LCD_12864A_CS1 = 1;
}


void ShiftData(unsigned char dat)
{
  unsigned char s,temp;
  int i;
  LCD_12864A_SCL = 0;
  s = dat;
  for( i = 0 ;i<8; i++ )
  {
    LCD_12864A_SCL = 0;
    __no_operation();
    __no_operation();
    temp=s & 0x80;
    LCD_12864A_SI = (temp>>7);
    __no_operation();
    LCD_12864A_SCL = 1;
    s = s<<1;

  } 
}

void  Location(unsigned char x,unsigned char y)     
{
  WriteControlData(0xB0|y);                       //页地址设置 写命令
  __delay_cycles(1); 
  WriteControlData(0x10|(0x0F&(x>>4)));            //列高4位   写命令
  __delay_cycles(1); 
  WriteControlData(0x0F&x);                      //  列低4位   写命令
  __delay_cycles(1); 

}

void ClearSreen()
{
  uchar i,x,y;
  for( y = 0; y <8; y++ )                     //从0-8页
    for(x = 0;x <128;x ++)                    //从0-128列
    {
     Location(x,y);
     for (i=0;i<=15;i++)
     {
        WriteDisplayData(0);  
     }
     Location(x,y+1);
     for(i=16;i<32;i++)
     {
       WriteDisplayData(0);
     
     }
   }
  
}




//fb=1 时为反白显示
void WriteAbc(unsigned char x, unsigned char y ,unsigned char n, unsigned char fb)
{                                        
  uchar date1,i;
 
  Location(x,y);
  for (i=0;i<8;i++)
  {
    date1=table_aa[n*16+i];
    if(fb)
    {
      date1=255-date1;
    }
    WriteDisplayData(date1);
     __delay_cycles(10);
  }
  
  Location(x,y+1);
  for(i=8;i<16;i++)
  {
    date1=table_aa[n*16+i];
    if(fb)
      {
       date1=255-date1;
      }
      WriteDisplayData(date1);
      __delay_cycles(10);
  }
} 


void WriteNumber(unsigned char x, unsigned char y ,unsigned char n, unsigned char fb)
{                                        
  uchar date1,i;
 
  Location(x,y);
  for (i=0;i<8;i++)
  {
    date1=number[n*16+i];
    if(fb)
    {
      date1=255-date1;
    }
    WriteDisplayData(date1);
     __delay_cycles(10);
  }
  
  Location(x,y+1);
  for(i=8;i<16;i++)
  {
    date1=number[n*16+i];
    if(fb)
      {
       date1=255-date1;
      }
      WriteDisplayData(date1);
      __delay_cycles(10);
  }
} 


/*16*16汉字写入子程序fb=1 时为反白显示*/
void  WriteChinese(unsigned char x, unsigned char y ,unsigned char n, unsigned char fb)
{
  uchar date1,i;
 
  Location(x,y);
  for (i=0;i<=15;i++)
  {
    date1=table_ch[n*32+i];
    if(fb)
    {
      date1=255-date1;
    }
    WriteDisplayData(date1);
     __delay_cycles(10);
  }
  
  Location(x,y+1);
  for(i=16;i<32;i++)
  {
    date1=table_ch[n*32+i];
    if(fb)
      {
       date1=255-date1;
      }
      WriteDisplayData(date1);
      __delay_cycles(10);
  }
}


void WriteBmp(unsigned char x,unsigned char y,unsigned char fb ,unsigned char hang,unsigned char lie)
{
  uchar i=y,j=x,dat;
  
  for(i=y;i<y+hang/8;i++)
  { 
    
    for(j=x;j<x+lie;j++)
    {  Location(x+j,y+i);
       dat=table_bmp[i*lie+j];
       if(fb) {dat=255-dat;}
       WriteDisplayData(dat);      
    }
    
  }
  
}


/******************************************************************************/

⌨️ 快捷键说明

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