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

📄 demo.c

📁 sed1335作驱动的液晶驱动程序
💻 C
字号:
/*
表1 SED1335控制器指令表
	功  能				指  令				代  码				说  明								参数量
系统控制			SYSTEM  SET				40H			初始化,显示窗口设置				8
系统控制			SLEEP IN					53H			空闲状态设置								/
显示操作			DISP ON/OFF			59H/58H		设置开关显示方式						1
显示操作			SCROLL						54H			设置显示区域								10
显示操作			CSRFORM						5DH			设置光标形状								2
显示操作			CGRAM ADR					5CH			设置CGRAM起始地址						2
显示操作			CSRDIR					4CH-4FH		设置光标移动方向						/
显示操作			HDOT SCR					5AH			设置点单元水平移动量				1
显示操作			OVLAY							5BH			设置合成显示方式						1
绘制操作			CSRW							46H			设置光标地址 								2
绘制操作			CSRR							47H			读出光标地址								2
存储操作			MWRITE						42H			将数据写入显示缓冲区				/
存储操作			MREAD							43H			从显示缓冲区读出数据				/				
----------------------------------------------------------------------
TM320240引脚描述:
引脚序号	信   号						功     能
	1					VSS					逻辑电源地(0V)
	2					VDD					逻辑电源(5V)
	3					VO					对比度调节电压(VDDVEE间调节)
	4					A0					数据信号选择(高电平时,写命令字、读数据;低电平时,写数据、读状态字)
	5				WR(W/R)				8080系列,写信号,低电平有效6800系列,读写信号,0为写,1为读
	6				RD(E)					8080系列,读信号,低电平有效6800系列,使能信号,高电平为写,下降沿为读
7~14			DB0~DB7			三态数据总线
	15				CS					片选端,低电平有效
	16				/RET				复位信号,低电平输入实现硬件复位
	17				VEE					LCD驱动电压(-23V)(由图1中的DC-DC提供)
	18				SEL1				“0”时序适配8080系列MPU“1”时序适配6800系列MPU
	19~22		N.C.				悬空脚
---------------------------------------------------------------------------	
	TM320240引脚连接:
引脚序号	信   号						连接
	1					VSS							0V
	2					VDD							5V
	3					VO							0~5V
	4					A0							A0
	5				WR(W/R)						/WR
	6				RD(E)							/RD
7~14			DB0~DB7					D0~D7
	15				CS							Y5(B800~BFFF)
	16				/RET						PC5(8255-PC5)
	17				VEE							???
	18				SEL1						0V
	19~22		N.C.				悬空脚
*/
#include <reg51.h>
#include <stdio.h>
#include <math.h>
#include <absacc.h>
#include <string.h>
/* 直接访问方式地址定义,根据用户平台接口修改 */
#define  wcadd1 XBYTE[0x8100]  /* 写指令代码地址 */
#define  wdadd1 XBYTE[0x8000]  /* 写参数及显示数据地址 */
#define  rdadd1 XBYTE[0x8100]  /* 读参数及显示数据地址 */
#define  rbadd1 XBYTE[0x8000]  /* 读忙状态地址 */
/* 程序参数定义,根据用户选择的LCM型号修改 */
#define  PARA 0x1f;
/* 定义调用函数 */
CCW1_PR(char O_X,char O_Y,char code_1);  /* 汉字写入函数(文本方式) */
CCW2_PR(char O_X,char O_Y,char code_1);  /* 汉字写入函数(图形方式) */
W_DOT(int O_X,int O_Y );  /* 绘点函数 */
CW_PR(O_X,O_Y);  /* 西文写入函数 */
/*-------------------240128的SYSTEM SET 参数-------------------------------
初始化SYSTEM SET指令参数有8个,依次为P1~P8。
模块的P1~P8参数可以定义systab,db 30h、87h、07h、27h、42h、0ffh、28h、00h。*/
unsigned char SYSTAB[8]={0x30,0x87,0x07,0x1e,0x21,0x80,0x1f,0x00};
unsigned char SCRTAB[10]={0x00,0x00,0x80,0xf0,0x01,0x80,0x00,0x00,0x00,0x00};
/* 在此可以观察文本方式下的字符及光标的显示效果(写入内容为"Sevicer tel:") */
unsigned char CTAB1[12]={0x53,0x65,0x76,0x69,0x63,0x65,0x72,0x20,0x54,0x45,0x4c,0x3a};
/* 文本方式下的汉字显示方法
 在文本方式下显示汉字, 需要在SED1335 等显示RAM 内建立一个自定义字符库
 CGRAM,然后通过在相应的单元写入相应的字符代码来实现汉字的显示.
 SED1335 等的字符代码对应的是8x8 点阵的字符块, 而一个汉字需要四个8x8
 点阵的字符块组合显示, 所以在建立汉字的CGRAM 时, 需要四个字符代码管理一个
 汉字, 一般是按左上部, 左下部, 右上部和右下部四部分分配代码. 比如在演示程
 序中建立 "清华" 两个汉字的CGRAM,那么这两个汉字的代码为80H(81H,82H,83H)和
 84H(85H,86H,87H). */
code unsigned char CGTAB[4][32]={0x00,0x40,0x37,0x10,0x83,0x60,0x2F,0x08,    /* 清 */
                                 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,    /* 华 */
                                 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,    /* 蓬 */
                                 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,    /* 远 */
                                 0x11,0x11,0x12,0x12,0x14,0x28,0x47,0x00,
                                 0x10,0xF8,0x00,0x00,0x08,0xFC,0x20,0x20,
                                 0x20,0x24,0x24,0x1C,0x00,0x06,0xFC,0x00  };
/**********************/
/*     演示主程序     */
/**********************/
void main()
   {
     unsigned char i,j,code_1;
     unsigned int k,O_X,O_Y;
     INT_1();   /* 调初始化函数 */
     k=0;
     for(j=0;j<128;j++)   /* 绘点显示 */
       {
         O_X=k;
         O_Y=j+0x10;
         W_DOT(O_X,O_Y);  /* 调绘点函数  */
         k++;
         if(k>240)break;  /* 共240行  */
       }
      for(j=126;j>0;j--)
       {
         O_X=k;
         O_Y=j+0x10;
         W_DOT(O_X,O_Y);  /* 调绘点函数  */
         k++;
         if(k>240)break;
       }

     code_1=0x00;     /* 中文显示(图形方式) */
     O_X=0x10+0x02;
     O_Y=0x00;
     CCW2_PR(O_X,O_Y,code_1);   /* 调中文显示函数(图形方式)  */
     code_1=0x01;
     O_X=0x10+0x19;
     O_Y=0x00;
     CCW2_PR(O_X,O_Y,code_1);  /* 调中文显示函数(图形方式)  */
     code_1=0x02;
     O_X=0x10+0x02;
     O_Y=0x6f;
     CCW2_PR(O_X,O_Y,code_1);  /* 调中文显示函数(图形方式)  */
     code_1=0x03;
     O_X=0x10+0x19;
     O_Y=0x6f;
     CCW2_PR(O_X,O_Y,code_1);  /* 调中文显示函数(图形方式)  */

/*------- 中文显示(文本方式)----------- */
     CGRAM();     /* 调CGRAM子程序 */
     code_1=0x80;  /* 取字模 */
     O_X=0x00;
     O_Y=0x02;
     CCW1_PR(O_X,O_Y,code_1);  /* 调中文显示函数(文本方式)  */
     code_1=0x84;  /* 取字模 */
     O_X=0x1c;
     O_Y=0x04;
     CCW1_PR(O_X,O_Y,code_1);  /* 调中文显示函数(文本方式)  */
     code_1=0x88;  /* 取字模 */
     O_X=0x00;
     O_Y=0x0e;
     CCW1_PR(O_X,O_Y,code_1);  /* 调中文显示函数(文本方式)  */
     code_1=0x8c;  /* 取字模 */
     O_X=0x1c;
     O_Y=0x0e;
     CCW1_PR(O_X,O_Y,code_1);  /* 调中文显示函数(文本方式)  */

/*------------西文显示-------------*/
     wcadd1=0x5d;  /* 设光标形状 */
     wdadd1=0x07;
     wdadd1=0x03;
     wcadd1=0x5b;  /* OVLAY代码 */
     wdadd1=0x01;
     wcadd1=0x59;  /* DISP ON\OFF代码 */
     wdadd1=0x56;
     O_X=0;   /*X轴方向取值0~29(十进制)*/
     O_Y=0;  /*Y轴方向取值0~15(十进制)*/
     CW_PR(O_X,O_Y);  /* 调西文写入函数 */
   }
/********************/
/*   初始化函数   */
/********************/
INT_1()
   {
     unsigned char i;
     wcadd1=0x40;   /* SYSTEM SET代码 */
     for(i=0;i<8;i++)
        {
          wdadd1=SYSTAB[i];  /* 写入参数 */
        }
      wcadd1=0x44;   /* SCROLL代码 */
      for(i=0;i<10;i++)
        {
          wdadd1=SCRTAB[i];   /* 写入参数 */
        }
      wcadd1=0x5a;   /* HDOT SCR 代码 */   //设置点单元水平移动量,参考量为1
      wdadd1=0x00;   /* 设置参数P1 */
      wcadd1=0x5b;   /* OVLAY 代码 */			 //设置合成显示方式,参考量为1
      wdadd1=0x00;   /* 设置参数:显示一,三区为文本属性 */
      CLEAR();       /* 调清屏函数 */			
      wcadd1=0x59;   /* 显示状态设置 */    //设置开关显示方式,参考量为1
      wdadd1=0x54;   /* 设置参数:显示一~四区开显示 */
  }
/*********************/
/*    清屏函数     */
/*********************/
CLEAR()
  {
    unsigned int i,j;
    wcadd1=0x4c;   /* CSRDIR 代码 */				//设置CGRAM起始地址,参考量为2
    wcadd1=0x46;   /* CSRW 代码 */          //设置光标地址,参考量为2 
    wdadd1=0x00;   /* 设置参数光标指针低8位 */
    wdadd1=0x00;   /* 设置参数光标指针高8位 */
    wcadd1=0x42;   /* MWRITE 代码 */				//将数据写入显示缓冲区
    for(j=0;j<2195;j++)
      {
        for(i=0;i<30;i++)
          {
            wdadd1=0x00;   /* 写入数据 */
          }
      }
  }
/********************/
/*   CGRAM函数    */
/********************/
CGRAM()
  {
   unsigned char i,j;
   wcadd1=0x5c;  /* CGRAMADR 代码 *///设置CGRAM起始地址
   wdadd1=0x00;  /* 设置SAG=0x3000 */
   wdadd1=0x30;
   wcadd1=0x46;  /* CSRW 代码 *///设置光标地址
   wdadd1=0x00;  /* 设置CSR=0x3400(字符代码=80H) */
   wdadd1=0x34;
   wcadd1=0x4c;  /* CSRDIR 代码 */
   wcadd1=0x42;  /* MWRITE 代码 *///将数据写入显示缓冲区
   for(j=0;j<4;j++)
     {
   for(i=0;i<32;i++)
      {
       wdadd1=CGTAB[j][i];  /* 写入字模数据 */
       }
     }
  }
/*************************/
/*  写汉字函数(文本方式) */
/*************************/
CCW1_PR(char O_X,char O_Y,code_1)
  {
    unsigned int i,j;
    i=PARA;
    j=i*O_Y+O_X;
    wcadd1=0x4f;      /* CSRDIR 代码(下移) */
    wcadd1=0x46;      /* 设置光标地址 */
    wdadd1=j%256;     /* 低8位 *///16*16=256个点,所以
    wdadd1=j/256;			/* 高8位 */
    wcadd1=0x42;      /* MWRITE 代码 *///将数据写入显示缓冲区
    wdadd1=code_1;    /* 写入汉字代码 */
    wdadd1=code_1+1;  /* 写入汉字代码 */
    j++;
    wcadd1=0x46;      /* CSRW 代码 */
    wdadd1=j%256;     /* 设置光标地址 */
    wdadd1=j/256;
    wcadd1=0x42;      /* MWRITE 代码 */
    wdadd1=code_1+2;  /* 写入汉字代码 */
    wdadd1=code_1+3;  /* 写入汉字代码 */
  }
/************************/
/*  写汉字函数(图形方式)*/
/************************/
CCW2_PR(char O_X,char O_Y,code_1)
  {
    unsigned char count1;
    unsigned int i,j,a;
    i=PARA;
    j=i*O_Y+O_X;
    wcadd1=0x4f;   /* CSRDIR 代码(下移) */
  for(i=0;i<2;i++)
      {
       wcadd1=0x46;      /* CSRW 代码 */
       wdadd1=j%256;     /* 设置光标地址CSR */
       wdadd1=j/256;
       wcadd1=0x42;    /* MWRITE 代码 */
       for(count1=i*16;count1<16*(i+1);count1++)
         {
         wdadd1=CGTAB[code_1][count1]; /* 写入数据 */
         }
       j=j+1;
       }
  }
 /************************/
 /*       西文函数       */
 /************************/
unsigned char i;
unsigned int j;
CW_PR(O_X,O_Y)
   {
     i=PARA;
     j=i*O_Y+O_X;
     wcadd1=0x46;   /* CSRW 代码 */
     wdadd1=j%256;  /* 设置光标地址CSR */
     wdadd1=j/256;
     wcadd1=0x4c;   /* CSRDIR 代码 */
     wcadd1=0x42;   /* MWRITE 代码 */
     for(i=0;i<12;i++)
      {
        wdadd1=CTAB1[i];  /* 写入数据 */
      }
    }
/***********************/
/*      绘点函数       */
/***********************/
W_DOT(int O_X,int O_Y)
  {
    unsigned char i,j,dat;
    unsigned int k;
      j=PARA;
      i=O_X%8;
      O_X=O_X/8;
      k=j*O_Y+O_X;
      wcadd1=0x4f;	/* 设置光标方向下移*/
      wcadd1=0x46;  /* 设置光标地址 */
      wdadd1=k%256; /* 计算光标地址 */ 	//低8位
      wdadd1=k/256;											//高8位
      if(O_Y==0)O_Y=0x80;
      else
        {
             O_Y=1;
         for(;i<7;i++)  /* 计算显示位 */
             {
                O_Y=O_Y*2;
             }
         }
      wcadd1=0x43;  /* MREAD 代码 */
      dat=rdadd1;   /* 读取当前显示数据 */
      wcadd1=0x46;  /* 设置光标地址 */
      wdadd1=k%256;  /* 计算光标地址 */
      wdadd1=k/256;
      wcadd1=0x42;  /* MWRITE 代码 */
      wdadd1=dat|O_Y;  /* 写入合成数据 */
  }

⌨️ 快捷键说明

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