7.1.4 XMC驱动程序

/* the address of write data & command (xmc_a0) */

#define XMC_LCD_COMMAND 0x60000000

#define XMC_LCD_DATA (0x60000000|(1<<18)+1)

/**

* @brief this function is write command to lcd.

* @param command : the command to write

* @retval none

*/

void lcd_wr_command(uint8_t command)

{

*(__IO uint8_t *) XMC_LCD_COMMAND = command;

}

/**

* @brief this function is write data to lcd.

* @param data : the data to write.

* @retval none

*/

void lcd_wr_data(uint8_t data)

{

*(__IO uint8_t *) XMC_LCD_DATA = data;

}

/**

* @brief configures the lcd.

* this function must be called before any write/read operation

* on the lcd.

* @param none

* @retval none

*/

void lcd_xmc_init(void)

{

/* init xmc */

xmc_init(); //xmc初始化

/* reset lcd */

LCD_RESET_HIGH; //复位引脚拉高

delay_ms(200);

LCD_RESET_LOW; //复位引脚拉低

delay_ms(200);

LCD_RESET_HIGH;

delay_ms(800);

 

lcd_wr_command( 0x11); //退出睡眠

 

delay_ms(120); //Delay 120ms

 

lcd_wr_command( 0x36); //行列扫描顺序及RGB/BGR,横放/竖放控制

lcd_wr_data(0x00);

 

lcd_wr_command(0x3A); //定义RGB图像数据格式

lcd_wr_data( 0x55);

 

lcd_wr_command( 0xB2); //Porch Setting

lcd_wr_data(0x1F);

lcd_wr_data(0x1F);

lcd_wr_data(0x00);

lcd_wr_data( 0x33);

lcd_wr_data( 0x33);

 

lcd_wr_command( 0xB7); //Gate Control

lcd_wr_data(0x73);

 

lcd_wr_command( 0xBB); //VCOM Setting

lcd_wr_data( 0x1E);

 

lcd_wr_command(0xC0); //LCM Control

lcd_wr_data( 0x2C);

 

lcd_wr_command(0xC2); //VDV and VRH Command Enable

lcd_wr_data( 0x01);

 

lcd_wr_command(0xC3); //VRH Set

lcd_wr_data(0x13);

 

lcd_wr_command(0xC4); //VDV Set

lcd_wr_data(0x20);

 

lcd_wr_command( 0xC6);//Frame Rate Control in Normal Mode

lcd_wr_data( 0x0F);

 

lcd_wr_command( 0xD0); //Power Control

lcd_wr_data( 0xA4);

lcd_wr_data(0xA1);

 

lcd_wr_command(0xE0); //Positive Voltage Gamma Control

lcd_wr_data(0xF0);

lcd_wr_data(0x0C);

lcd_wr_data(0x15);

lcd_wr_data(0x09);

lcd_wr_data(0x09);

 

lcd_wr_data(0x07);

lcd_wr_data(0x3B);

lcd_wr_data(0x44);

lcd_wr_data(0x50);

lcd_wr_data(0x36);

lcd_wr_data(0x11);

lcd_wr_data(0x10);

lcd_wr_data(0x2F);

lcd_wr_data(0x35);

 

lcd_wr_command(0xE1); //Negative Voltage Gamma Control

lcd_wr_data(0xF0);

lcd_wr_data(0x17);

lcd_wr_data(0x1A);

lcd_wr_data(0x0C);

lcd_wr_data(0x0B);

lcd_wr_data(0x25);

lcd_wr_data(0x3A);

lcd_wr_data(0x43);

lcd_wr_data(0x4F);

lcd_wr_data(0x19);

lcd_wr_data(0x15);

lcd_wr_data(0x16);

lcd_wr_data(0x30);

lcd_wr_data(0x37);

 

lcd_wr_command( 0xe9); //Equalize time control

lcd_wr_data(0x07);

lcd_wr_data(0x07);

lcd_wr_data(0x03);

lcd_wr_command(0xE7); //SPI2 Enable

lcd_wr_data(0x10);

lcd_wr_command(0x21); //Display Inversion On颜色翻转

 

lcd_wr_command(0x29); //Display on开启显示

 

lcd_clear(WHITE); //清屏为白色

LCD_BL_LOW; //点亮背光

}

/**

* @brief 设置刷屏范围

* @param xstart : x起始坐标值

* @param ystart : y起始坐标值

* @param xend : x结束坐标值

* @param yend : y结束坐标值

* @retval 无

*/

void lcd_setblock(uint16_t xs, uint16_t ys, uint16_t xe, uint16_t ye)

{

/* 设置行范围 */

lcd_wr_command(0x2a); //设置行范围命令

lcd_wr_data(xs >> 8); //发送x起始坐标

lcd_wr_data(xs);

lcd_wr_data(xe >> 8); //发送x结束坐标

lcd_wr_data(xe);

 

/*设置列范围 */

lcd_wr_command(0x2b); //设置列范围命令

lcd_wr_data(ys >> 8); //发送y起始坐标

lcd_wr_data(ys);

lcd_wr_data(ye >> 8); //发送y起始坐标

lcd_wr_data(ye);

 

lcd_wr_command(0x2c); //写寄存器

}

 

/**

* @brief 画点函数

* @param x :需要画点的x坐标值

* @param y :需要画点的y坐标值

* @param color :颜色值

* @retval none

*/

void lcd_drawpoint(uint16_t x, uint16_t y, uint16_t color)

{

lcd_setblock(x, y, x, y); //设置刷屏区域

 

lcd_wr_data(color >> 8); //写颜色值

lcd_wr_data(color);

}

 

/**

* @brief 清屏函数.

* @param color : 清屏颜色值.

* @retval 无

*/

void lcd_clear(uint16_t color)

{

uint32_t i;

 

lcd_setblock(0, 0, 240, 320); //设置全屏区域

 

for(i = 0; i < 240*320; i++)//发送240x320颜色值

{

lcd_wr_data(color >> 8); //写颜色值

lcd_wr_data(color);

}

}

/**

* @brief this function is display image on the lcd.

* @param address:图片存在flash起始地址

* @param x:图片显示x轴起始坐标

* @param y:图片显示y轴起始坐标

* @param w:图片宽度

* @param h:图片高度

* @retval none

*/

void lcd_display_image(uint32_t address,uint16_t x,uint16_t y,uint16_t w,uint16_t h)

{

uint8_t *dz_buff = buffer_write;

uint32_t len = w * h << 1,i = 0;

lcd_setblock(x,y,w-1,h-1);//设置区域

spiflash_read(dz_buff,address,len);//从flash读图片数据

for(i=0; i<len; i++)

{

lcd_wr_data(dz_buff[i]); //发送图片数据给屏幕

}

}

//24x24 '啊'字

const u8 ch[72] ={

0x00,0x00,0x00,0x00,0x88,0x00,0x00,0xFC,0x06,0x44,0xCB,0xFF,

0x7E,0xC8,0x0C,0x64,0xC8,0x0C,0x64,0xC8,0x0C,0x64,0xD2,0x4C,

0x64,0xD3,0xEC,0x64,0xE2,0x4C,0x64,0xD2,0x4C,0x64,0xD2,0x4C,

0x64,0xCA,0x4C,0x64,0xCA,0x4C,0x7C,0xCB,0xCC,0x64,0xCA,0x4C,

0x64,0xFA,0x0C,0x40,0xD0,0x0C,0x00,0xC0,0x0C,0x00,0xC0,0x0C,

0x00,0xC0,0x0C,0x00,0xC0,0x7C,0x00,0xC0,0x18,0x00,0x80,0x10,

};

 

/**

* @brief this function is display ch on the lcd.

* @param x:汉字显示x轴起始坐标

* @param y:汉字显示y轴起始坐标

* @param w:汉字宽度

* @param h:汉字高度

* @retval none

*/

void show_ch(u16 x,u16 y,u16 w,u16 h)

{

unsigned int i,j,k,n;

unsigned char temp;

n = 0;

lcd_setblock(x, y,x+w-1,y+h-1);//设置区域

for( j = 0;j < ((w+7)>> 3);j++)//列数

{

for( i = 0;i < h; i++)//行数

{

temp = ch[n++];

for(k = 0;k < 8;k++)

{

if(((temp << k)& 0x80) == 0 ){

/* 显示一个像素点 */

lcd_wr_data(0xff);

Lcd_wr_data(0xff);

}else{

/* 显示一个像素点 */

lcd_wr_data(0x0);

lcd_wr_data(0x0);

}

}

}

}

}

下一页
上一页
    • 联系电话

    • 0755—83453881
    • 服务时间

    • 周一至周五 9:00-18:00
    • 高通GT-HMI交流群