微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 第五篇?阿波罗的RGB屏幕显示图片还是会挺清晰的

第五篇?阿波罗的RGB屏幕显示图片还是会挺清晰的

时间:10-02 整理:3721RD 点击:
在了解了正点原子的屏幕代码之后,我发现为了驱动某一特定的屏幕(RGB或者MCU屏),官方的代吗有很多冗余的地方,于是我就把需要的函数提取出来移植到了IAR的IDE下。完整的代码在github上。
https://github.com/iysheng/apollo
具体的正点原子的代码,我就不在这里班门弄斧的分析了,主要说一些官方代码里面没有的部分。我发现官方代码里面有直接显示ascii码的函数。但是没有直接显示图片的函数,于是我就添加了这么一个函数。主要代码如下:

  1. /*
  2. *added by iysheng@163.com
  3. *posx,posy:图像的起始点坐标
  4. *uint8_t* 图像数组收地址
  5. */
  6. void APPOLO_RGB(uint16_t posx,uint16_t posy,uint8_t *pic)
  7. {
  8. uint32_t width,high,piex,uitemp[2];
  9. if(pic[0]&0x01)
  10. {
  11.    width=(pic[2]<<8)|pic[3];
  12.    high=(pic[4]<<8)|pic[5];
  13.    for(uitemp[0]=0;uitemp[0]<width;uitemp[0]++)
  14.     {
  15.       for(uitemp[1]=0;uitemp[1]<high*2;)
  16.       {
  17.       piex=((pic[(high<<1)*uitemp[0]+uitemp[1]])<<8)|(pic[(high<<1)*uitemp[0]+uitemp[1]+1]);
  18.       LTDC_Draw_Point(uitemp[0]+posx,posy+uitemp[1]/2,(uint32_t)(piex));
  19.       uitemp[1]+=2;
  20.       }
  21.     }
  22. }
  23. }

复制代码

上面的代码(默认横屏显示),可以起到自动判断图像大小(800*480之内,因为屏幕的分辨率限制着呢)。还有很多可以优化的地方:比如说自动判断横竖屏显示等等,我就简单的希望可以起到抛砖引玉的作用吧。
为了正常显示图片,我们需要这样设置:


然后, 我们就可以显示这样图片了,调用方法如下:

  1. APPOLO_RGB(0,0,gImage_xiong);

复制代码

其中gImage_xiong定义如下:


通过Img2Lcd 软件导出来的。
看下显示效果吧:


特意和我的笔记本作了一个对比,借助了@3guoyangyang7的创意,在此表示感谢。
再上传一张图片和字符串一起显示的图片:


完整的代码在github上https://github.com/iysheng/apollo,欢迎大家fork。


忘记说了,要想驱动屏幕,官方的代码中使用了DMA2D。所以我们需要先驱动SDRAM,因为中间使用到了地址空间0xc0000000。该地址空间位于外部RAM空间。

赞一个哦,学习分享

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top