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

📄 12864lcd.c

📁 C51驱动nrf24l01无线发送
💻 C
字号:
/*******************************************************************************
名    称:12864液晶操作程序
功    能:本c文件封装了对12864液晶的一些简单的基本读写操作.
封装函数:
        void Lcd_WriteCmd(unsigned char a);               //写指令
        void Lcd_WriteData(unsigned char a);              //写数据
        int Lcd_ReadCmd();                                //读指令
        int Lcd_ReadData();                               //读数据
        void Lcd_Init();                                  //初始化液晶
        void Lcd_XY(unsigned char a,unsigned char b);     //设定光标位置
        void Clear_GDRAM(void);                           //清除液晶GDRAM中的随机数据
        void Draw_PM(const uchar *ptr);                   //在整个液晶屏幕上画图
        void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp);   //显示一个16*16大小的图形
作    者:胡静涛
最后修改时间:2011年7月25号
备注:该程序应在1M的系统时钟下运行,读忙信号函数已经被封装到除读指令函数以外的函数
     中.
典型应用:
          Lcd_XY( 1 , 1 );
          i = 0;
          while( num1[i] != '\0' )
          {
                  Lcd_WriteData( num1[i] );
                  i++;		
          } 
以上函数均进行测试可以正常使用
*******************************************************************************/
#include "12864LCD.h"
#include "define.h"




//******************************************************************************
//12864液晶读指令
//典型应用 读忙标志:while(Lcd_ReadCmd() & 0x80);
//******************************************************************************
int Lcd_ReadCmd()
{
  int temp;
  
  //LCD12864_CMDDIR;  
  //LCD12864_DATADIR = 0X00;
  LCD12864_LCDRS_0;
  LCD12864_LCDWR_1;
  LCD12864_LCDEN_0;
  //_NOP();
	delay_ms(1);
  LCD12864_LCDEN_1;
  //_NOP();
  //_NOP();
	delay_ms(1);
	delay_ms(1);
  temp = LCD12864_DATAIN;
  LCD12864_LCDEN_0;
  
  return temp;
}




//******************************************************************************
//12864液晶读数据
//******************************************************************************
int Lcd_ReadData()
{
  int temp;
  while(Lcd_ReadCmd() & 0x80);                     //读忙信号
  //LCD12864_DATADIR = 0X00;
  //LCD12864_CMDDIR; 
  LCD12864_LCDRS_1;
  LCD12864_LCDWR_1;
  LCD12864_LCDEN_0;
  //_NOP();
	delay_ms(1);
  LCD12864_LCDEN_1;
  //_NOP();
  //_NOP();
	delay_ms(1);
	delay_ms(1);
  temp = LCD12864_DATAIN;
  LCD12864_LCDEN_0;
  
  return temp;
}



//******************************************************************************
//12864液晶写指令
//******************************************************************************
void Lcd_WriteCmd(uchar a)
{
  while(Lcd_ReadCmd() & 0x80);                     //读忙信号
  //LCD12864_DATADIR = 0XFF;
  //LCD12864_CMDDIR;  
  LCD12864_LCDRS_0;
  LCD12864_LCDWR_0;
  LCD12864_LCDEN_0;
  //_NOP();
	delay_ms(1);
  LCD12864_DATA = a;
  //_NOP();
	delay_ms(1);
  LCD12864_LCDEN_1;
  //_NOP();
  //_NOP();	
	delay_ms(1);
	delay_ms(1);
  LCD12864_LCDEN_0;
}



//******************************************************************************
//12864液晶写数据
//******************************************************************************
void Lcd_WriteData(uchar a)
{
  while(Lcd_ReadCmd() & 0x80);                     //读忙信号
  //LCD12864_DATADIR = 0XFF;
  //LCD12864_CMDDIR;
  LCD12864_LCDRS_1;
  LCD12864_LCDWR_0;
  LCD12864_LCDEN_0;
  //_NOP();
	delay_ms(1);
  LCD12864_DATA = a;
  //_NOP();
	delay_ms(1);
  LCD12864_LCDEN_1;
  //_NOP();
  //_NOP();
	delay_ms(1);
	delay_ms(1);
  LCD12864_LCDEN_0;
}



//******************************************************************************
//12864液晶初始化
//******************************************************************************
void Lcd_Init()
{
  Lcd_WriteCmd(0x30);
  Lcd_WriteCmd(0x0c);
  Lcd_WriteCmd(0x01);
  Lcd_WriteCmd(0x80);  
}

//******************************************************************************
//12864液晶光标地址
//******************************************************************************
void Lcd_XY(unsigned char a,unsigned char b)
{
  switch (a)
  {
  case 1:
    a = 0x80;
    break;
  case 2:
    a = 0x90;
    break;
  case 3:
    a = 0x88;
    break;
  case 4:
    a = 0x98;
    break;
  }
  Lcd_WriteCmd(a + b - 1);
}

//******************************************************************************
//清除液晶GDRAM中的随机数据
//******************************************************************************
void Clear_GDRAM(void)
{
  uchar i,j,k;
  Lcd_WriteCmd(0x34);        //打开扩展指令集
  i = 0x80;            
  for(j = 0;j < 32;j++)
  {
    Lcd_WriteCmd(i++);
    Lcd_WriteCmd(0x80);
    for(k = 0;k < 16;k++)
    {
      Lcd_WriteData(0x00);
    }
  }
  i = 0x80;
  for(j = 0;j < 32;j++)
  {
    Lcd_WriteCmd(i++);
    Lcd_WriteCmd(0x88);	   
    for(k = 0;k < 16;k++)
    {
      Lcd_WriteData(0x00);
    } 
  }   
  Lcd_WriteCmd(0x30);        //回到基本指令集
}

//******************************************************************************
//在整个液晶屏幕上画图
//******************************************************************************
void Draw_PM(const uchar *ptr)
{
  uchar i,j,k;
  Lcd_WriteCmd(0x34);        //打开扩展指令集
  i = 0x80;            
  for(j = 0;j < 32;j++)
  {
    Lcd_WriteCmd(i++);
    Lcd_WriteCmd(0x80);
    for(k = 0;k < 16;k++)
    {
      Lcd_WriteData(*ptr++);
    }
  }
  i = 0x80;
  for(j = 0;j < 32;j++)
  {
    Lcd_WriteCmd(i++);
    Lcd_WriteCmd(0x88);	   
    for(k = 0;k < 16;k++)
    {
      Lcd_WriteData(*ptr++);
    } 
  }  
  Lcd_WriteCmd(0x36);        //打开绘图显示
  Lcd_WriteCmd(0x30);        //回到基本指令集
}


//******************************************************************************
//功    能:显示一个16*16大小的图形
//参    数:Yaddr--Y地址
//          Xaddr--X地址
//          dp--指向图形数据存放地址的指针
//******************************************************************************
void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp) 
{
  uchar j;
  uchar k=0;
  Yaddr = Yaddr + 0x80;
  Xaddr = Xaddr + 0x80;
  Lcd_WriteCmd(0x01);  //清屏,只能清除DDRAM
  Lcd_WriteCmd(0x34);  //使用扩展指令集,关闭绘图显示
  for(j=0;j<16;j++)
  {
    Lcd_WriteCmd(Yaddr++);       //Y地址
    Lcd_WriteCmd(Xaddr);    //X地址
    Lcd_WriteData(dp[k++]);  
    Lcd_WriteData(dp[k++]);
  }
  Lcd_WriteCmd(0x36);  //打开绘图显示
  Lcd_WriteCmd(0x30);  //回到基本指令集模式
}

⌨️ 快捷键说明

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