📄 drv_320240.c
字号:
ushTmpX = usX1;
uchTmpY = ucY1;
if( bX1LessthanX2 && bY1LessthanY2 )
{
if( bXIntervalEqualYInterval )
for( i = 0; i <= ucY2 - ucY1; i++ )
vAr320240SetPixel( usX1 + i, ucY1 + i, ucPixelColor );
else
{
vAr320240SetPixel( usX1, ucY1, ucPixelColor);
for( i = 0; i < ushCount; i++ )
{
if( shScale >= 0 )
{
ushTmpX++;
shScale -= usYInterval;
}
else
{
uchTmpY++;
shScale += usXInterval;
}
vAr320240SetPixel( ushTmpX, uchTmpY, ucPixelColor );
}
}
return ;
}
if( bX1LessthanX2 && !bY1LessthanY2 )
{
if( bXIntervalEqualYInterval )
for( i = 0; i <= usX2 - usX1; i++ )
vAr320240SetPixel( usX1 + i, ucY1 - i, ucPixelColor );
else
{
vAr320240SetPixel( usX1, ucY1, ucPixelColor);
for( i = 0; i < ushCount; i++ )
{
if( shScale >= 0 )
{
ushTmpX++;
shScale -= usYInterval;
}
else
{
uchTmpY--;
shScale += usXInterval;
}
vAr320240SetPixel( ushTmpX, uchTmpY, ucPixelColor );
}
}
return ;
}
if( !bX1LessthanX2 && bY1LessthanY2 )
{
if( bXIntervalEqualYInterval )
for( i = 0; i <= usX1 - usX2; i++ )
vAr320240SetPixel( usX1 - i, ucY1 + i, ucPixelColor );
else
{
vAr320240SetPixel( usX1, ucY1, ucPixelColor );
for( i = 0; i < ushCount; i++ )
{
if( shScale >= 0 )
{
ushTmpX--;
shScale -= usYInterval;
}
else
{
uchTmpY++;
shScale += usXInterval;
}
vAr320240SetPixel( ushTmpX, uchTmpY, ucPixelColor );
}
}
return ;
}
if( !bX1LessthanX2 && !bY1LessthanY2 )
{
if( bXIntervalEqualYInterval )
for( i = 0; i <= usX1-usX2; i++ )
vAr320240SetPixel( usX1 - i, ucY1 - i, ucPixelColor );
else
{
vAr320240SetPixel( usX1, ucY1, ucPixelColor );
for( i = 0; i < ushCount; i++ )
{
if( shScale >= 0 )
{
ushTmpX--;
shScale -= usYInterval;
}
else
{
uchTmpY--;
shScale += usXInterval;
}
vAr320240SetPixel( ushTmpX, uchTmpY, ucPixelColor );
}
}
}
}
/*****************************************************************************/
void vDrawRect(unsigned short usX1,unsigned char ucY1,unsigned short usX2,unsigned char ucY2,unsigned char ucpixelColor)
{
unsigned short temp;
if (usX1>usX2)
{
temp=usX1;
usX1=usX2;
usX2=temp;
}
if (ucY1>ucY2)
{
temp=(unsigned short)ucY1;
ucY1=ucY2;
ucY2=(unsigned char)temp;
}
vDrawLine(usX1,ucY1,usX2,ucY1,ucpixelColor);
vDrawLine(usX1,ucY2,usX2,ucY2,ucpixelColor);
vDrawLine(usX1,ucY1,usX1,ucY2,ucpixelColor);
vDrawLine(usX2,ucY1,usX2,ucY2,ucpixelColor);
}
/*******************************************************************************/
void vFillRect(unsigned short usX1,unsigned char ucY1,unsigned short usX2,unsigned char ucY2,unsigned char ucpixelColor)
{
unsigned short temp;
unsigned char i;
if (usX1>usX2)
{
temp=usX1;
usX1=usX2;
usX2=temp;
}
if (ucY1>ucY2)
{
temp=(unsigned short)ucY1;
ucY1=ucY2;
ucY2=(unsigned char)temp;
}
for(i=ucY1;i<=ucY2;i++)
vDrawLine(usX1,i,usX2,i,ucpixelColor);
}
/*******************************************************************************/
void vDrawCircle(unsigned short usX, unsigned short ucY,unsigned char radius,unsigned char ucpixelColor)
{
short x,y,d;
x=usX;
y=ucY+radius;
d=3-2*radius;
do{
vAr320240SetPixel (x, y,ucpixelColor);
if((ucY-(y-ucY))>=0)
vAr320240SetPixel (x, (unsigned short)(ucY-(y-ucY)),ucpixelColor);
if((usX-(x-usX))>=0)
vAr320240SetPixel (( unsigned short)((usX-(x-usX))), y,ucpixelColor);
if((((usX-(x-usX))>=0) && ((ucY-(y-ucY))>=0))==1)
vAr320240SetPixel (( unsigned short)((usX-(x-usX))), (unsigned short)(ucY-(y-ucY)),ucpixelColor);
if((((usX+(y-ucY))>=0) && ((ucY+(x-usX))>=0))==1)
vAr320240SetPixel ((unsigned short)(usX+(y-ucY)), (unsigned short)(ucY+(x-usX)),ucpixelColor);
if((((usX+(y-ucY))>=0) && ((ucY-(x-usX))>=0))==1)
vAr320240SetPixel ((unsigned short)(usX+(y-ucY)), (unsigned short)(ucY-(x-usX)),ucpixelColor);
if((((usX-(y-ucY))>=0) && ((ucY+(x-usX))>=0))==1)
vAr320240SetPixel ((unsigned short)(usX-(y-ucY)), (unsigned short)(ucY+(x-usX)),ucpixelColor);
if((((usX-(y-ucY))>=0) && ((ucY-(x-usX))>=0))==1)
vAr320240SetPixel ((unsigned short)(usX-(y-ucY)), (unsigned short)(ucY-(x-usX)),ucpixelColor);
if (d<0) {
d = d+((x-usX)<<2)+6;
} else {
d = d+(((x-usX)-(y-ucY))<<2)+10;
y--;
}
x++;
} while((x-usX)<=(y-ucY));
}
/******************************************************************************/
void vFillCircle(unsigned short usX, unsigned short ucY,unsigned char radius,unsigned char ucpixelColor)
{
short x,y,d;
x=usX;
y=ucY+radius;
d=3-2*radius;
do{
// if( ((x>=0) && ((ucY-(y-ucY))>=0) && (y>=0))=1)
vDrawLine (x, (unsigned short)(ucY-(y-ucY)), x, y,ucpixelColor);
// if(
vDrawLine ((unsigned short)(usX-(x-usX)), (unsigned short)(ucY-(y-ucY)), (unsigned short)(usX-(x-usX)), y,ucpixelColor);
vDrawLine ((unsigned short)(usX-(y-ucY)), (unsigned short)(ucY-(x-usX)), (unsigned short)(usX+(y-ucY)), (unsigned short)(ucY-(x-usX)),ucpixelColor);
vDrawLine ((unsigned short)(usX-(y-ucY)), (unsigned short)(ucY+(x-usX)), (unsigned short)(usX+(y-ucY)), (unsigned short)(ucY+(x-usX)),ucpixelColor);
if (d<0)
{
d = d+((x-usX)<<2)+6;
} else
{
d = d+(((x-usX)-(y-ucY))<<2)+10;
y--;
}
x++;
} while((x-usX)<=(y-ucY));
}
/******************************************************************************/
void Ar320240Demo(void)
{
//unsigned char i;
// unsigned char i=0;
// unsigned short j=0;
while(1)
{
vAr320240Clr();
vFillCircle(159,119,56,67);
vDrawRect(23,30,46,50,1);
vFillRect(34,40,230,120,234);
vAr320240SetPixel(1,1,1);
vDrawLine(0,0,319,239,1);
// color();
vAr320240Clr();
_Test_DrawVerticalStripe();
// vDelay();
// vDelay();
_Test_DrawHorizontalStripe();
// vDelay();
// vDelay();
//vSwivelView(90);
vDrawASC(1,1,'A',34);
vDrawASCII(1,1,'A',34);
//vSwivelView(180);
// vAr320240Clr();
// vDelay();
vDrawASCString(0,7,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-=,./;'[]`~!@#$%^&*()_+|:{}?><",67);
// vSingleColor(i);
// }
// vAr320240Clr();
// vPutImage( LJX,320, 240 );
/*
vEnableSubWindow();
vVideoInvert();
vDisableSubWindow();
*/
}
}
void vSwivelView( unsigned short usAngle )
{
switch( usAngle )
{
case 90:
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SPECIAL_EFFECTS ) &= ( unsigned char )0x0FC;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SPECIAL_EFFECTS ) |= ( unsigned char )0x01;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR0 ) = ( unsigned char )0x3b;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR1 ) = ( unsigned char )0x00;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR2 ) = ( unsigned char )0x00;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_ADDR_OFFSET0 ) = ( unsigned char )0x3c;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_ADDR_OFFSET1 ) = ( unsigned char )0x00;
break;
case 180:
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SPECIAL_EFFECTS ) &= ( unsigned char )0x0FC;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SPECIAL_EFFECTS ) |= ( unsigned char )0x02;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR0 ) = ( unsigned char )0xff;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR1 ) = ( unsigned char )0x4a;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR2 ) = ( unsigned char )0x00;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_ADDR_OFFSET0 ) = ( unsigned char )0x50;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_ADDR_OFFSET1 ) = ( unsigned char )0x00;
break;
case 270:
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SPECIAL_EFFECTS ) &= ( unsigned char )0x0FC;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SPECIAL_EFFECTS ) |= ( unsigned char )0x03;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR0 ) = ( unsigned char )0xc4;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR1 ) = ( unsigned char )0x4a;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR2 ) = ( unsigned char )0x00;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_ADDR_OFFSET0 ) = ( unsigned char )0x3c;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_ADDR_OFFSET1 ) = ( unsigned char )0x00;
break;
default:
break;
}
}
/********************************************************************************************************/
void vDisableSubWindow( void )
{
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR0 ) = ( unsigned char )0x7F;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR1 ) = ( unsigned char )0x25;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR2 ) = ( unsigned char )0x00;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_ADDR_OFFSET0 ) = ( unsigned char )0x28;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_ADDR_OFFSET1 ) = ( unsigned char )0x00;
}
void vEnableSubWindow( void )
{
// enable sub-window
//*( volatile unsigned char * )( REGISTER_OFFSET + REG_SPECIAL_EFFECTS ) |= ( unsigned char )0x10;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR0 ) = ( unsigned char )0x6f;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR1 ) = ( unsigned char )0x3f;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_DISP_START_ADDR2 ) = ( unsigned char )0x00;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_ADDR_OFFSET0 ) = ( unsigned char )0x4B;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_MAIN_WIN_ADDR_OFFSET1 ) = ( unsigned char )0x00;
// Sub-window display start address
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_DISP_START_ADDR0 ) = 0x7f;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_DISP_START_ADDR1 ) = 0x25;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_DISP_START_ADDR2 ) = 0x00;
// Sub-window Line address offset
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_ADDR_OFFSET0 ) = 0x28;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_ADDR_OFFSET1 ) = 0x00;
// Sub-window X start position
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_X_START_POS0 ) = 40;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_X_START_POS1 ) = 0x00;
// Sub-window Y start position
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_Y_START_POS0 ) = 240;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_Y_START_POS1 ) = 0x00;
// Sub-window X end position
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_X_END_POS0 ) = 0x00;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_X_END_POS1 ) = 0x00;
// Sub-window Y end position
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_Y_END_POS0 ) = 0x00;
*( volatile unsigned char * )( REGISTER_OFFSET + REG_SUB_WIN_Y_END_POS1 ) = 0x00;
}
/**********************************************************************************************/
/***********************************************************************************************
* vVideoInvert
* Type : void
* Ret val : none
* Argument : none
* Function : Invert the LCD
***********************************************************************************************/
void vVideoInvert( void )
{
*( volatile unsigned char * )( REGISTER_OFFSET + REG_DISPLAY_MODE ) |= ( unsigned char )0x10;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -