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

📄 gfd7920.c

📁 在ARM平台上开发的LCD驱动程序,具有很强的通用性.
💻 C
字号:
/*************************************************************************************
*	Copyright (c) 2005 by National ASIC System Engineering Research Center.
*	PROPRIETARY RIGHTS of ASIC are involved in the subject matter of this 
*	material.  All manufacturing, reproduction, use, and sales rights 
*	pertaining to this subject matter are governed by the license agreement.
*	The recipient of this software implicitly accepts the terms of the license.
*
*   wuer 0608 12864e 测试
**************************************************************************************/


#include "garfield.h"
int i=0;



#define delay10ms()		do{for(i=0;i<100000;i++);}while(0)	
#define delay1ms()		do{for(i=0;i<10000;i++);}while(0)	
#define delay100us()	do{for(i=0;i<1000;i++);}while(0)					
#define delay10us() 	do{for(i=0;i<100;i++);}while(0)	

#define	show()
#define	showStop()


unsigned char  test[]={0x0,0xff,0xf0,0x0f,0xba,0x0,0xf,0xf};
unsigned char  initda[]={0x08,0x01,0x02,0x10,0x38,0x0c,0x80};
unsigned char  initda2[]={0x0c,0x34,0x06,0x03,0x40};
unsigned char  disdata1[]={0xba,0xc0,0xba,0xc1,0xba,0xc2,0xba,0xc3,0xba,0xc4,0xba,0xc5,0xba,0xc6,0xbf,0xc0,0xba,0xc7,0xba,0xc8,0xba,0xc3,0xba,0xc4,0xba,0xc5,0xba,0xc6};
unsigned char  disdata2[]={0xb9,0xe6,0xbc,0xc1,0xbc,0xc2,0xbc,0xc3,0xbc,0xc4,0xbc,0xc5,0xbc,0xc6,0xbe,0xc0,0xba,0xc9,0xba,0xca,0xba,0xc3,0xba,0xc4,0xba,0xc5,0xba,0xc6};

unsigned char  PROCHIP[]={"   WelCome    "};
unsigned char  njupt[]={"南京博芯电子技术有限公司"};
unsigned char  author[]={" Prochip Corp "};
unsigned char  web[]={"wujp 2007-08-20"};

/*-----------------------------------------------------------------------
延时函数
需要根据工作频率加以调整
-----------------------------------------------------------------------*/
void delay_1us(void)                 //1us
{
	for (i=10;i>0;i--); 
}

void delay_nus(unsigned int n)       //n ms
{
	for (i=0;i<n;i++)
		delay_1us();
}
  
void delay_1ms(void)                 //1ms
{
	for (i=0;i<10000;i++); 
}
  
void delay_nms(unsigned int n)       //N ms
{
	for (i=0;i<n;i++)
		delay_1ms();
}


/*--------------------------------------------------------------------------
PE8-PE15:d0--d7
GPIO口控制
---------------------------------------------------------------------------*/
#if 1
void gpioCom(int a)
{
	*(RP16)0x1000b02c = 0xff;						// 低8位选择为通用GPIO口	
	*(RP16)0x1000b030 = (char)(a);					// 低8位数据写成需要写入的数据-->d0~d7
	*(RP16)0x1000b028 = 0x0;  					// 低8位方向为输出
	
}
#else
void gpioCom(int a)
{
	*(RP16)0x1000b038 = 0xff00;						// 高8位选择为通用GPIO口	
	*(RP16)0x1000b048 = (int)(a<<8);				// 高8位数据写成需要写入的数据-->d0~d7
	*(RP16)0x1000b034 = 0x00ff;  					// 高8位方向为输出
	
}
#endif
/*--------------------------------------------------------------------------
	缓冲器使能(0) -->PD1
	R/W --> PD5     choice read or write
	RS --> PD3      commadn or data
	E -->PD7        enable the lcd,下降沿写入数据或者命令
---------------------------------------------------------------------------*/
/*
void lock(void)   					// 缓冲器使能端 -> HIGH
{
	*(RP)0x1000b02c |= 0x2;			//	sel pd1
	*(RP)0x1000b030 |= 0x2;			//	data pd1 -> 1
	*(RP)0x1000b028 &= ~0x2;  		//  dir pd1

}

	
void unLock(void) 					// 缓冲器使能端 -> LOW
{
	*(RP)0x1000b02c |= 0x2;			//	sel pd1
	*(RP)0x1000b030 &= ~0x2;		//	data pd1 -> 0
	*(RP)0x1000b028 &= ~0x2;  		//  dir pd1
	
}

*/
void R(void) 	
{
	*(RP)0x1000b038 |= 0x8000;		//	sel pe15
	*(RP)0x1000b048 |= 0x8000;		//	data pd5 -> 1
	*(RP)0x1000b034 &= ~0x8000;  		//  dir pd5 out
}


void W(void) 	
{
	*(RP)0x1000b038 |= 0x8000;		//	sel pd5
	*(RP)0x1000b048 &= ~0x8000;		//	data pd5 -> 0
	*(RP)0x1000b034 &= ~0x8000;  		//  dir pd5 out
}


void D(void)   	
{
	*(RP)0x1000b038 |= 0x2000;			//	sel pe13
	*(RP)0x1000b048 |= 0x2000;			//	data pd3 -> 1
	*(RP)0x1000b034 &= ~0x2000;  		//  dir pd3 out

}


void C(void)  
{
	*(RP)0x1000b038 |= 0x2000;			//	sel pd3
	*(RP)0x1000b048 &= ~0x2000;		//	data pd3 -> 0
	*(RP)0x1000b034 &= ~0x2000;  		//  dir pd3 out

}

/*
void lingtOn(void)
{
	*(RP)0x1000b02c |= 0x10;		//	sel pd4
	*(RP)0x1000b030 |= 0x10;		//	data pd4 -> 1
	*(RP)0x1000b028 &= ~0x10;  		//  dir pd4
}	
	

void lingtOff(void)
{
	*(RP)0x1000b02c |= 0x10;		//	sel pd4
	*(RP)0x1000b030 &= ~0x10;		//	data pd4 -> 0
	*(RP)0x1000b028 &= ~0x10;  		//  dir pd4
}	

*/

void E(void)   						// nOE -> HIGH
{
	*(RP)0x1000b038 |= 0x4000;		//	sel pe14
	*(RP)0x1000b048 |= 0x4000;		//	data pa7 -> 1
	*(RP)0x1000b034 &= ~0x4000;  		//  dir pa7

}

	
void disE(void) 					// nOE -> LOW
{
	*(RP)0x1000b038 |= 0x4000;		//	sel pa7
	*(RP)0x1000b048 &= ~0x4000;		//	data pa7 -> 0
	*(RP)0x1000b034 &= ~0x4000;  		//  dir pa7
	
}



void com(int a)
{
	

	C();							//RS = 0; 
	W();							//RW = 0; 

	

	gpioCom(a);		
	E();							//E = 1; 		
	delay1ms();
	disE();	        				//E=0;


}


void data(char a)	
{

	D();							//RS = 1; 
	W();							//RW = 0;  
		
	E();
	gpioCom(a);		
								//E = 1; 
	
	disE();							//E=0;
	
	delay1ms();
}


void settoline(int num)
{
	switch(num)
	{
		case 1:	com(0x80);break;
		case 2:	com(0x90);break;
		case 3:	com(0x88);break;
		case 4:	com(0x98);break;
		default: break;
	}
	
	delay1ms();
}
	
	
void lcmidle(void)	
{
	char a;
	D();							//RS = 0; 
	W();							//RW = 1;  
		
	E();
	
	delay1ms();							//E = 1; 
	
	disE();							//E=0;
	
	
	a = (*(RP16)0x1000b048)>>8;
	
	printf("idle var is 0x%x\n",a);
	delay1ms();
}
	




/////////////////////////////////////////////////////
void extend(void)
{
	D();							//RS = 1; 
	W();							//RW = 0;  
		
	E();							//E = 1; 
	gpioCom(0x3c);		
								
	
	disE();							//E=0;
	
	delay100us();
}	

void draw_xline(char x, char y, char line_data, char icount)
{
	int c = 0;
	
	com(0x34);
	com(y);
	com(x);
	com(0x30);
	for(c=0; c<icount; c++)
	{
    	data(line_data);
    }
	
	com(0x36);
	com(0x30);
	

}





void init(void) 						//  初始化  lcd
{	
	//lingtOn();							// 15脚电平拉高,背光亮,并口模式

	//unLock();
	
	delay100us();
	
 	W();								//尝试仅仅是写入数据,通过延时解决等待时间问题。
	
	
	for(i=0;i<3;i++)   					//delay 40ms wait for the out device
	{
	  delay10ms();
	}	


	com(0x1);		   					// 清屏
	delay10ms();
	//delay10ms();

	for(i=0; i<3; i++)					// 模式设置
	{
		com(0x30);
		delay10ms();
	}	
	

	com(0x01);
	//delay10ms();
	//delay10ms();
	delay10ms();
		
	//com(0x80);							//ddram add
	//delay10ms();
		
	com(0xf);							//OPEN DIS
	delay1ms();		
	

	//lingtOff();
}	

int main(void)
{	
	int j = 0;
	//char *p = NULL;
	system_init();
	
	*(RP)0x10000000 = 0;				// 关闭所有中断,避免其他影响
	

	
	init();								// LED屏幕初始化



	
/*--------------------------------------------------------------------------
	汉字显示测试
---------------------------------------------------------------------------*/
#if 0	
	while( (njupt[j]) != '\0')
	{	

		data( njupt[j]);	
		j++;

	}

	//lcmidle();
	
	//extend();
	com(0x90);
	delay1ms();
	
	//lcmidle();
	
	j = 0;
	while( (author[j]) != '\0')
	{	

		data( author[j]);	
		j++;

	}
	
	//lcmidle();
	//draw_xline(0x10,0x10,0x30,16);
	

	

while(1);

#endif		
	
/*--------------------------------------------------------------------------
	DEMO显示测试
---------------------------------------------------------------------------*/	
	//lcmidle();
	
	while( (njupt[j]) != '\0')
	{	

		data( njupt[j]);	
		j++;

	}
	
	settoline(2);
	//lcmidle();
	
	
	j = 0;
	while( (author[j]) != '\0')
	{	

		data( author[j]);	
		j++;

	}
settoline(3);
	//lcmidle();
	j = 0;
	while( (PROCHIP[j]) != '\0')
	{	
	
		data( PROCHIP[j]);	
		j++;

	}
	
	settoline(4);
	//lcmidle();
	j = 0;
	while( (web[j]) != '\0')
	{	
	
		data( web[j]);	
		j++;

	}
	//lcmidle();
	
	
	//com(0x34);
	//com(0x88);
	//com(0x30);

	
	
	//lingtOff();
	
	
	j = 0;

		
while(1);
}

 
 


⌨️ 快捷键说明

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