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

📄 lcdlms283.c

📁 三星液晶LMS283gf-01的初始化spi配置代码
💻 C
字号:
void mdelay(int ms)
{
	U32 val = (PCLK>>3)/1000-1;
	
	rTCFG0 &= ~(0xff<<8);
	rTCFG0 |= 3<<8;			//prescaler = 3+1
	rTCFG1 &= ~(0xf<<12);
	rTCFG1 |= 0<<12;		//mux = 1/2

	rTCNTB3 = val;
	rTCMPB3 = val>>1;		// 50%
	rTCON &= ~(0xf<<16);
	rTCON |= 0xb<<16;		//interval, inv-off, update TCNTB3&TCMPB3, start timer 3
	rTCON &= ~(2<<16);		//clear manual update bit
	while(ms--) {
		while(rTCNTO3>=val>>1);
		while(rTCNTO3<val>>1);
	};

}

void InitSPI(void)  
{ 
 
  rGPDCON &= ~(3<<16);  
  rGPDCON |= (3 << 16); //GPD8,SPIMISO1
  
  rGPDCON &= ~(3<<18);  
  rGPDCON |= (3 << 18); //GPD9,SPIMOSI1
  
  rGPDCON &= ~(3<<20);  
  rGPDCON |= (3 << 20); //GPD10,SPICLK1

  rGPDUP &= ~(1<<8); //enable pullup for GPD8 
  rGPDUP &= ~(1<<9); //enable pullup for GPD9
  rGPDUP &= ~(1<<10); //enable pullup for GPD10
  
  // Config GPC6 is Master SPI CS                                     
  rGPCCON &= ~(3<<12);                           
  rGPCCON |=  (1<<12); //GPC6 as out
  
  // Initialize CS is high 
  rGPCUP  &= ~(1<<6); //enable pullup for GPC6         
  rGPCDAT |=  (1<<6); //CS,High   

  rSPPRE1 = 0x18; 
     

  rSPCON1 =0x18; //001 1000 
 
  rSPPIN1=0x02;   //使用默认值   
} 

void SPI_Write(char *pBuffer, char dwNumBytes) 
{ 
  char *temp ; 
  char i ;
  
  
  temp = pBuffer;  
  rGPCDAT &= ~(1<<6);// Set CS to low
  //Delay(1); 
  
	for(i=0;i<dwNumBytes;i++)
	{
	  // Check the status of Transfer Ready flag(READY=1) ,and then write data to SPTDAT0 
	  while( (rSPSTA1 & 0x01) != 1 ); 
	  rSPTDAT1 = *temp; // Write Potentiometer value 
	  temp++;
	}
  
   
  // Wait to complete write data 
  while( (rSPSTA1 & 0x01) != 1 ); 
  
  //Delay(1);  
  rGPCDAT  |= (1<<6); // Set CS to high 
} 

void lcd_SpiSetREG(char RegAdd,int value)
{
	char temp[3];
	//Sets Index Register
	temp[0]=0x74;
	temp[1]=0x00;
	temp[2]=RegAdd;
	SPI_Write(temp,3);
	//Writes Instruction
	temp[0]=0x76;
	temp[1]=(value>>8)&0xff;
	temp[2]=(value)&0xff;
	SPI_Write(temp,3);
}

void Lcd_Reset()
{
	//POWER ON
	//reset
	//_1ms_|~~~>20ms~~|_>1ms_|~~~~复位波形
	mdelay(10);
	
	rGPCCON &= ~(3 << 10);					
	rGPCCON |=  (1 << 10);//GPC5 as OUT
	
	rGPCUP  &= ~(1 <<  5);//enable pullup for GPC5
	
	rGPCDAT &= ~(1 << 5);//resetIO low
	mdelay(1);
	
	rGPCDAT |=  (1 <<  5);//resetIO high	
	mdelay(30);
	
	rGPCDAT &= ~(1 << 5);//resetIO low
	mdelay(5);
	
	rGPCDAT |= (1 << 5);//resetIO high
	mdelay(1);
}

void Lcd_SpiInit()
{	
	mdelay(2);
	lcd_SpiSetREG(0x07,0x0000);
	lcd_SpiSetREG(0x13,0x0000);		
	mdelay(10);
	lcd_SpiSetREG(0x11,0x3004);
	lcd_SpiSetREG(0x14,0x200F);
	lcd_SpiSetREG(0x10,0x1A20);
	lcd_SpiSetREG(0x13,0x0040);
	mdelay(50);
	lcd_SpiSetREG(0x13,0x0060);
	lcd_SpiSetREG(0x13,0x0070);
	mdelay(200);
	lcd_SpiSetREG(0x01,0x0127);
	lcd_SpiSetREG(0x02,0x0700);
	lcd_SpiSetREG(0x03,0x1030);
	lcd_SpiSetREG(0x08,0x0208);
	lcd_SpiSetREG(0x0B,0x0620);
	lcd_SpiSetREG(0x0C,0x0110);
	lcd_SpiSetREG(0x30,0x0120);
	lcd_SpiSetREG(0x31,0x0127);
	lcd_SpiSetREG(0x32,0x0000);
	lcd_SpiSetREG(0x33,0x0503);
	lcd_SpiSetREG(0x34,0x0727);
	lcd_SpiSetREG(0x35,0x0124);
	lcd_SpiSetREG(0x36,0x0706);
	lcd_SpiSetREG(0x37,0x0701);
	lcd_SpiSetREG(0x38,0x0F00);
	lcd_SpiSetREG(0x39,0x0F00);
	lcd_SpiSetREG(0x40,0x0000);
	lcd_SpiSetREG(0x41,0x0000);
	lcd_SpiSetREG(0x42,0x013F);
	lcd_SpiSetREG(0x43,0x0000);
	lcd_SpiSetREG(0x44,0x013F);
	lcd_SpiSetREG(0x45,0x0000);
	lcd_SpiSetREG(0x46,0xEF00);
	lcd_SpiSetREG(0x47,0x013F);
	lcd_SpiSetREG(0x48,0x0000);
	lcd_SpiSetREG(0x07,0x0015);
	mdelay(30);
	lcd_SpiSetREG(0x07,0x0017);
	
	//DISPLAY ON
	lcd_SpiSetREG(0x20,0x0000);
	lcd_SpiSetREG(0x21,0x0000);
	lcd_SpiSetREG(0x22,0x0000);
}

⌨️ 快捷键说明

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