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

📄 demo.c

📁 T6963C驱动的液晶
💻 C
字号:
#include <reg51.h>
#include <math.h>
#include <absacc.h>
#include <string.h>
/*   地址定义   */
#define  d_add XBYTE[0x8000]
#define  c_add XBYTE[0x8100]
/*   常数定义   */
#define  para1 0x20;
/*  定义标志位  */
 sbit Acc_0=ACC^0;
 sbit Acc_1=ACC^1;
 sbit Acc_2=ACC^2;
 sbit Acc_3=ACC^3;

unsigned int O_X,O_Y,com,dat1,dat2;
unsigned char code_1,attr;
/******************************/

code unsigned char CGTAB[64]={ 0x00,0x40,0x37,0x10,0x81,0x61,0x22,0x0A,/*"液"= 80H*/
                               0x16,0x2B,0xE2,0x22,0x22,0x22,0x23,0x22,
                               0x80,0x44,0xFE,0x20,0x20,0x3C,0x44,0x64,
                               0x98,0x48,0x50,0x20,0x50,0x8E,0x04,0x00,
                               0x0F,0x08,0x08,0x0F,0x08,0x08,0x0F,0x08,/*"晶"= 84H*/
                               0x7E,0x42,0x42,0x7E,0x42,0x42,0x7E,0x42,
                               0xE0,0x20,0x20,0xE0,0x20,0x20,0xE0,0x24,
                               0xFE,0x84,0x84,0xFC,0x84,0x84,0xFC,0x84};

 code unsigned char CCTAB[4][32]={ 0x00,0x40,0x37,0x10,0x83,0x60,0x2F,0x08,  /* "清"代码为00H*/
                                   0x13,0x22,0xE3,0x22,0x23,0x22,0x22,0x22,
                                   0x40,0x48,0xFC,0x40,0xF8,0x40,0xFE,0x08,
                                   0xFC,0x08,0xF8,0x08,0xF8,0x08,0x28,0x10,
                                   0x04,0x04,0x08,0x08,0x18,0x29,0x4A,0x08,  /*"华"代码为01H*/
                                   0x09,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,
                                   0x40,0x48,0x58,0x60,0xC0,0x40,0x44,0x44,
                                   0x3C,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,
                                   0x04,0xFF,0x05,0x41,0x33,0x14,0x01,0xF6,  /*"蓬"代码为02H*/
                                   0x1B,0x10,0x13,0x10,0x17,0x10,0x28,0x47,
                                   0x44,0xFE,0x40,0xF8,0x10,0xE0,0x18,0x46,
                                   0xF8,0x40,0xF8,0x40,0xFC,0x40,0x46,0xFC,
                                   0x00,0x43,0x30,0x10,0x00,0x07,0xF1,0x11,  /* "远"代码为03H*/
                                   0x11,0x11,0x12,0x12,0x14,0x28,0x47,0x00,
                                   0x10,0xF8,0x00,0x00,0x08,0xFC,0x20,0x20,
                                   0x20,0x24,0x24,0x1C,0x00,0x06,0xFC,0x00};

 unsigned char  DTAB[11]={ 0x37,0x45,0x4c,0x43,0x4f,0x4d,0x45,0x00,0x39,0x4f,0x55};

/***************************/
/*       演示主程序        */
/***************************/
void main()
     {
       unsigned char i,j,k,b;
       INT_1();         /* 初始化函数 */
       CLEAR();         /* 清屏函数 */
       CGRAM();         /* 建立CGRAM内字库函数 */

       code_1=0x80;     /* 汉字写入(文本方式)*/
       O_X=0x0a;
       O_Y=0x07;
       CCW1_PR();
       code_1=0x84;
       O_X=0x03;
       O_Y=0x00;
       CCW1_PR();

       code_1=0x00;     /* 汉字写入(图形方式)*/
       O_X=0x00;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x01;
       O_X=0x00;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x02;
       O_X=0x00;
       O_Y=0x11;
       CCW2_PR();
       code_1=0x03;
       O_X=0x1c;
       O_Y=0x6f;
       CCW2_PR();

       com=0x84;   /* 显示方式设置 */  /* 西文写入*/
       PR12();
       com=0x9f;  /* 显示状态设置 */
       PR12();
       for(i=0;i<8;i++)
         {
          dat1=0x0e;
          dat2=0x01;
          com=0x21;  /* 光标地址设置 */
          PR1();
          attr=i;
          O_X=0x00;
          O_Y=0x00;
          for(b=0;b<11;b++)
           {
             code_1=DTAB[b];
             CW2_PR();
           }
         }

       for(j=0;j<128;j++)   /* 绘点  */
          {
            O_X=k;
            O_Y=j;
            W_DOT();
            k++;
          }
       for(j=128;j>0;j--)
          {
            O_X=k;
            O_Y=j;
            W_DOT();
            k++;
          }
     }
 /**************************/
 /*      初始化函数        */
 /**************************/
INT_1()
    {
       dat1=0x00;      /*设文本显示区域首地址*/
       dat2=0x00;
       com=0x40;
       PR1();
       dat1=para1;    /*设文本显示区域宽度*/
       dat2=0x00;
       com=0x41;
       PR1();
       dat1=0x00;    /*设图形显示区域首地址*/
       dat2=0x08;
       com=0x42;
       PR1();
       dat1=para1;    /*设图形显示区域宽度*/
       dat2=0x00;
       com=0x43;
       PR1();
       com=0xa0;      /*光标形状设置*/
       PR12();
       com=0x80;      /*显示方式设置逻辑"或"合成*/
       PR12();
       com=0x9c;      /*显示开关设置 开文本和图形显示*/
       PR12();
    }
/***************************/
/*       清显示函数        */
/***************************/
CLEAR()
    {
    unsigned int i;
        dat1=0x00;
        dat2=0x00;
        com=0x24;  /* 设置显示地址 */
        PR1();
        com=0xb0;  /* 设置自动写方式 */
        PR12();
    for(i=0;i<8200;i++) /* 清8K存储器 */
       {
         ST3();
         d_add=0x00;
       }
       com=0xb2;     /* 设置自动写结束方式 */
       PR12();
    }
 /**************************/
 /*       CGRAM函数        */
 /**************************/
 CGRAM()
     {
        unsigned int i;
           dat1=0x03;
           dat2=0x00;
           com=0x22;   /* 设置CGRAM偏置地址 */
           PR1();
           dat1=0x00;
           dat2=0x1c;
           com=0x24;   /* 设置存储器地址指针 */
           PR1();
           com=0xb0;   /* 设置自动写方式 */
           PR12();
        for(i=0;i<64;i++)
           {
             ST3();
             d_add=CGTAB[i];
           }
        com=0xb2;     /* 设置自动写结束方式 */
        PR12();
     }
/********************************/
/*    汉字写入(文本方式)函数    */
/********************************/
CCWR1_PR()
     {
        unsigned int i,j;
        i=para1;
        j=i*O_Y+O_X;
        dat1=j%256;
        dat2=j/256;
        com=0x24;  /* 设置显示地址 */
        PR1();
        dat2=code_1;  /* 写入左上半部汉字代码 */
        com=0xc0;
        PR11();
        dat2=code_1+0x02;  /* 写入右上半部汉字代码 */
        PR11();
        j=j+i;
        dat1=j%256;   /* 显示RAM地址修正 */
        dat2=j/256;
        com=0x24;
        PR1();
        dat2=code_1+0x01; /* 写入左下半部汉字代码 */
        com=0xc0;
        PR11();
        dat2=code_1+0x03;  /* 写入右下半部汉字代码 */
        PR11();
     }
/********************************/
/*    汉字写入(图形方式)函数  */
/********************************/
CCW2_PR()
    {
     unsigned int i,j,count1;
        i=para1;
        j=i*O_Y+O_X+0x0800;   /* 图形显示区首地址为0x0800*/
             for(count1=0;count1<16;count1++)
                {
                 dat1=j%256;  /* 显示地址设置 */
                 dat2=j/256;
                 com=0x24;
                 PR1();
                 dat2=CCTAB[code_1][count1];
                 com=0xc0;
                 PR11();
                 dat2=CCTAB[code_1][count1+16];
                 PR11();
                 j=j+i;
                }
     }
/********************************/
/*  西文字符写入(文本属性)函数  */
/********************************/
    CW2_PR()
       {
       unsigned int i,j;
        i=para1;
        j=i*O_Y+O_X;
        dat1=j%256;
        dat2=j/256;
        com=0x24;  /* 显示地址设置 */
        PR1();
        dat2=code_1;
        com=0xc4;  /* 数据写 */
        PR11();
        dat2=0x08;
        com=0x24;
        PR1();
        dat2=attr;  /* 写入属性参数 */
        com=0xc4;
        PR11();
       }
/****************************/
/*        绘点函数          */
/****************************/
W_DOT()
    {
      unsigned char i,j;
      unsigned int k;
         i=para1;
         j=O_X%8;
         O_X=O_X/8;
         k=i*O_Y+O_X+0x0800;
         dat1=k%256;
         dat2=k/256;
         com=0x24;
         PR1();
         j=0x07-j;
         com=i|0xf8;  /* 位操作 */
         PR12();
     }
/****************************/
/*    写指令和写数据函数    */
/****************************/
PR1()              /* 双字节参数指令写入入口 */
    {
      ST01();
      d_add=dat1;  /* 取第一参数单元数据 */
      PR11();
    }
PR11()             /* 单字节参数指令写入入口 */
    {
      ST01();
      d_add=dat2;  /* 取第二参数单元数据 */
      PR12();
    }
PR12()             /* 无参数指令写入入口 */
   {
     ST01();
     c_add=com;    /* 写入指令代码 */
   }
/************************************************/
/*  判状态位S1,S0 函数(读写指令和读写数据状态)  */
/************************************************/
ST01()
    {
      do
        {
        ACC=c_add;
        }
      while(Acc_0==0,Acc_1==0);
    }
/************************************/
/*  判状态位S2函数(数据自动读状态)  */
/************************************/
ST2()
   {
     do
     {
       ACC=c_add;
     }
    while(Acc_2==0);
   }
/************************************/
/*  判状态位S3函数(数据自动写状态)  */
/************************************/
ST3()
   {
     do
     {
       ACC=c_add;
     }
     while(Acc_3==0);
   }

⌨️ 快捷键说明

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