野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15689|回复: 2

截图程序

[复制链接]
发表于 2015-4-27 21:28:43 | 显示全部楼层 |阅读模式
大神帮我分析一下这段代码
ISO中图片截图程序中从液晶屏中获取像素信息的程序
uint16_t LCD_RD_data()
{
        uint16_t R,G,B;
       
        R=(*(__IO u16 *)(Bank1_LCD_D));
        R=(*(__IO u16 *)(Bank1_LCD_D));
        B=(*(__IO u16 *)(Bank1_LCD_D));       
        G=(*(__IO u16 *)(Bank1_LCD_D));

       
        return (((R>>11)<<11) | ((G>>10)<<5) | (B>>11));
}
初学者看不懂,另想问一下怎样调试这种程序

回复

使用道具 举报

发表于 2015-4-27 23:07:29 | 显示全部楼层
首先,明确这个函数是读取液晶每个像素点的颜色值,也就是RGB,返回是个uint16_t,也就16bit,所以返回值实际意义是RGB565(如果这个不懂,显示图片例程有说明)
  R=(*(__IO u16 *)(Bank1_LCD_D));       //第一次读取无效,这个是液晶控制器ili9341本身决定的,就是硬件要求就是这样
  R=(*(__IO u16 *)(Bank1_LCD_D));       //要读取一个点的颜色(RGB),需要分三次读,即R,B,G(这也是有ili9341控制器决定的)
  B=(*(__IO u16 *)(Bank1_LCD_D));       // 每次读的值是uint16_t类型,我们定义的R,G,B变量也是这个类型(为更直观,楼主可把这几个值通过串口打印出来看看)
  G=(*(__IO u16 *)(Bank1_LCD_D));       //我们只是需要这个像素点的RGB565,所以用后面一条语句做处理
  return (((R>>11)<<11) | ((G>>10)<<5) | (B>>11));     //先看小括号:R>>11是取R的最高5位 ;  G>>10是取G的最高6位;  B>>11是取B的最高5位
                                                                                    //然后在用右移位符:<<实现数值拼接:最后效果是:  RRRRRGGGGGGBBBBB
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-28 22:33:18 | 显示全部楼层
谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-6 19:11 , Processed in 0.027259 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表