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

📄 240128.h

📁 240128液晶显示的头文件,包括了字符显示子程序与点阵显示子程序
💻 H
字号:


#define width      30      //显示区宽度
#define addr_w     0x0000  //文本显示区首地址
#define addr_t     0x01e0  //图形显示区首地址
#define uchar      unsigned char
#define uint       unsigned int

#define data_ora   P1      //MCU P1<------> LCM

sbit wr = P2 ^ 0;          //Data Write into T6963C,L有效
sbit rd = P2 ^ 1;          //Data Read from T6963C,L有效
sbit ce = P2 ^ 2;          //使能信号,L有效
sbit cd = P2 ^ 3;          //当wr=L,cd=H:写命令,cd=L:写数据;当rd=L,cd=H:读状态,cd=L:读数据
sbit rst = P2 ^ 4;         //Lcm reset,低有效
sbit fs = P2 ^ 5;          //字体选择,H:6*8点阵;L:8*8点阵
sbit bf0 = P1 ^ 0;
sbit bf1 = P1 ^ 1;
sbit bf3 = P1 ^ 3;

uchar t[128] =
{
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

uchar code num[] =
{
  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19
};


void wr_comm(uchar comm);
void wr_data(uchar dat);
void chk_busy(uchar autowr);


/*---------------延时子程序----------------*/

void delay1(uint ms)
{
  uint i, j;
  for (i = 0; i < ms; i++)
    for (j = 0; j < 1000; j++)
      ;
}

/*------------写命令或数据到LCD--------------*/
//写一个数据和一个命令
void wr_od(uchar dat, uchar comm)
{
  wr_data(dat);
  wr_comm(comm);
}

//写两个数据和一个命令
void wr_td(uchar datl, uchar dath, uchar comm)
{
  wr_data(datl);
  wr_data(dath);
  wr_comm(comm);
}

//写一个16进制数据和一个命令
void wr_xd(uint dat, uchar comm)
{
  uchar datl, dath;
  datl = dat;
  dath = dat >> 8;
  wr_data(datl);
  wr_data(dath);
  wr_comm(comm);
}

//自动写数据
void wr_auto(uchar dat)
{
  chk_busy(1);
  cd = 0;
  rd = 1;
  data_ora = dat;
  wr = 0;
  wr = 1;
}

//写命令
void wr_comm(uchar comm)
{
  chk_busy(0);
  cd = 1;
  rd = 1;
  data_ora = comm;
  wr = 0;
  wr = 1;
}

//写数据
void wr_data(uchar dat)
{
  chk_busy(0);
  cd = 0;
  rd = 1;
  data_ora = dat;
  wr = 0;
  wr = 1;
}

//测状态
void chk_busy(uchar autowr)
{
  data_ora = 0xff;
  cd = 1;
  wr = 1;
  rd = 0;
  if (autowr)
  {
    while (bf3 == 0)
      ;
  }
  else
  {
    while ((bf0 == 0) || (bf1 == 0))
      ;
  }
  rd = 1;
}

/*------------------初始化-----------------*/
void init_lcd(void)
{
  rst = 0;
  ;
  rst = 1;
  fs = 0;
  ce = 0;
  wr = 1;
  rd = 1;
  wr_xd(addr_w, 0x40);  //文本显示区首地址
  wr_xd(addr_t, 0x42);  //图形显示区首地址
  wr_td(width, 0x00, 0x41);  //文本显示区宽度
  wr_td(width, 0x00, 0x43);  //图形显示区宽度
  wr_comm(0x81);   //逻辑"异或"
  wr_td(0x02, 0x00, 0x22);   //CGRAM偏置地址设置
  wr_comm(0x9c);    //启用文本显示,启用图形显示
}

/*--------------清RAM------------------*/
void clrram(void)
{
  uchar i, j;
  wr_xd(addr_w, 0x24);
  wr_comm(0xb0);
  for (j = 0; j < 144; j++)
  {
    for (i = 0; i < width; i++)
      wr_auto(0x00);
  }
  wr_comm(0xb2);
}

/*--------------在addr处显示8xl*yl的图形--------------
void disp_img(uint addr,uchar xl,uchar yl,uchar code*img)
{
uchar i,j ;
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
wr_xd(addr+j*width+i,0x24);
wr_od(img[j*xl+i],0xc0);
}
}
}*/
/*----------在addr处显示row_yl行(每行row_xl个)8xl*yl的文字----------*/
void disp_chn(uint addr, uchar xl, uchar yl, uchar row_xl, uchar row_yl, uchar
  code *chn, uchar fanbai)
{
  uchar i, j, k, m;
  for (m = 0; m < row_yl; m++)
  {
    for (k = 0; k < row_xl; k++)
    {
      for (j = 0; j < yl; j++)
      {
        for (i = 0; i < xl; i++)
        {
          wr_xd(addr + m * yl * width + k * xl + j * width + i, 0x24);
          if (fanbai)
            wr_od(~chn[(m *row_xl * xl * yl) + (k *xl * yl) + (j *xl) + i],
              0xc0);
          else
            wr_od(chn[(m *row_xl * xl * yl) + (k *xl * yl) + (j *xl) + i], 0xc0)
              ;
        }
      }
    }
  }
}

/*--------------显示字符------------------*/
void disp_eng(uint addr, uchar eng)
{

  wr_xd(addr, 0x24);
  wr_comm(0xb0);
  wr_auto(eng);
  wr_comm(0xb2);
}

/*--------------显示点阵------------------*/
void disp_dz(uchar data1, uchar data2)
{
  uchar i, j;
  wr_xd(addr_t, 0x24);
  wr_comm(0xb0);
  for (j = 0; j < 3; j++)
  {
    for (i = 0; i < width *2; i++)
      wr_auto(data1);
    for (i = 0; i < width *2; i++)
      wr_auto(data2);
  }
  wr_comm(0xb2);
  wr_xd(addr_t + 118 * 30, 0x24);
  wr_comm(0xb0);
  for (j = 0; j < 3; j++)
  {
    for (i = 0; i < width *2; i++)
      wr_auto(data1);
    for (i = 0; i < width *2; i++)
      wr_auto(data2);
  }
  wr_comm(0xb2);
}

⌨️ 快捷键说明

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