OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7233|回复: 12

求STM32F4LCD上如何读取屏幕上的RGB的值

[复制链接]

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2016-4-15
在线时间
15 小时
发表于 2016-6-25 19:03:09 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-25 19:08:16 | 显示全部楼层
本帖最后由 phoenix 于 2016-6-25 19:09 编辑

你的开发板是 探索者?LCD的驱动芯片是?
取屏幕上的RGB的值  就是LCD 的读点操作
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2016-4-15
在线时间
15 小时
 楼主| 发表于 2016-6-25 19:15:02 | 显示全部楼层
STM32F4探索者,4.3寸LCD,ILI9341。
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2016-4-15
在线时间
15 小时
 楼主| 发表于 2016-6-25 19:16:41 | 显示全部楼层
二楼能否说的清楚一点,我是新手,不懂啊。
回复 支持 反对

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-25 21:13:39 | 显示全部楼层
本帖最后由 phoenix 于 2016-6-25 21:16 编辑
李锐 发表于 2016-6-25 19:16
二楼能否说的清楚一点,我是新手,不懂啊。

LCD 点的颜色值格式为RGB565格式  (LCD驱动芯片:ILI9341)

u16  LCD_ReadPoint(u16 x,u16 y); //读点函数,返回读取的像素点颜色值

(x 为要读取的像素点在LCD上的横坐标,y 为要读取的像素点在LCD上的纵坐标)

若要具体的R、G、B 的值,就要把所读取的像素点的颜色值拆分后获取。
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2016-4-15
在线时间
15 小时
 楼主| 发表于 2016-6-25 21:57:28 | 显示全部楼层
我是这样做过,但此时屏幕上就显示不了画面。
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2016-4-15
在线时间
15 小时
 楼主| 发表于 2016-6-25 22:00:18 | 显示全部楼层
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
#include "usmart.h"  
#include "usart2.h"  
#include "timer.h"
#include "ov2640.h"
#include "dcmi.h"
//ALIENTEK 探索者STM32F407开发板 实验35
//摄像头 实验 -库函数版本
//技术支持:www.openedv.com
//淘宝店铺:http://eboard.taobao.com  
//广州市星翼电子科技有限公司  
//作者:正点原子 @ALIENTEK
                                               
//JPEG尺寸支持列表



const u16 jpeg_img_size_tbl[][2]=
{
        176,144,        //QCIF
        160,120,        //QQVGA
        352,288,        //CIF
        320,240,        //QVGA
        640,480,        //VGA
        800,600,        //SVGA
        1024,768,        //XGA     
        1280,1024,        //SXGA
        1600,1200,        //UXGA
};

u16 LCD_BGR2RGB1(u16 c)
{
        u16  r,g,b;   
        b=(c>>0)&0x1f;
        g=(c>>5)&0x3f;
        r=(c>>11)&0x1f;          
  return r;
}

//RGB565测试
//RGB数据直接显示在LCD上面
void rgb565_test(void)
{
        u32 hang,lie,j;
        u16 Color_Sum,RGB,Color;
        OV2640_RGB565_Mode();        //RGB565模式
        My_DCMI_Init();                          //DCMI配置
        DCMI_DMA_Init((u32)&LCD->LCD_RAM,1,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable);//DCMI DMA配置  
        OV2640_OutSize_Set(lcddev.width,lcddev.height);
        DCMI_Start();                     //启动传输,要是不要下面的延时的话,在主函数里就相当于DCMI_Start()一直执行,即不会显示图像,有延时的话,启动传输的程序就一直执行。
        while(1)
        {       
                  RGB=LCD_ReadPoint(100,100);   //随便写个点
//                LCD -> LCD_RAM =
//                Color = LCD -> LCD_RAM;       
//                LCD_WriteRAM_Prepare();
      printf("%d\n",RGB);
//    delay_ms(500);                                               
        }               
}

int main(void)
{

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);  //初始化延时函数
        uart_init(115200);                //初始化串口波特率为115200
        usart2_init(42,115200);                //初始化串口2波特率为115200
        LED_Init();                                        //初始化LED
        LCD_Init();                                        //LCD初始化  
       
        TIM3_Int_Init(10000-1,8400-1);//10Khz计数,1秒钟中断一次
       
        usmart_dev.init(84);                //初始化USMART
        POINT_COLOR=RED;//设置字体为红色
        while(OV2640_Init())//初始化OV2640
        {
                LCD_ShowString(0,0,300,16,16,"OV2640 ERR");
                delay_ms(200);
        }
        LCD_ShowString(0,0,300,16,16,"OV2640 OK");
        while(1)
        {       
    rgb565_test();                        //似乎只能执行这一步,因为此语句里带有while(1),所以它把上一句执行完后,就不会在执行上一句,同时,它不会执行下面的语句
  }
}       

















































回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2016-4-15
在线时间
15 小时
 楼主| 发表于 2016-6-25 22:00:35 | 显示全部楼层
主函数。
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2016-4-15
在线时间
15 小时
 楼主| 发表于 2016-6-25 22:00:47 | 显示全部楼层
其它的几乎没变。
回复 支持 反对

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-25 23:07:20 | 显示全部楼层
本帖最后由 phoenix 于 2016-6-25 23:09 编辑
李锐 发表于 2016-6-25 22:00
其它的几乎没变。
得给摄像头足够的时间传输完一帧图像到LCD,后你再读取LCD上的点才行。

加上延时还没有图像吗?你现在的问题是?
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2016-4-15
在线时间
15 小时
 楼主| 发表于 2016-6-26 00:06:57 | 显示全部楼层
准确来说我是用了OV2640摄像头,它所显示的图像在LCD上,我现在想要把这个区域的RGB的值得出来。
回复 支持 反对

使用道具 举报

4

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2016-1-25
在线时间
75 小时
发表于 2016-11-4 16:21:05 | 显示全部楼层
这个问题,楼主搞定了么,能否将源码分享一下
回复 支持 反对

使用道具 举报

1

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2016-8-17
在线时间
16 小时
发表于 2017-8-7 19:50:11 | 显示全部楼层
李锐 发表于 2016-6-25 21:57
我是这样做过,但此时屏幕上就显示不了画面。

我也有这样的问题 你现在解决了吗
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-17 18:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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