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

📄 b07.c

📁 单片机实验程序-13种-17.4M-pdf.zip
💻 C
字号:

#define PD1  61         /* 122/2 分成左右两半屏(122x32) */

unsigned char Column;
unsigned char Page_ ;   /* 页地址寄存器 D1,DO:页地址 */
unsigned char Code_ ;   /* 字符代码寄存器 */

unsigned char Command;  /* 指令寄存器 */
unsigned char LCDData;  /* 数据寄存器 */

#define CWADD1 0xfa00   /* 写指令代码地址(E1) */
#define DWADD1 0xfa40   /* 写显示数据地址(E1) */
#define CRADD1 0xfa80   /* 读状态字地址(E1) */
#define DRADD1 0xfac0   /* 读显示数据地址(E1) */

#define CWADD2 0xf800   /* 写指令代码地址(E2) */
#define DWADD2 0xf840   /* 写显示数进地址(E2) */
#define CRADD2 0xf880   /* 读状态字地址(E2) */
#define DRADD2 0xf8c0   /* 读显示数据地址(E2) */

extern unsigned char IN(unsigned int port);
extern void OUT(unsigned int port, unsigned char v);

/* 英文字模库    8x8 点阵 */
unsigned char const EETAB[][8]={
        {0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00},  /* 0 */
        {0x10,0x30,0x50,0x10,0x10,0x10,0x7c,0x00},  /* 1 */
        {0x38,0x44,0x04,0x08,0x10,0x20,0x7c,0x00},  /* 2 */
        {0x78,0x84,0x04,0x38,0x04,0x84,0x78,0x00}}; /* 3 */

/* 中文字模库   16x16点阵 */
unsigned char const CCTAB[][32] ={
        {0x00,0x04,0xe4,0x24,0x24,0x64,0xb4,0x2f, /* 南 */
         0x24,0xa4,0x64,0x24,0x24,0xe6,0x04,0x00,
         0x00,0x00,0x7f,0x04,0x05,0x05,0x05,0x7f,
         0x05,0x05,0x05,0x25,0x44,0x3f,0x00,0x00},

        {0x00,0x04,0x04,0xe4,0x24,0x24,0x25,0x26, /* 京 */
         0x24,0x24,0x24,0xe4,0x06,0x04,0x00,0x00,
         0x00,0x20,0x10,0x19,0x0D,0x41,0x81,0x7f,
         0x01,0x01,0x05,0x0d,0x38,0x10,0x00,0x00},

        {0x00,0x80,0x60,0xf8,0x07,0x0a,0x28,0x28, /* 伟 */
         0x28,0xff,0x28,0x28,0x28,0x28,0x00,0x00,
         0x01,0x00,0x00,0xfF,0x00,0x01,0x01,0x01,
         0x01,0xff,0x01,0x21,0x41,0x3f,0x00,0x00},

        {0x08,0x08,0x89,0xce,0x28,0x18,0x02,0x7a, /* 福 */
         0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x02,0x00,
         0x02,0x01,0x00,0xff,0x01,0x02,0xff,0x49,
         0x49,0x49,0x7f,0x49,0x49,0x49,0xff,0x00}};

/* 1.写指令代码子程序(E1) */
void WriteCommandE1()
{
  while(IN(CRADD1) & 0x80);
  OUT(CWADD1, Command);
}

/* 2.写显示数据子程序(E1) */
void WriteDataE1()
{
  while(IN(CRADD1) & 0x80);
  OUT(DWADD1, LCDData);
}

/* 3.读显示数据子程序(E1) */
void ReadDataE1()
{
  while(IN(CRADD1) & 0x80);
  LCDData = IN(DRADD1);
}

/* 4.写指令代码子程序(E2) */
void WriteCommandE2()
{
  while(IN(CRADD2) & 0x80);
  OUT(CWADD2, Command);
}

/* 5.写显示数据子程序(E2) */
void WriteDataE2()
{
  while(IN(CRADD2) & 0x80);
  OUT(DWADD2, LCDData);
}

/* 6.读显示数据子程序(E2) */
void ReadDataE2()
{
  while(IN(CRADD2) & 0x80);
  LCDData = IN(DRADD2);
}

/* 初始化程序 */
void Init()
{
  Command = 0xe2;
  WriteCommandE1();
  WriteCommandE2();

  Command = 0xa4;
  WriteCommandE1();
  WriteCommandE2();

  Command = 0xa9;
  WriteCommandE1();
  WriteCommandE2();

  Command = 0xa0;
  WriteCommandE1();
  WriteCommandE2();

  Command = 0xc0;
  WriteCommandE1();
  WriteCommandE2();

  Command = 0xaf;
  WriteCommandE1();
  WriteCommandE2();
}

/* 清屏 */
void Clear()
{
  unsigned char i,j;

  i = 0;
  do {

    Command = (i + 0xb8);/* 页地址设置 */
    WriteCommandE1();
    WriteCommandE2();

    Command = 0x00;      /* 列地址设置为"0" */
    WriteCommandE1();
    WriteCommandE2();

    j = 0x50;            /* 一页清 80个字节 */
    do {
      LCDData = 0x00;    /* 显示数据为"0" */
      WriteDataE1();
      WriteDataE2();
    }while(--j !=0);     /* 页内字节清零循环 */

  }while(++i !=4);       /* 页地址暂存器加一 */
                         /* 显示区清零循环 */
}

/* 延时程序 */
void Delay()
{
  unsigned char i,j;
  i = 20;
  j = 0;
  do{
    do{
    }while(--j !=0);
  }while( --i != 0 );
}

/* 中文显示子程序 */
void WriteCHN16x16()
{
  unsigned char i,j,k;

  i = 0;
  j = 0;
  while(j<2) {
    Command = ((Page_ + j) & 0x03) | 0xb8;   /* 设置页地址 */
    WriteCommandE1();
    WriteCommandE2();
    k = Column;                    /* 列地址值 */
    while(k < Column + 16){
      if (k < PD1) {               /* 为左半屏显示区域(E1) */
        Command = k;
        WriteCommandE1();          /* 设置列地址值 */
        LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */
        WriteDataE1();             /* 写字模数据 */
      } else{                      /* 为右半屏显示区域(E2) */
        Command = k-PD1;
        WriteCommandE2();          /* 设置列地址值 */
        LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */
        WriteDataE2();             /* 写字模数据 */
      };

      i++;
      if( ++k >= PD1 * 2) break;   /* 列地址是否超出显示范围 */
    } ;
    j++;
  };
}

/*  中文显示程序 */
void main()
{
  Init();
  Clear();

  Page_ = 0x02;
  Column = 0x00;
  Code_ = 0x00;
  WriteCHN16x16();

  Page_ = 0x02;
  Column = 0x10;
  Code_ = 0x01;
  WriteCHN16x16();

  Page_ = 0x02;
  Column = 0x20;
  Code_ = 0x02;
  WriteCHN16x16();


  Page_ = 0x02;
  Column = 0x30;
  Code_ = 0x03;
  WriteCHN16x16();

  while(1);

}

⌨️ 快捷键说明

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