📄 drv_320240.c
字号:
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 + -