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

📄 demo.c

📁 液晶控制芯片SED1335的控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
// CEEBACK.GAO. 2006-05-09
// 目标器件: LCM: AG_320240,SED1335  
//			 MCU: STC89C58RD+
// 实现功能: 可以写 ASCII 码字符,写汉字(文本层,图形层)
//			 画直线,画圆;
// 说明:对320*240点阵屏幕坐标定位如下
//		 左上角为原点(0,0),水平向右为X轴正方向,垂直向下为Y轴正方向
//		 X 轴坐标取值范围: 0~319;
//		 Y 轴坐标取值范围: 0~239;
// 字模提取方法:采zimo221软件,纵向取模,再修改图像->旋转90度->图像上下调换。
//				 这样依次得到左上部, 左下部, 右上部和右下部四部分分配代码

#include <mcs51.h>
#include <absacc.h>
//#include <math.h>

#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long

// 直接访问方式地址定义,根据用户平台接口修改
#define	 LCD_CMD_ADR	XBYTE[0xBF02]  // 写指令代码地址 读参数及显示数据地址
#define	 LCD_DAT_ADR	XBYTE[0xBF00]  // 写参数及显示数据地址 读忙状态地址
//#define	 rdadd1	XBYTE[0xBF02]
//#define	 rbadd1	XBYTE[0xBF00]

// 程序参数定义,根据用户选择的LCM型号修改
#define	PARA	0x28
#define SAD2	0X04B0

// 定义调用函数
void CCW1_PR(uchar O_X,uchar O_Y,uint num);	 //	汉字写入函数(文本方式)
void CCW2_PR(uchar O_X,uchar O_Y,uint num);	 //	汉字写入函数(图形方式)
void CGRAM(uint num);
void clear_lcd(void);
void initial_lcd(void);
void draw_dot(int O_X,uchar O_Y);  // 绘点函数
void w_ASCII(uchar O_X,uchar O_Y,uchar num);	 //	写ASCII码函数
void w_string(uchar O_X,uchar O_Y,const uchar *STRING);
void draw_vertical(uchar y1,uchar y2,int x);
void draw_horizontal(int x1,int x2,uchar y);
void draw_bias(int x1,uchar y1,int x2,uchar y2);
void draw_circle(int x0,uchar y0,uchar radius);

//-------------------240128的SYSTEM	SET	参数-------------------------------
//code unsigned char SYSTAB[8]={0x30,0x87,0x07,0x1e,0x47,0x80,0x1f,0x00};
unsigned char SYSTAB[8]={0x30,0x87,0x07,0x27,0x47,0xef,0x28,0x00};	// 自己修改的
//code unsigned char SCRTAB[10]={0x00,0x00,0x80,0xf0,0x01,0x80,0x00,0x00,0x00,0x00};
unsigned char SCRTAB[8]={0x00,0x00,0xf0,0xb0,0x04,0xf0,0x2F,0x2A};	// 自己修改的

// 在此可以观察文本方式下的字符及光标的显示效果(写入内容为"Sevicer tel:")
code unsigned char CTAB1[]={"TIETONG ELECTRONICS CO.LTD"};
// 文本方式下的汉字显示方法
/*在文本方式下显示汉字, 需要在SED1335 等显示RAM 内建立一个自定义字符库
 CGRAM,然后通过在相应的单元写入相应的字符代码来实现汉字的显示.
 SED1335 等的字符代码对应的是8x8 点阵的字符块, 而一个汉字需要四个8x8
 点阵的字符块组合显示, 所以在建立汉字的CGRAM 时, 需要四个字符代码管理一个
 汉字, 一般是按左上部, 左下部, 右上部和右下部四部分分配代码. 比如在演示程
 序中建立 "清华" 两个汉字的CGRAM,那么这两个汉字的代码为80H(81H,82H,83H)和
 84H(85H,86H,87H).*/

code uchar CGTAB[][32]={
/*--  文字:  泉  --*/
0x03,0x3F,0x3F,0x30,0x3F,0x30,0x3F,0x3F,0x01,0x7D,0x7D,0x0D,0x19,0x77,0xC3,0x00,
0x00,0xF8,0xF8,0x18,0xF8,0x18,0xF8,0xF8,0x80,0x8C,0xD8,0xE0,0xB0,0x9E,0x0C,0x00,

/*--  文字:  州  --*/
0x18,0x19,0x19,0x19,0x59,0x5D,0x5D,0xDB,0x9B,0x99,0x19,0x31,0x31,0x61,0x60,0x00,
0x0C,0x8C,0x8C,0x8C,0x8C,0xCC,0xCC,0xAC,0xAC,0x8C,0x8C,0x8C,0x8C,0x8C,0x0C,0x00,

/*--  文字:  铁  --*/
0x30,0x30,0x3D,0x7D,0xC1,0xFB,0x78,0x33,0x7B,0x78,0x30,0x3C,0x39,0x33,0x02,0x00,
0x30,0x30,0xB0,0xFC,0xFC,0x30,0x30,0xFE,0xFE,0x30,0x70,0xD8,0x8C,0x06,0x02,0x00,

/*--  文字:  通  --*/
0x07,0x67,0x31,0x10,0x07,0xF7,0xF6,0x37,0x36,0x37,0x36,0x36,0x38,0x6F,0xC7,0x00,
0xFC,0xF8,0xB0,0xE0,0xFC,0xFC,0x6C,0xFC,0x6C,0xFC,0x6C,0x6C,0x00,0xFE,0xFE,0x00,

/*--  文字:  电  --*/
0x03,0x03,0x3F,0x3F,0x33,0x33,0x3F,0x33,0x33,0x3F,0x3F,0x33,0x03,0x03,0x01,0x00,
0x00,0x00,0xF8,0xF8,0x18,0x18,0xF8,0x18,0x18,0xF8,0xF8,0x06,0x06,0xFE,0xFC,0x00,

/*--  文字:  子  --*/
0x3F,0x3F,0x00,0x00,0x01,0x01,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x07,0x03,0x00,
0xF8,0xF8,0x30,0x60,0xC0,0x80,0xFE,0xFE,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,

/*--  文字:  设  --*/
0x23,0x33,0x1B,0x13,0x07,0xF6,0xF7,0x37,0x33,0x33,0x31,0x3C,0x39,0x37,0x06,0x00,
0xF0,0xF0,0x30,0x30,0x3E,0x1E,0xF8,0xF8,0x18,0x30,0xB0,0xE0,0xF0,0x9E,0x0C,0x00,

/*--  文字:  备  --*/
0x06,0x07,0x0F,0x1C,0x36,0x03,0x0F,0x78,0x1F,0x1F,0x19,0x1F,0x19,0x1F,0x1F,0x00,
0x00,0xF0,0xF0,0x30,0x60,0xC0,0xF0,0x1E,0xF8,0xF8,0x98,0xF8,0x98,0xF8,0xF8,0x00,

/*--  文字:  有  --*/
0x03,0x03,0x7F,0x7F,0x06,0x0F,0x1F,0x3C,0x6F,0xCC,0x0C,0x0F,0x0C,0x0C,0x0C,0x00,
0x00,0x00,0xFE,0xFE,0x00,0xF8,0xF8,0x18,0xF8,0x18,0x18,0xF8,0x18,0x38,0x30,0x00,

/*--  文字:  限  --*/
0x00,0x7D,0x7D,0x6D,0x6D,0x79,0x79,0x6D,0x6D,0x6D,0x7D,0x79,0x61,0x61,0x61,0x00,
0x00,0xFC,0xFC,0x8C,0xFC,0x8C,0xFC,0xFC,0xA0,0xAC,0xB8,0xB0,0xD8,0xCE,0x84,0x00,

/*--  文字:  公  --*/
0x00,0x0C,0x0C,0x0C,0x18,0x10,0x33,0x63,0x46,0x06,0x0C,0x18,0x3F,0x3F,0x00,0x00,
0x00,0x60,0x60,0x60,0x30,0x18,0x0C,0x06,0x00,0x60,0x60,0x30,0xF8,0x18,0x00,0x00,

/*--  文字:  司  --*/
0x00,0x3F,0x3F,0x00,0x7F,0x7F,0x00,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x00,0x00,0x00,
0x00,0xFC,0xFC,0x0C,0xEC,0xEC,0x0C,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x3C,0x38,0x00,

/*--  文字:  高  --*/
0x01,0x7F,0x7F,0x00,0x1F,0x18,0x1F,0x00,0x7F,0x60,0x6F,0x6C,0x6F,0x60,0x60,0x00,
0x80,0xFC,0xFC,0x00,0xF0,0x30,0xF0,0x00,0xFC,0x0C,0xEC,0x6C,0xEC,0x1C,0x18,0x00,

/*--  文字:  时  --*/
0x00,0xFC,0xFC,0xCD,0xCD,0xCC,0xFC,0xFD,0xCC,0xCC,0xFC,0xFC,0xCC,0x00,0x00,0x00,
0x18,0x18,0x18,0xFE,0xFE,0x18,0x18,0x98,0xD8,0xD8,0x18,0x18,0x18,0x38,0x30,0x00,

/*--  文字:  兵  --*/
0x00,0x1F,0x1F,0x18,0x18,0x1F,0x1F,0x18,0x18,0xFF,0xFF,0x04,0x0C,0x38,0x70,0x00,
0x30,0xF8,0x80,0x00,0x00,0xF8,0xF8,0x60,0x60,0xFE,0xFE,0x60,0x30,0x18,0x0C,0x00

};

/*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()
{
	uchar idata i;
	uint  idata O_X,O_Y;
	uint  idata j;

	P23=0;
	P25=1;
	P24=1;

	initial_lcd();	// 调初始化函数

	// 中文显示(图形方式)
	for(i=0;i<12;i++)
		CCW2_PR(0x08+i*2,0x02,i);  // 调中文显示函数(图形方式)
	for(i=0;i<3;i++)
		CCW2_PR(0x1b+i*2,0x16,12+i); 

	draw_vertical(9,239,4);	// y轴 坐标系原点坐标为 (4,235)
	draw_bias(4,9,0,13);	// 画箭头
	draw_bias(4,9,8,13);
	for(i=0;i<21;i++)	// 画刻度
	{	j=225-i*10;
		draw_horizontal(4,6,j);
	}
	
	draw_horizontal(0,299,235);	// x轴
	draw_bias(299,235,295,231);	// 画箭头
	draw_bias(299,235,295,239);
	for(i=0;i<28;i++)	// 画刻度
	{	j=14+i*10;
		draw_vertical(233,235,j);
	}
	
	w_ASCII(2,1,'Y');
	w_ASCII(38,29,'X');
	
	draw_bias(4,235,160,120);
	for(i=0;i<6;i++)
		draw_circle(160,120,20+i*10);

	//------------西文显示-------------
	LCD_CMD_ADR=0x5d;  // 设光标形状
	LCD_DAT_ADR=0x01;
	LCD_DAT_ADR=0x87;

	LCD_CMD_ADR=0x5b;  // OVLAY代码
	LCD_DAT_ADR=0x01;

	LCD_CMD_ADR=0x59;  // DISP ON\OFF代码
	LCD_DAT_ADR=0x57;  // 开光标闪动 2Hz
	O_X=0;	  //X轴方向取值0~39(十进制)
	O_Y=0;	 //Y轴方向取值0~29(十进制)
	
	w_string(0x08,0x05,"TIETONG ELECTRONICS CO.LTD");
	w_string(0x1b,0x19,"Ceeback.GAO");
//------- 中文显示(文本方式)-----------
	//CGRAM();	  // 调CGRAM子程序
/*	num=0x00;  // 取字模
	O_X=0x10;
	O_Y=0x03;
	CCW1_PR(O_X,O_Y,num);  // 调中文显示函数(文本方式)
	num=0x01;  // 取字模
	O_X=0x12;
	O_Y=0x03;
	CCW1_PR(O_X,O_Y,num);  // 调中文显示函数(文本方式)
	num=0x02;  // 取字模
	O_X=0x14;
	O_Y=0x03;
	CCW1_PR(O_X,O_Y,num);  // 调中文显示函数(文本方式)
	num=0x03;  // 取字模
	O_X=0x16;
	O_Y=0x03;
	CCW1_PR(O_X,O_Y,num);  // 调中文显示函数(文本方式)
*/
	

	while(1);
}

///*****************
//	 初始化函数
///*****************
void initial_lcd(void)
{
	uchar idata i;

	LCD_CMD_ADR=0x40;   // SYSTEM SET代码
	for(i=0;i<8;i++)
		LCD_DAT_ADR=SYSTAB[i];  // 写入参数

	LCD_CMD_ADR=0x44;   // SCROLL代码
	for(i=0;i<8;i++)
		LCD_DAT_ADR=SCRTAB[i];	// 写入参数

	LCD_CMD_ADR=0x5a;   // HDOT SCR 代码
	LCD_DAT_ADR=0x00;   // 设置参数P1

	LCD_CMD_ADR=0x5b;   // OVLAY	代码
	LCD_DAT_ADR=0x01;   // 设置参数:显示一,三区为文本属性,合成方式为双重异或

	clear_lcd();	   // 调清屏函数

	LCD_CMD_ADR=0x59;   // 显示状态设置
	LCD_DAT_ADR=0x54;   // 设置参数:显示一~四区开显示
}


///******************
//	  清屏函数
///******************
void clear_lcd(void)
{
	uint idata i;

	LCD_CMD_ADR=0x4c;   // CSRDIR 代码

	LCD_CMD_ADR=0x46;   // CSRW 代码
	LCD_DAT_ADR=0x00;   // 设置参数光标指针低8位
	LCD_DAT_ADR=0x00;   // 设置参数光标指针高8位

	LCD_CMD_ADR=0x42;   // MWRITE 代码
	for(i=0;i<0x8000;i++)
			LCD_DAT_ADR=0x00;   // 写入数据
}


// CGRAM函数
// 功能:在文本层显示汉字时使用,每次调用此函数向CGRAM 
//		 中写入一个汉字的点阵数据.调用代码固定为0x80
// num: 要显示字符在code uchar CGTAB[i][32] 中i的数值
void CGRAM(uint num)
{
	uchar idata i;

	LCD_CMD_ADR=0x5c;  // CGRAMADR 代码
	LCD_DAT_ADR=0x00;  // 设置SAG=0x3000
	LCD_DAT_ADR=0x30;

	LCD_CMD_ADR=0x46;  // CSRW 代码
	LCD_DAT_ADR=0x00;  // 设置CSR=0x3400(字符代码=80H)
	LCD_DAT_ADR=0x34;

	LCD_CMD_ADR=0x4c;  // CSRDIR	代码
	LCD_CMD_ADR=0x42;  // MWRITE	代码

	for(i=0;i<32;i++)
		LCD_DAT_ADR=CGTAB[num][i];	 //	写入字模数据
}

// 写汉字函数(文本方式)	
// 经实践证明在文本层写汉字不好用,一次最多写16个汉字,
// 所以写汉字一律采用在图形层写
// 输入参数: O_X:水平
void CCW1_PR(uchar O_X,uchar O_Y,uint num)
{
	uint idata j;
	
	CGRAM(num);

	j=PARA*O_Y+O_X;

	LCD_CMD_ADR=0x4f;	  // CSRDIR	代码(下移)

	LCD_CMD_ADR=0x46;	  // CSRW 代码
	LCD_DAT_ADR=(uchar)j; // 设置光标地址
	LCD_DAT_ADR=(uchar)(j>>8);

	LCD_CMD_ADR=0x42;	// MWRITE代码
	LCD_DAT_ADR=0x80;	// 写入汉字代码左上部
	LCD_DAT_ADR=0x81;  // 写入汉字代码左下部

⌨️ 快捷键说明

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