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

📄 lcd_12864a_driver.c

📁 裸片12864
💻 C
字号:
/****************************************************************************
 **             - lcd_12864a_driver.c -
 **
 **     12864a型号的LCD驱动程序
 **
 **     
 **
**             mader:高其良
 **    
 **     File version: $2007.7.5$
 **
 ***************************************************************************/


#include "lcd_12864a_driver.h"

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

/*8bit写入*/
void Lcd12864aWrite8Bit(unsigned char byte)
{
  unsigned char temp;
  
  for(temp=8;temp>0;temp--)
  {
    LCD_12864A_SCL = 0;    
    LCD_12864A_SI = (byte&0x80)>>7; 
    byte = byte<<1;
    LCD_12864A_SCL = 1;
  }
}

/*写数据*/
void Lcd12864aWdat(unsigned char dat)
{
  LCD_12864A_CS1 = 0;
  LCD_12864A_A0  = 1;
  Lcd12864aWrite8Bit(dat);
  LCD_12864A_CS1 = 1;
}

/*写命令*/
void Lcd12864aWcom(unsigned char com_type,unsigned char format,unsigned com)
{
  LCD_12864A_CS1 = 0;
  LCD_12864A_A0  = 0;
  Lcd12864aWrite8Bit((com_type&(~format))|(com&format));
  LCD_12864A_CS1 = 1;
}

/****************************************扩展函数*******************************************/

/*初始化函数*/
void Lcd12864aInitializtion()
{
  LCD_12864A_IO_INITIALIZTION();  
  LCD_12864A_RES = 1;
  _NOP_ms(10);
  LCD_12864A_RES = 1;
  _NOP_ms(10);
  Lcd12864aWcom(LCD_12864A_RESET,0x00);
  Lcd12864aWcom(LCD_12864A_BIAS,0x01);
  Lcd12864aWcom(LCD_12864A_ADC,0x00);
  Lcd12864aWcom(LCD_12864A_OFF_ON,0x01);
  Lcd12864aWcom(LCD_12864A_POWER,0x07);
  Lcd12864aWcom(LCD_12864A_INTERNAL_RESISTOR,0x03);
  
  Lcd12864aWcom(LCD_12864A_STATIC_INDICATOR_H,0x01);
  Lcd12864aWcom(LCD_12864A_STATIC_INDICATOR_L,0x03);
  Lcd12864aWcom(LCD_12864A_ENTIRE_DISPLAY_OFF_ON,0x00);
  
  Lcd12864aWcom(LCD_12864A_BRIGHTNESS_H,0x00);
  Lcd12864aWcom(LCD_12864A_BRIGHTNESS_L,0x26);
  Lcd12864aWcom(LCD_12864A_OUTPUT_STATUS,0x00);
  Lcd12864aWcom(LCD_12864A_OFF_ON,0x01);
  Lcd12864aWcom(LCD_12864A_NORMAL_REVERSE,0x00);
  Lcd12864aWcom(LCD_12864A_START_LINE,0x00);  
}

/*睡眠模式*/
void Lcd12864aSleepMode()
{
  Lcd12864aWcom(LCD_12864A_STATIC_INDICATOR_H,0x00);
  Lcd12864aWcom(LCD_12864A_OFF_ON,0x00);
  Lcd12864aWcom(LCD_12864A_ENTIRE_DISPLAY_OFF_ON,0x01);
}

/*Standby模式*/
void Lcd12864aStandbyMode()
{
  Lcd12864aWcom(LCD_12864A_STATIC_INDICATOR_H,0x01);
  Lcd12864aWcom(LCD_12864A_STATIC_INDICATOR_L,0x03);
  Lcd12864aWcom(LCD_12864A_OFF_ON,0x00);
  Lcd12864aWcom(LCD_12864A_ENTIRE_DISPLAY_OFF_ON,0x01);
}

/*定位函数*/
void Lcd12864aLocate(unsigned char page,unsigned char column)
{
  Lcd12864aWcom(LCD_12864A_PAGE,0x0f&page);
  Lcd12864aWcom(LCD_12864A_COLUMN_H,column>>4);
  Lcd12864aWcom(LCD_12864A_COLUMN_L,column);
}

/*清屏函数*/
void Lcd12864aCls()
{
  unsigned char temp1,temp2;
  for(temp1=0;temp1<9;temp1++)
  {
    Lcd12864aLocate(temp1,0x00);
    for(temp2=0;temp2<128;temp2++)
    {
      Lcd12864aWdat(0x00);
    }
  }
}

/****************************************常用函数*******************************************/

/*ASC码输出*/
void Lcd12864aAscPrintf(unsigned char page,unsigned char column,unsigned char __flash *p)
{ 
  unsigned char temp;
  
  Lcd12864aLocate(page,column);
  for (temp=0;temp<8;temp++)
  {
    Lcd12864aWdat(p[temp]);
  }
  Lcd12864aLocate(page+1,column);
  for (temp=8;temp<16;temp++)
  {
    Lcd12864aWdat(p[temp]);
  }
}

/*汉字输出*/
void Lcd12864aCcharPrintf(unsigned char page,unsigned char column,unsigned char __flash *p)
{
  unsigned char temp;
  
  Lcd12864aLocate(page,column);
  for (temp=0;temp<16;temp++)
  {
    Lcd12864aWdat(p[temp]);
  }
  Lcd12864aLocate(page+1,column);
  for (temp=16;temp<32;temp++)
  {
    Lcd12864aWdat(p[temp]);
  }
}

/*BMP图象输出*/
void Lcd12864aBmpPrintf(unsigned char page,unsigned char column,unsigned char __flash *p)
{
  unsigned char width,height;
  unsigned int temp = 0x02;
  
  for(height=0;height< p[1]/8+((p[1]%8!=0x00)&0x01);height++)
  {
    Lcd12864aLocate(page+height,column);
    for(width=0;width<p[0];width++)
    {
      Lcd12864aWdat(p[temp]);
      temp++;
    }
  } 
}

/*数字输出*/
void Lcd12864aNumberPrintf(unsigned char page,unsigned char column,unsigned char __flash *p,unsigned int s)
{
  unsigned char tk,k,h,t;
  tk=(unsigned char)(s/10000);s=s-tk*10000;
  k=(unsigned char)(s/1000);s=s-k*1000;
  h=(unsigned char)(s/100);s=s-h*100;
  t=(unsigned char)(s/10);s=s-t*10;
  if (tk!=0) Lcd12864aAscPrintf(page,column,p+16*'0'-32*16+16*tk),column=column+8;
  if (k!=0||tk!=0)  Lcd12864aAscPrintf(page,column,p+16*'0'-32*16+16*k),column=column+8;
  if (h!=0||k!=0||tk!=0)  Lcd12864aAscPrintf(page,column,p+16*'0'-32*16+16*h),column=column+8;
  if (t!=0||h!=0||k!=0||tk!=0)  Lcd12864aAscPrintf(page,column,p+16*'0'-32*16+16*t),column=column+8;
  Lcd12864aAscPrintf(page,column,p+16*'0'-32*16+16*s);
}

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

⌨️ 快捷键说明

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