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

📄 12864.c

📁 实现单片机对LCD12864液晶的控制
💻 C
字号:
#define uchar unsigned char
#define uint unsigned int
#include "zz1.c"
#define CLR_E P6OUT&=~BIT0;//p6.0
#define SET_E P6OUT|=BIT0;
#define CLR_WR P6OUT&=~BIT1;//p6.1
#define SET_WR P6OUT|=BIT1;
#define CLR_DI P6OUT&=~BIT2;//p6.2
#define SET_DI P6OUT|=BIT2;

#define CLR_CS1 P6OUT&=~BIT3;//p6.3
#define SET_CS1 P6OUT|=BIT3;
#define CLR_CS2 P6OUT&=~BIT4;//p6.4
#define SET_CS2 P6OUT|=BIT4;

#define DATADIR  P5DIR
#define DATAOUT  P5OUT
#define DATAIN   P5IN
#define Set_Disp_On 0x3F
#define Set_Disp_Off 0x3E
#define Set_Column  0x40
#define Set_Page  0xB8
#define Set_Start_Line 0xC0

//******************************************************
//************读状态***返回0为准备就绪,1为忙**************
//******************************************************
uchar checkstatus()
{
  uchar status = 0;
  SET_WR;
  CLR_DI;
  SET_E;
  DATADIR = 0x00;

  status = DATAIN;

  CLR_E;
  DATADIR = 0xff;
  if (status &0x80 == 0x80)
    return 1;
  else
    return 0;
}

//指令寄存器写入函数

wcmd(uchar Reg_Code)
{
  while (checkstatus() == 1)
    ;
  CLR_DI;
  CLR_WR;
  DATADIR = 0xff;
  DATAOUT = Reg_Code;
  SET_E;
  CLR_E;
}

//  显示数据写入函数
wdat(uchar Disp_Data)
{
  while (checkstatus() == 1)
    ;
  SET_DI;
  CLR_WR;
  DATAOUT = 0X00;
  DATADIR = 0xff;
  DATAOUT = Disp_Data;
  SET_E;
  _NOP();
  CLR_E;
}

//  设置XY地址,X用页表示,Y用行表示***********

void Set_XY(unsigned char X_PageColumn, unsigned char Y_Column)
{
  wcmd(Set_Page + X_PageColumn);
  wcmd(Set_Column + Y_Column);
}


//  12864寄存器初始化函数

init12864()
{
  DATADIR = 0xff;
  P6DIR = 0Xff;

  SET_CS1;
  SET_CS2;
  wcmd(Set_Disp_Off);
  wcmd(Set_Start_Line);
  wcmd(Set_Page);
  wcmd(Set_Column);
  wcmd(Set_Disp_On);
}




//*****************************************
//  清除12864显示存储器
//*****************************************
clr()
{
  unsigned char j, k;

  SET_CS1;
  SET_CS2;
  for (k = 0; k < 8; k++)
  {
    wcmd(Set_Page + k);
    wcmd(Set_Column);

    for (j = 0; j < 64; j++)
    {
      while (checkstatus())
        ;
      wdat(0x00);
    }
  }
}

//*****************************************
void display(uchar x, uchar y, uchar *k) //	16*16
{
  uchar i, j;
  for (j = 0; j < 2; j++)
  {
    if (y < 64)
    {
      SET_CS1;
      CLR_CS2;
      Set_XY(x + j, y);
    }
    else
    {
      CLR_CS1;
      SET_CS2;
      Set_XY(x + j, y - 64);
    }
    for (i = 0; i < 16; i++)
    {
      wdat(*(k + j * 16+i));
    }
  }
}

//*****************************************
void display3(uchar x, uchar y, uchar *k) //	16*8
{
  uchar i, j;
  for (j = 0; j < 2; j++)
  {

    if (y < 64)
    {
      SET_CS1;
      CLR_CS2;
      Set_XY(x + j, y);
    }
    else
    {
      CLR_CS1;
      SET_CS2;
      Set_XY(x + j, y - 64);
    }
    for (i = 0; i < 8; i++)
    {
      wdat(*(k + j * 8+i));
    }
  }
}

⌨️ 快捷键说明

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