欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程资源 > 编程问答 >内容正文

编程问答

显示屏的方向设置问题 -ag凯发k8国际

发布时间:2024/10/14 编程问答 35 豆豆
ag凯发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);} }

总结

以上是ag凯发k8国际为你收集整理的显示屏的方向设置问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图