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

📄 drv_320240.c

📁 使用键盘上的上、下、左、右四个按键
💻 C
📖 第 1 页 / 共 3 页
字号:
	unsigned char ucRegCount;
	unsigned char i;
	unsigned int idx;
	// Initial the MCU #WAIT pin
	*( volatile unsigned char * )0x402DC |= 0x01;
	
	// Enable Blank Display
	MACRO_ENABLE_BLANK_DISPLAY();

	ucRegCount = sizeof( S1D13706REG ) / sizeof( REG_INIT_ITEM );
	for( i =0 ; i < ucRegCount; i++ )
		*( ucpRegBaseAddr + ( S1D13706REG[ i ].S1D_INDEX )) = S1D13706REG[ i ].S1D_VALUE ;

	// Disable "blanking" display
	MACRO_DISABLE_BLANK_DISPLAY();
	
	vExitPowerSaveMode( );
	
	// after delay for 40 milli-seconds Power Up LCD
	vDelay( );
	MACRO_ENABLE_LCD_PANEL();
	
	//Writer palette register for 256 color

	for (idx = 0; idx < 256; idx++)
  {
      *(ucpRegBaseAddr + 0x0A) = LUT8_Color[3*idx];     //red
      *(ucpRegBaseAddr + 0x09) = LUT8_Color[3*idx+1];   //green
      *(ucpRegBaseAddr + 0x08) = LUT8_Color[3*idx+2];   //blue

      *(ucpRegBaseAddr + 0x0B) = ( unsigned char ) idx;  //write index to update LUT entry
  }

	//Ar320240Demo();// demo program
        
}
/***********************************************************************************/

/************************************************************************************/

void  _Test_DrawVerticalStripe(void)
{
	unsigned char i;
	int nColumn =0 ;
	int nLine =0 ;
	unsigned short *pUshDispMem = uspMemBaseAddr ;
	unsigned short ddd[]={0xffff,0x6060,0xa0a0,0x4f4f,0x7f7f,0x3f3f,0x2f2f,0x0};
	unsigned short *addr;
	addr=ddd;
	for( i = 0; i < 8;addr++, i++)

		for( nLine =0 ; nLine < 30 ; nLine++)
		{
			for(nColumn = 0; nColumn < S1D_DISPLAY_WIDTH / 2; nColumn++)
			
			 	*pUshDispMem++ =*addr;
			
		}
}
/****************************************************************************/
void color(void)
{  
   unsigned char i=12, j;  
   unsigned char *pUchDispMem = ucpMemBaseAddr ;
   unsigned char *p=ucpMemBaseAddr;
   for(j=0;j<16;j++)
   {
       unsigned short nLine;
	   for( nLine=0;nLine<16;nLine++)
	   {
		  unsigned short k;
          for( k=0;k<320;k++)
		  {
			  *p=j+i*16;
			  p++;
		  }
	   }
   }
 
}
  
/*******************************************************************************/
void  _Test_DrawHorizontalStripe( void )
{
	int nColumn =0 ;
	int nLine =0 ;
	unsigned char i;
	unsigned short ddd[]={0xff,0x60,0xa0,0x4f,0x7f,0x3f,0x2f,0x0};
   
	unsigned char *pUchDispMem = ucpMemBaseAddr;
	
	for( nLine =0; nLine <= 240 ; nLine++)
	{  
      unsigned short *p=ddd;
      for(i=0;i<8;i++)
	  {  
		 for(nColumn=0;nColumn<40;nColumn++)
            *pUchDispMem++=*p;
		 p++;
	  }
     pUchDispMem=ucpMemBaseAddr+nLine*S1D_ONE_LINE_BYTES_NUMBER;
	}
}

/***********************************************************************************************
 * vAr320240SetPixel
 *   Type :	void
 *   Ret val :	none
 *   Argument :	unsigned char usX:		range: 0~319
 *		unsigned char usY:		range: 0~239
 *		unsigned char ucPixelColor:	range: 0~255
 *   Function :	Draw a pixel
 ***********************************************************************************************/
void vAr320240SetPixel(unsigned short usX, unsigned char ucY, unsigned char ucPixelColor )
{
       // unsigned char ucGetPixel;
   	if( usX >= S1D_DISPLAY_WIDTH || ucY >= S1D_DISPLAY_HEIGHT )
		 return ;

    *( ucpMemBaseAddr + ucY * S1D_ONE_LINE_BYTES_NUMBER + usX ) = ucPixelColor;
}

/***********************************************************************************************
 * vPutImage
 *   Type:	void
 *   Ret val:	none
 *   Argument:	unsigned char *p:		Image data point
 *		unsigned short usWidth:		Image width
 *		unsigned short usHeight:	Image height
 *   Function:	Display Image
 ***********************************************************************************************/
 void vPutImage( unsigned char *p, unsigned short usWidth, unsigned short usHeight )
{
	unsigned short *uspTmpDispMem = uspMemBaseAddr;
	unsigned long  i;
	unsigned short *pp = ( unsigned short * )p;
	
	for( i = 0; i < usWidth / 8 * S1D_DISPLAY_BPP * usHeight / 2; i++ )
		*uspTmpDispMem++ = *pp++;
}

/***********************************************************************************************
 * vExitPowerSaveMode
 *   Type :	void
 *   Ret val :	none
 *   Argument :	none
 *   Function :	The S1D13706 exit power save mode
 ***********************************************************************************************/
void vExitPowerSaveMode( void )
{
	*( volatile unsigned char * )( REGISTER_OFFSET + 0x0a0 ) &= ( unsigned char )0x0fe;
}

/***********************************************************************************************
 * vAr320240Clr
 *   Type :	void
 *   Ret val :	none
 *   Argument :	none
 *   Function :	Clear LCD screen 
 ***********************************************************************************************/

void vAr320240Clr( void )
{
	unsigned short *uspTmpDispMem = uspMemBaseAddr, i;
	
	for( i= 0; i < S1D_ONE_LINE_SHORT_NUMBER * S1D_DISPLAY_HEIGHT; i++ )
		*uspTmpDispMem ++ = 0xffff;
}
/*******************************************************************************************/
void	vSingleColor(unsigned char color )
{
	unsigned char *ucpTmpDispMem=ucpMemBaseAddr;
	unsigned int  i;
	for(i=0;i<S1D_ONE_LINE_BYTES_NUMBER*S1D_DISPLAY_HEIGHT; i++ )
		*ucpTmpDispMem++=color;
}

/***********************************************************************************************
*   vDelay
*   Type  :      void 
*   Ret val :    none
*   Argument :   none
*   Function :   Delay about 40 ms
***********************************************************************************************/
void vDelay( void )
{
	unsigned long i;
	
	for( i = 0; i < 500000; i++ )
		asm(" nop ");	
}
/****************************************************************************/

void	vDrawASCII( unsigned char ucASCIIX, unsigned char ucASCIIY, 
			unsigned char ASCII, unsigned char ucPixelColor)
{
	unsigned char i, j, ucTmpByte, ucByte;

	for( i = 0; i < 8; i++ )
	{
		ucTmpByte = *( ASCIIchar + ( ASCII - 0x20 ) * 8 + i );
		for( j = 0; j < 8; j++ )
		{
			ucByte = (( ucTmpByte & 0x80 ) >> 7 ) * ucPixelColor;
			if(ucByte==0x0)
              *( ucpMemBaseAddr + ( ucASCIIY * 8 +7- j ) * S1D_ONE_LINE_BYTES_NUMBER + ucASCIIX * 8 + i ) =0xff;//0xff white color
			else
			 *( ucpMemBaseAddr + ( ucASCIIY * 8 +7- j ) * S1D_ONE_LINE_BYTES_NUMBER + ucASCIIX * 8 + i ) = ucByte;
			ucTmpByte <<= 1;
		}
	}
}

/****************************************************************************/
void vDrawASC(unsigned char ucASCX, unsigned char ucASCY, unsigned char ASCII, unsigned char ucPixelColor)
{
	unsigned char i,j,ucTmpByte,ucByte;
	
	for(i=0;i<16;i++)
    {
		ucTmpByte=*(fontASC+(ASCII-0x20)*16+i);
		for(j=0;j<8;j++)
        {
			ucByte = (( ucTmpByte & 0x80 ) >> 7 ) * ucPixelColor;
			if(ucByte==0x0)
              *( ucpMemBaseAddr + ( ucASCY * 16 +i ) * S1D_ONE_LINE_BYTES_NUMBER + ucASCX * 8 + j) =0xff;//0xff white color
			else
			 *( ucpMemBaseAddr + ( ucASCY * 16 +i ) * S1D_ONE_LINE_BYTES_NUMBER + ucASCX * 8 + j ) = ucByte;
			ucTmpByte <<= 1;
		}
	}
}
/*************************************************************************************/
void vDrawASCString(unsigned char ucASCX,unsigned char ucASCY,unsigned char *String,unsigned char ucPixelColor)
{
	unsigned char i,j;
	for(i=0;*String!='\0';i++)
	{
		vDrawASC(ucASCX,ucASCY,*String++,ucPixelColor);
        if(ucASCX!=39)
           ucASCX++;
		else
		{  
           ucASCX=0;
           ucASCY++;
		 
		}
	}
}

/*************************************************************************************/
void   _CheckAndCorrectPointPosition( unsigned short *uspX, unsigned char *ucpY )
{
	if( *uspX  >= S1D_DISPLAY_WIDTH  )
		*uspX  = S1D_DISPLAY_WIDTH  -1;
	if( *ucpY >= S1D_DISPLAY_HEIGHT )
		*ucpY  = S1D_DISPLAY_HEIGHT-1;
}


/****************************************************************************/

        
/****************************************************************************/

void	vDrawString( unsigned char ucASCIIX, unsigned char ucASCIIY, 
			unsigned char *string, unsigned char ucPixelColor )
{
		unsigned char i,j;
			
	for( i = 0; *string != '\0'; i++ )
	{		
		vDrawASCII( ucASCIIX, ucASCIIY, *string++, ucPixelColor );
		if( ucASCIIX != 39 )
			ucASCIIX++;
		else
		{
			ucASCIIX = 0;
			ucASCIIY++;
		}
	}
}

/****************************************************************************/


void  vDrawLine(unsigned short usX1, unsigned char ucY1, unsigned short usX2, 
		unsigned char ucY2, unsigned char ucPixelColor )
{
	unsigned char *ucpTmpDispMem = ucpMemBaseAddr;
	unsigned short  usMin, usMax;
	int     i;
	
	_CheckAndCorrectPointPosition( &usX1, &ucY1 );
	_CheckAndCorrectPointPosition( &usX2, &ucY2 );

	if( ucY1 == ucY2 )  // horizonal line
	{
		if(usX1 < usX2)
		{
			usMin =usX1;
			usMax =usX2;
		}
		else
		{
			usMin =usX2;
			usMax =usX1;
		}

		for(i=0;i<=(usMax-usMin);i++)
            vAr320240SetPixel( usX1+i, ucY1, ucPixelColor );
	}
	else if(usX1 == usX2)	// vertical line
	{
		if(ucY1 < ucY2)
		{
			usMin = ucY1;
			usMax = ucY2;
		}
		else
		{
			usMin = ucY2;
			usMax = ucY1;
		}
		
		for(i=0;i<=(usMax-usMin);i++)
			vAr320240SetPixel( usX1, ucY1 + i, ucPixelColor);
	}
	    else	// diagonal line ,here use relative accurate algorithem
		    _DrawDiagonalLine( usX1, ucY1 ,usX2, ucY2, ucPixelColor);
}
void	_DrawDiagonalLine( unsigned short usX1, unsigned char ucY1, unsigned short usX2, 
		unsigned char ucY2, unsigned char ucPixelColor )
{
	unsigned short usXInterval, usYInterval;
	unsigned char bX1LessthanX2 = true, bY1LessthanY2 = true, bXIntervalEqualYInterval = false;
	unsigned short i,ushTmpX,uchTmpY,ushCount;
	short  shScale = 0;
	unsigned short *uspTmpDispMem = uspMemBaseAddr ;

	if( usX1 < usX2 )
	{
		usXInterval = usX2 - usX1;
	}
	else
	{
		usXInterval = usX1 - usX2;
		bX1LessthanX2 = false ;
	}
	
	if( ucY1 < ucY2 )
		usYInterval = ucY2 - ucY1 ;
	else
	{
		usYInterval = ucY1 - ucY2 ;
		bY1LessthanY2 = false ;
	}

	if( usXInterval == usYInterval )
		bXIntervalEqualYInterval = true;

	ushCount = usXInterval + usYInterval;

⌨️ 快捷键说明

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