凯发k8官方网
收集整理的这篇文章主要介绍了
显示屏的方向设置问题
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
此文基于stm32f429原子的例程,stm32f429自带ltdc液晶控制器,底层驱动在"ltdc.c"中配置。
1. 在不用emwin显示的情况下,如果想任意设置屏幕的显示方向,则应该更改文件"ltdc.c"中的打点函数,想怎么显示修改代码
lcdltdc.pixsize*(lcdltdc.pwidth*y x)
lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x) y)
lcdltdc.pixsize*(lcdltdc.pwidth*(272-y) (480-x))
lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x-1) y)
//画点函数
//x,y:坐标
//color:颜色值
void ltdc_draw_point(u16 x,u16 y,u32 color)
{
#if lcd_pixformat==lcd_pixformat_argb8888||lcd_pixformat==lcd_pixformat_rgb888if(lcdltdc.dir) //横屏{*(u32*)((u32)ltdc_framebuf[lcdltdc.activelayer]
lcdltdc.pixsize*(lcdltdc.pwidth*y x))=color;}else //竖屏{*(u32*)((u32)ltdc_framebuf[lcdltdc.activelayer]
lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x) y))=color; }
#elseif(lcdltdc.dir) //横屏{*(u16*)((u32)ltdc_framebuf[lcdltdc.activelayer]
lcdltdc.pixsize*(lcdltdc.pwidth*y x))=color;}else //竖屏{*(u16*)((u32)ltdc_framebuf[lcdltdc.activelayer]
lcdltdc.pixsize*(lcdltdc.pwidth*(lcdltdc.pheight-x-1) y))=color; }
#endif
}
2.使用emwin时,应该在emwin的相应的lcd配置文件lcdconf_中修改lcd_x_config()函数,参考emwin5手册中的“显示驱动”一章节中的“通过函数配置显示方向”这一节,大概在800多页。
修改代码
gui_setorientation(gui_swap_xy|gui_mirror_y);
gui_setorientation(gui_mirror_x|gui_mirror_y);
//配置程序,用于创建显示驱动器件,设置颜色转换程序和显示尺寸
void lcd_x_config(void)
{uint32_t i;lcd_ll_init (); //lcd底层驱动(ltdc中断设置和dma2d初始化)
#if (num_buffers>1) //多缓冲for (i=0;i
gui_setorientation(gui_swap_xy|gui_mirror_y); //设置为竖屏}else //横屏{lcd_setsizeex(0,lcddev.width,lcddev.height); //设置可见区尺寸lcd_setvsizeex(0,lcddev.width,lcddev.height*num_vscreens); //设置虚拟显示区尺寸gui_setorientation(gui_mirror_x|gui_mirror_y); //设置为反向//屏幕方向设置}gui_touch_calibrate(gui_coord_x,0,lcddev.width,0,lcddev.width-1); gui_touch_calibrate(gui_coord_y,0,lcddev.height,0,lcddev.height-1);
#if (gui_num_layers>1)//设置第二层gui_device_createandlink(display_driver_1,color_conversion_1,0,1);gui_selectlayer(1); //选中第1层if(lcddev.dir==0)//竖屏{lcd_setsizeex(1,lcddev.height,lcddev.width); //设置可见区尺寸lcd_setvsizeex(1,lcddev.height,lcddev.width*num_vscreens); //设置虚拟显示区尺寸 gui_setorientation(gui_swap_xy|gui_mirror_y); //设置为竖屏}else //横屏{lcd_setsizeex(1,lcddev.width,lcddev.height); //设置可见区尺寸lcd_setvsizeex(1,lcddev.width,lcddev.height*num_vscreens); //设置虚拟显示区尺寸gui_setorientation(gui_mirror_x|gui_mirror_y); //设置为反向//屏幕方向设置}gui_touch_calibrate(gui_coord_x,0,lcddev.width,0,lcddev.width-1); gui_touch_calibrate(gui_coord_y,0,lcddev.height,0,lcddev.height-1);
#endiflayer_prop[0].address=lcd_layer0_frame_buffer; //缓冲区
#if (gui_num_layers>1)layer_prop[1].address=lcd_layer1_frame_buffer;
#endiffor (i=0;i> 3;lcd_setdevfunc(i,lcd_devfunc_copybuffer,(void(*)(void))custom_copybuffer);lcd_setdevfunc(i,lcd_devfunc_copyrect,(void(*)(void))custom_copyrect);if (lcd_ll_getpixelformat(i)<=ltdc_pixel_format_argb4444) {lcd_setdevfunc(i,lcd_devfunc_fillrect,(void(*)(void))custom_fillrect);lcd_setdevfunc(i,lcd_devfunc_drawbmp_8bpp,(void(*)(void))lcd_drawbitmap8bpp);}if(lcd_ll_getpixelformat(i)==ltdc_pixel_format_rgb565) {lcd_setdevfunc(i,lcd_devfunc_drawbmp_16bpp,(void(*)(void))lcd_drawbitmap16bpp); }guicc_m1555i_setcustcolorconv(color2indexbulk_m1555idma2d,index2colorbulk_m1555idma2d); //guicc_m565_setcustcolorconv(color2indexbulk_m565dma2d,index2colorbulk_m565dma2d); guicc_m4444i_setcustcolorconv(color2indexbulk_m4444idma2d,index2colorbulk_m4444idma2d); guicc_m888_setcustcolorconv(color2indexbulk_m888dma2d,index2colorbulk_m888dma2d); guicc_m8888i_setcustcolorconv(color2indexbulk_m8888idma2d,index2colorbulk_m8888idma2d);gui_setfuncalphablending(dma2d_alphablending); gui_setfuncgetppalconvtable(_lcd_getppalconvtable);gui_setfuncmixcolors(dma2d_mixcolors);gui_setfuncmixcolorsbulk(lcd_mixcolorsbulk);}
}
总结
以上是凯发k8官方网为你收集整理的显示屏的方向设置问题的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。