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

📄 复件 demo.c

📁 液晶控制芯片SED1335的控制程序
💻 C
字号:
#include <mcs51.h>
#include <stdio.h>
#include <math.h>
#include <absacc.h>
#include <string.h>

/* 直接访问方式地址定义,根据用户平台接口修改 */
#define	 wcadd1	XBYTE[0xBF02]  /* 写指令代码地址 */
#define	 wdadd1	XBYTE[0xBF00]  /* 写参数及显示数据地址 */
#define	 rdadd1	XBYTE[0xBF02]  /* 读参数及显示数据地址 */
#define	 rbadd1	XBYTE[0xBF00]  /* 读忙状态地址 */
/* 程序参数定义,根据用户选择的LCM型号修改 */
#define	 PARA 0x1f;
/* 定义调用函数	*/


void CCW1_PR(char O_X,char O_Y,char code_1);	 /*	汉字写入函数(文本方式) */
void CCW2_PR(char O_X,char O_Y,char code_1);	 /*	汉字写入函数(图形方式) */
void CGRAM(void);
void CLEAR(void);
void INT_1(void);
void W_DOT(int O_X,int O_Y );  /* 绘点函数 */
void CW_PR(O_X,O_Y);	 /*	西文写入函数 */
/*-------------------240128的SYSTEM	SET	参数-------------------------------*/
unsigned char SYSTAB[8]={0x30,0x87,0x07,0x1e,0x47,0x80,0x1f,0x00};
//unsigned char SYSTAB[8]={0x30,0x87,0x07,0x28,0x47,0xf0,0x29,0x00};
unsigned char SCRTAB[10]={0x00,0x00,0x80,0xf0,0x01,0x80,0x00,0x00,0x00,0x00};
//unsigned char SCRTAB[10]={0x00,0x00,0xf0,0x00,0x0f,0xf0,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 j,code_1;
	unsigned int k,O_X,O_Y;
	 
	P23=0;
	P25=1; 
	P24=1;
	
	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;
	}
	  
	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);  /* 调西文写入函数	*/
	
	while(1);
}
/********************/
/*	 初始化函数	  */
/********************/
void INT_1(void)
{
	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 代码	*/
	wdadd1=0x00;   /* 设置参数P1 */
	  
	wcadd1=0x5b;   /* OVLAY	代码 */
	wdadd1=0x00;   /* 设置参数:显示一,三区为文本属性 */
	  
	CLEAR();	   /* 调清屏函数 */
	wcadd1=0x59;   /* 显示状态设置 */
	wdadd1=0x54;   /* 设置参数:显示一~四区开显示 */
}
/*********************/
/*	  清屏函数	   */
/*********************/
void CLEAR(void)
{
	unsigned int i,j;
	
	wcadd1=0x4c;   /* CSRDIR 代码 */
	wcadd1=0x46;   /* CSRW 代码	*/
	wdadd1=0x00;   /* 设置参数光标指针低8位	*/
	wdadd1=0x00;   /* 设置参数光标指针高8位	*/
	wcadd1=0x42;   /* MWRITE 代码 */
	
	for(j=0;j<2195;j++)
	{
		for(i=0;i<30;i++)
			wdadd1=0x00;   /* 写入数据 */
	}
}
/********************/
/*	 CGRAM函数	  */
/********************/
void CGRAM(void)
{
	unsigned char i,j;
   
	wcadd1=0x5c;  /* CGRAMADR 代码 */
	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];	 /*	写入字模数据 */
	}
}
/*************************/
/*	写汉字函数(文本方式) */
/*************************/
void CCW1_PR(char O_X,char O_Y,char	code_1)
{
	unsigned int i,j;
	
	i=PARA;
	j=i*O_Y+O_X;

	wcadd1=0x4f;	  /* CSRDIR	代码(下移) */
	
	wcadd1=0x46;	  /* CSRW 代码 */
	wdadd1=j%256;	  /* 设置光标地址 */
	wdadd1=j/256;
	
	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;  /* 写入汉字代码 */
}
/************************/
/*	写汉字函数(图形方式)*/
/************************/
void CCW2_PR(char O_X,char O_Y,char code_1)
{
	unsigned char count1;
	unsigned int i,j;
	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;
	}
}

 /************************/
 /*		  西文函数		 */
 /************************/
void CW_PR(O_X,O_Y)
{
	unsigned char i;
	unsigned int j;
	
	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];  /* 写入数据 */
}
/***********************/
/*		绘点函数	   */
/***********************/
void 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;	/* 计算光标地址	*/
	wdadd1=k/256;
	  
	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 + -