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

📄 lcddrv1335.c

📁 44BO 的UCGUI包
💻 C
字号:
/*
---------------------------------------------------------
文件	: LcdDrv1335.c
目的	: 1335的lcd控制器的驱动,用于uC/GUI
编程    :罗良涛
日期	: 2005-6-24 
---------------------------------------------------------
*/
#define uchar 	unsigned char
#define uint 	unsigned short
#define ulong 	unsigned long
/*define SED1335 port address*/

#define SedWrtCmdAdd     (0x04160000)
#define SedWrtDatAdd     (0x04140000)
#define SedReadStatusAdd (0x04140000)
#define SedReadDatAdd    (0x04160000)

/*define LCD code */
#define SYSSET    	0x40
#define SCROLL    	0x44
#define SLEEP    	0x53
#define DISPON   	0x59
#define DISPOFF 	0x58
#define OVLAY 		0x5b
#define HDOTSCR 	0x5a
#define CSRFORM 	0x5d
#define CGRAMADR 	0x5c
#define CSRRGT 		0x4c
#define CSRLFT 		0x4d
#define CSRUP 		0x4e
#define CSRDOWN 	0x4f
#define CSRW 		0x46
#define CSRR 		0x47
#define MWRITE 		0x42
#define MREAD 		0x43
#define AP 			40


/*LCD initial parameters*/
uchar SYSTAB[8]  = {0x30,0x07,0x0f,0x27,0x50,0xf0,0x28,0x00};
uchar SCRTAB[10] = {0x00,0x00,0xf0,0x80,0x25,0xf0,0x00,0x4b,0x00,0x00};

uchar test[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x1E,0x22,0x42,0x42,0x3F,0x00,0x00};
uchar longfly[]= {0x00,0x00,0xFF,0xC0,0x00,0x40,0x00,0x48,0x00,0x50,0x00,0x60,0x00,0x60,0x00,0x50,
0x00,0x48,0x00,0x40,0x00,0x20,0x00,0x22,0x00,0x12,0x00,0x0A,0x00,0x06,0x00,0x00};

void  Delay()
{
	uint i;
	for(i = 0; i < 10; i++)
		;
}
/*SBUROUTINES OF LCD DRIVE*/
//写LCD控制命令
void InputLCDCmd(uchar cmd ) 
{
	volatile uchar *p;
//	uchar rstatus;
	
//	p = (uchar *)SedDatAdd;
//	rstatus = *p;
//	while(rstatus & 0x40)
//	{
//		rstatus = *p;
//	}
	p = (uchar *)SedWrtCmdAdd;
	*p = cmd;
	Delay();
}

//写LCD控制参数和显示字符数据
void InputLCDData(uchar dat ) 
{
	volatile uchar *p;
//	uchar rstatus;
	p = (uchar *)SedWrtDatAdd;
//	rstatus = *p;
//	while(rstatus & 0x40)
//	{
//		rstatus = *p;
//	}
	*p = dat;
	Delay();
}

/*读1335控制器显示内存,
* ramadd为内存地址
*/
uchar ReadLCDRamDat(uint ramadd)
{
	volatile uchar *p;
	uchar result;
	uchar high,low;
	
	low  = ramadd & 0xff;
	high = (ramadd>>8) & 0xff;
	InputLCDCmd(CSRW);
	InputLCDData(low);
	InputLCDData(high);
	
	InputLCDCmd(MREAD);
	p = (uchar *)SedReadDatAdd;
	result = *p;
	return(result);
}
//显示存储器清零
void ClrDispRAM(void) 
{
	ulong i;
	InputLCDCmd(CSRRGT);
	InputLCDCmd(CSRW);
	InputLCDData(0x00);
	InputLCDData(0x00);
	
	InputLCDCmd(MWRITE);
	for(i = 0; i <= 32 * 1024; i++)
	{
		InputLCDData(0x00);
	}
}

//初始化LCD显示参数以及界面
void InitLCD(void) 
{
	uchar i;
	
	InputLCDCmd(SYSSET);
	for(i = 0; i < 8; i++)
	{
		InputLCDData(SYSTAB[i]);
	}
	
	InputLCDCmd(SCROLL);
	for(i = 0; i < 10; i++)
	{
		InputLCDData(SCRTAB[i]);
	}
	
	InputLCDCmd(HDOTSCR);
	InputLCDData(0X00);
	
	InputLCDCmd(OVLAY);
	InputLCDData(0X1c);
	//InputLCDData(0X00);
	
	InputLCDCmd(DISPOFF);
	InputLCDData(0X56);
	
	ClrDispRAM();
	
	InputLCDCmd(CSRFORM);
	InputLCDData(0X07);
	InputLCDData(0X8f);
	
	InputLCDCmd(DISPON);
	InputLCDData(0X16);
//	InputLCDData(0X10);
//	ClrDispRAM();
}

//功能:显示16×8点字符,num为要显示的字符块长度
//x坐标为低8位寄存器(字节),y坐标寄存器(点行)
void WBlock(uint x,uint y,uchar *p,uchar num )
{ 
	uint  temp;
	uchar hi,lo;
	uchar i;
	
	temp = y*AP + x;
	hi   = (temp >> 8) & 0xff;
	lo   = temp & 0xff;
	
	InputLCDCmd(CSRDOWN);
	InputLCDCmd(CSRW);
	InputLCDData(lo);
	InputLCDData(hi);
	
	InputLCDCmd(MWRITE);
	for(i = 0; i < 16; i++)
	{
		InputLCDData(*p++);
	}
}
//功能:显示16×16点字符,num为要显示的字符块长度
//x坐标为低8位寄存器(字节),y坐标寄存器(点行)
void WBlock_HZ(uint x,uint y,uchar *p,uchar num )
{ 
	unsigned short  temp = 0;
	uchar hi,lo;
	uchar i,temp1[32];
	
	for(i=0;i<32;i++)
		temp1[i] = *p++;
	temp = y*AP*16 + x;
	hi   = (temp >> 8) & 0xff;
	lo   = temp & 0xff;
	
	InputLCDCmd(CSRDOWN);
	InputLCDCmd(CSRW);
	InputLCDData(lo);
	InputLCDData(hi);
	
	InputLCDCmd(MWRITE);
	for(i = 0; i < 16; i++)
	{
		InputLCDData(temp1[2*i]);
	}
	
	temp += 1;
	hi   = (temp >> 8) & 0xff;
	lo   = temp & 0xff;
	
	InputLCDCmd(CSRDOWN);
	InputLCDCmd(CSRW);
	InputLCDData(lo);
	InputLCDData(hi);
	
	InputLCDCmd(MWRITE);
	for(i = 0; i < 16; i++)
	{
		InputLCDData(temp1[2*i+1]);
	}
}
//清除显示屏幕
void ClrScreen(void)
{
	uint i,j;
	InputLCDCmd(CSRRGT);
	InputLCDCmd(CSRW);
	InputLCDData(0X00);
	InputLCDData(0X00);
	InputLCDCmd(MWRITE);
	for(i=0;i<40;i++)
	{
		for(j=0;j<240;j++) 
		{
			InputLCDData(0x00);
		}
	}
}
/*调试函数*/
void debug(void)
{
	uchar *p;
	uint i,j;
	InitLCD();
	ClrScreen();
	p = &longfly[0];
	for(i=0; i<40; i++)
		WBlock(i,0,test,1);
	
		for(j = 1; j<15; j++)
		{
			for(i=0; i<20; i++)
				WBlock_HZ(2*i,j,p,1);
		}
	
	//while(1);
	//ClrScreen();
}

⌨️ 快捷键说明

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