void RXLCD_DrawLine(unsigned short XS,unsigned short YS,unsigned short XE ,unsigned short YE,unsigned short color) { Draw_Line(XS,XE,YS,YE);//画矩形 Text_Foreground_Color1(color);//颜色设定 Write_Dir(0X90,0X30);//设定参数 Write_Dir(0X90,0XB0);//开始画 }
//-------------------------------------------------- // Description : LCD backlight control // Input Value : None // Output Value : None //-------------------------------------------------- void CPowerPanelControl(void) { if(g_uiPowerStatus == 1) { if(g_uiBacklightOffCounter == 0x0) { if(g_uiPanelStatus == 1)//((GPIO4->FIOPIN & (1UL<< 28)) == (1UL<< 28)) { g_uiPanelStatus = 0; #if(_PANEL_TYPE == _PANEL_EMBEST) GPIO4->FIOCLR = (1UL<< 28); /* Turn backlight off */ #elif(_PANEL_TYPE == _PANEL_RX) Write_Dir(0x01,0x00); Write_Dir(0x8b,0x00); #endif } } else { if(g_uiPanelStatus == 0)//((GPIO4->FIOPIN & (1UL<< 28)) == 0x00) { g_uiPanelStatus = 1; #if(_PANEL_TYPE == _PANEL_EMBEST) GPIO4->FIOSET = (1UL<< 28); /* Turn backlight on */ #elif(_PANEL_TYPE == _PANEL_RX) Write_Dir(0x01,0x80); Write_Dir(0x8b,0x05); #endif } } } }
//-------------------------------------------------- // Description : Execute power up/down process // Input Value : None // Output Value : None //-------------------------------------------------- void CPowerControl(void) { if(g_uiPowerStatus == 1)//power down process { g_uiPowerStatus = 0; g_uiSystemState = _PWOFF_STATE; #if(_PANEL_TYPE == _PANEL_EMBEST) GPIO4->FIOCLR = (1UL<< 28); /* Turn backlight off */ GLCD_clear(Black); #elif(_PANEL_TYPE == _PANEL_RX) //Write_Dir(0x01,0x00); //Write_Dir(0x8b,0x00); // RXLCD_clear(0x00); #endif // SC->PCONP = PCONP_STANDBY_Val; /* Power Control for Peripherals */ GPIO0->FIOCLR |= (1ul<<8); Write_Dir(0X01,0X00); } else//power up process { g_uiPowerStatus = 1; g_uiSystemState = _INITIAL_STATE; GPIO4->FIOSET = (1UL<< 28); /* Turn backlight on */ CDeviceInit(); } return; }
void CutPictrue(uchar picnum,uint x1,uint y1,uint x2,uint y2,unsigned long x,unsigned long y) {unsigned long cutaddress;uchar picnumtemp; Write_Dir(0X06,0X00);//FLASH frequency setting Write_Dir(0X05,0Xac);//FLASH setting picnumtemp=picnum; Write_Dir(0XBF,0X02);//FLASH setting Active_Window(x1,x2,y1,y2); MemoryWrite_Position(x1,y1);//Memory write position cutaddress=(picnumtemp-1)*261120+y*960+x*2; DMA_Start_address_setting(cutaddress); DMA_block_mode_size_setting(x2-x1+1,y2-y1+1,480); Write_Dir(0XBF,0X03);//FLASH setting Chk_DMA_Busy(); }
void RXLCD_clear (unsigned char Color) { Active_Window(0,479,0,271);//设置区域显示窗口 Text_Foreground_Color1(0xffff);//前景颜色设定 Text_Background_Color1(0xffff);//背景颜色设定 Write_Dir(0X8E,0X80);//开始清屏(显示窗口) Delay10ms(5); }
//****************剪切图片 //剪切第picnum幅的图片,放在x1,y1,x2,y2在屏幕显示的区域坐标,x,y为要剪切图片的左上角坐标 void CutPicture(unsigned char picnum,unsigned short x1,unsigned short y1,unsigned short x2,unsigned short y2,unsigned short x,unsigned short y) { unsigned long cutaddress, picnumtemp; Write_Dir(0X06,0X00);//FLASH频率设定 if(picnum<61) { Write_Dir(0X05,0X06);//FLASH设置 ac cs1,2c cs0 Write_Dir(0Xc7,0X01); picnumtemp=picnum; } if(picnum>60&picnum<121) { Write_Dir(0X05,0X86); //ac Write_Dir(0Xc7,0X00); picnumtemp=picnum-60; } Write_Dir(0XBF,0X02);//FLASH设置 Active_Window(x1,x2,y1,y2); MemoryWrite_Position(x1,y1);//内存写入位置 cutaddress=(picnumtemp-1)*262144+y*960+x*2; DMA_Start_address_setting(cutaddress); DMA_block_mode_size_setting(x2-x1+1,y2-y1+1,480); Write_Dir(0XBF,0X03);//FLASH设置 Chk_DMA_Busy(); }
//****************显示flash图片(VS32240M35一个FLASH可以存储107幅图片,可以增加一个FLASH,即214幅图片) void displaypicture(unsigned char picnum) { unsigned int picnumtemp; Write_Dir(0X06,0X00);//FLASH频率设定 if(picnum<61) { Write_Dir(0X05,0X07);//FLASH设置 ac cs1,2c cs0 Write_Dir(0Xc7,0X01); picnumtemp=picnum; } if(picnum>60&picnum<121) { Write_Dir(0X05,0X87); //ac Write_Dir(0Xc7,0X00); picnumtemp=picnum-60; } Write_Dir(0XBF,0X02);//FLASH设置 Active_Window(0,479,0,271); //Write_Dir(0x41,(1-g_u8LcdLayer)); MemoryWrite_Position(0,0);//内存写入位置 DMA_Start_address_setting(262144*(picnumtemp-1)); DMA_block_mode_size_setting(480,272,480); Write_Dir(0XBF,0X03);//FLASH设置 Chk_DMA_Busy(); }
//****************输入字符 void String(unsigned char *str) { Write_Dir(0x40,0x80);//设置字符模式 Write_Command(0x02); while(*str != '\0') { Write_Data(*str); ++str; Chk_Busy(); } }
//////////////writing text void String(uchar *str) { Write_Dir(0x40,0x80);//Set the character mode LCD_CmdWrite(0x02); while(*str != '\0') { LCD_DataWrite(*str); ++str; Chk_Busy(); } }
void DisplayImageDirectWrite(const uint8_t* array,uint length, uint startx , uint starty, uint width, uint height) { int i; Write_Dir(0x40,0x00); Active_Window(startx,startx + width-1,starty,starty+height-1);//Set the work window size MemoryWrite_Position(0,0);//Memory write position LCD_CmdWrite(0x02);//start data write //112X140 dot for(i=0;i<length;i++) { LCD_DataWrite(array[i]); Chk_Busy(); } }
void WriteString1(unsigned char *Str,u16 x, u16 y, u16 Color, u8 Size, u8 transperent ) { Size = Size<<6; Write_Dir(0x21,0x20);//?????? Write_Dir(0x06,0x03);//??FLASH?? Write_Dir(0x2F,0x81);//????IC Write_Dir(0x05,0xA8);//????IC Write_Dir(0x22,0x80|(transperent<<6));//????IC Write_Dir(0x2E,Size);//??????16x16/??1 Text_Foreground_Color1(Color);//?????? FontWrite_Position(x,y);//?????? String(Str); Write_Dir(0x21,0x00);//????? Write_Dir(0x2F,0x00);//????? }
void WriteString(unsigned char *Str,u16 x, u16 y, u16 Color, u8 Size, u8 transperent ) { RXLCD_EditCurrent(); Active_Window(0,479,0,271); Size = Size<<6; Write_Dir(0x21,0x20);//?????? Write_Dir(0x06,0x03);//??FLASH?? Write_Dir(0x2F,0x81);//????IC Write_Dir(0x05,0xA8);//????IC Write_Dir(0x22,0x80|(transperent<<6));//????IC Write_Dir(0x2E,Size);//??????16x16/??1 Text_Foreground_Color1(Color);//?????? FontWrite_Position(x,y);//?????? String(Str); Write_Dir(0x21,0x00);//????? Write_Dir(0x2F,0x00);//????? }
void RXLCD_EditCurrent(void) { Write_Dir(0x41,g_u8LcdLayer); }
void RXLCD_EditNext(void) { Write_Dir(0x41,(1-g_u8LcdLayer)); }
//-----模块初始化代码----------建议客户直接移植---------------------------// void RXLCD_init(void) { Reset(); Delay10ms(5); RA8870_PLL_ini(); Write_Command(0x10); //SYSR bit[4:3]=00 256 color bit[2:1]= 00 8bit MPU interface Write_Data(0x0f); // 1x 64k color 1x 16bit Write_Command(0x04); //PCLK Write_Data(0x03); // Delay10ms(1); //Horizontal set Write_Command(0x14); //HDWR//Horizontal Display Width Setting Bit[6:0] Write_Data(0x3b); //Horizontal display width(pixels) = (HDWR + 1)*8 0x27 Write_Command(0x15); //HNDFCR//Horizontal Non-Display Period fine tune Bit[3:0] Write_Data(0x02); //(HNDR + 1)*8 +HNDFCR Write_Command(0x16); //HNDR//Horizontal Non-Display Period Bit[4:0] Write_Data(0x03); //Horizontal Non-Display Period (pixels) = (HNDR + 1)*8 Write_Command(0x17); //HSTR//HSYNC Start Position[4:0] Write_Data(0x01); //HSYNC Start Position(PCLK) = (HSTR + 1)*8 Write_Command(0x18); //HPWR//HSYNC Polarity ,The period width of HSYNC. Write_Data(0x03); //HSYNC Width [4:0] HSYNC Pulse width(PCLK) = (HPWR + 1)*8 //Vertical set Write_Command(0x19); //VDHR0 //Vertical Display Height Bit [7:0] Write_Data(0x0f); //Vertical pixels = VDHR + 1 0xef Write_Command(0x1a); //VDHR1 //Vertical Display Height Bit [8] Write_Data(0x01); //Vertical pixels = VDHR + 1 0x00 Write_Command(0x1b); //VNDR0 //Vertical Non-Display Period Bit [7:0] Write_Data(0x0f); //Vertical Non-Display area = (VNDR + 1) Write_Command(0x1c); //VNDR1 //Vertical Non-Display Period Bit [8] Write_Data(0x00); //Vertical Non-Display area = (VNDR + 1) Write_Command(0x1d); //VSTR0 //VSYNC Start Position[7:0] Write_Data(0x0e); //VSYNC Start Position(PCLK) = (VSTR + 1) Write_Command(0x1e); //VSTR1 //VSYNC Start Position[8] Write_Data(0x06); //VSYNC Start Position(PCLK) = (VSTR + 1) Write_Command(0x1f); //VPWR //VSYNC Polarity ,VSYNC Pulse Width[6:0] Write_Data(0x01); //VSYNC Pulse Width(PCLK) = (VPWR + 1) Write_Command(0x20); Write_Data(0x80); Write_Dir(0x52,0xc1);//设置为缓冲卷动模式 Write_Dir(0x40,0x80);//设置为文字模式 Write_Dir(0x41,0x01); Layer1_Visible(); Write_Dir(0xf0,0x04);//开启中断 Write_Dir(0x71,0x04);//设置为4线触摸屏 Write_Dir(0x70,0xB2);//开启触摸功能,设置触摸参数 Write_Dir(0xf1,0x04);//clear INT state 確保上次觸碰後 TP_interrupt 清除 Write_Command(0x8c);//PWM控制设置 Write_Data(0x80);//开启PWM Write_Command(0x8c);//PWM控制设置 Write_Data(0x81);//开启PWM Write_Command(0x8d);//背光亮度 Write_Data(0x80);//亮度参数0xff-0x00 Active_Window(0,479,0,271);//设置区域显示窗口 Text_Foreground_Color1(0x0000);//前景颜色设定 Text_Background_Color1(0xffff);//背景颜色设定 Write_Dir(0X8E,0X80);//开始清屏(显示窗口) Delay10ms(1); Write_Dir(0X01,0X80);//开启显示 }