基于STM32+OV7670+TFT显示(升级篇:将摄像头采集到的画面显示在TFT屏)

 书接上文:https://blog.csdn.net/m0_59113542/article/details/123590333

本篇文章主要介绍如何采集到的图像显示在TFT。

一、效果展示

有图有真相

图片比任何语言都有说服力,话不多说直接上图。

 清晰度是非常高的,所以说实验还是很成功的。

二、程序实现

在第一篇文章已经完成了ov7670的初始化,我们在这里只需要从FIFO中读取数据即可。

1、discern.c   摄像头取数据并显示文件

#include "discern.h"
#include "delay.h"
#include "lcd.h"
#include "ov7670.h" 
#include "algorithm.h"


void CameraScan(void) 
{                                               //摄像头扫描测试
	vu16 a = 0,b = 0;
	
	LCD_SetWindows(0,0,320,240);                                        //设置显示窗口
	GPIO_WriteBit(LCD_RS_PORT, LCD_RS_PIN,Bit_SET);                     //标志:数据写入

	while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0)==1);
	GPIO_WriteBit(FIFO_WRST_PORT, FIFO_WRST_PIN, Bit_RESET);  //写重置
	GPIO_WriteBit(FIFO_WRST_PORT, FIFO_WRST_PIN, Bit_SET);
	GPIO_WriteBit(FIFO_WR_PORT, FIFO_WR_PIN, Bit_SET);
	while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0)==0);
	while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0)==1);
	GPIO_WriteBit(FIFO_WR_PORT, FIFO_WR_PIN, Bit_RESET);
	FIFO_Reset_Read_Addr();   //读数据复位
 
	for(a = 0; a < 240; a++) 
	{
		for(b = 0; b < 320; b++) 
		{     //数据手册时序图
			GPIOC->BRR = 1<<4;        //gpioc 4 复位      时钟
			AA = GPIOA->IDR;			    //查看引脚电平状态				
			GPIOC->BSRR = 1<<4;       //gpioc 4 置位
			
			GPIOC->BRR = 1<<4;
			BB = GPIOA->IDR&0x00ff;								
			GPIOC->BSRR = 1<<4;	
			
			color = (AA<<8)| BB;      		//读两次,十六位表示一个像素		
			LCD_DATA_PORT->ODR = color;   //将颜色显示在LCD屏上
			GPIOC->BRR = 1<<11;           //写数据
			GPIOC->BSRR = 1<<11;
		}
	}
}

主要是按照数据手册对相关参数进行配置。

2、discern.h

#ifndef __DISCERN_H
#define __DISCERN_H
	 
#include "stm32f10x.h"
#include "value.h"

void CameraScan(void);

#endif

3、main.c

#include "stm32f10x.h"
#include "stm32f10x_it.h" 
#include "usart.h"
#include "delay.h"
#include "lcd.h"
#include "ov7670.h"
#include "rcc.h"
#include "ShowChar.h"
#include "discern.h"
int main(void)
{  
	unsigned int scan_time = 0;
 
	STM32_Clock_Init(16);                                    //初始化时钟
	LCD_Init();	
	OV7670_GPIO_Init();                                      //OV7670引脚初始化,放在串口初始化前面
	//USART1_init();                                         //初始化串口	

	TIM3_Configuration();                                    //10Khz的计数频率,计数到5000为500ms  
	LCD_Fill(0x6666);		      //初始化刷绿色屏
	while(!Sensor_Init());    //摄像头芯片初始化
	LCD_Fill(0xF800);         //成功后刷红色屏
	delayms(100);
	
	while(1)
	{
		CameraScan();                                       //摄像头扫描测试
		LCD_ShowNum(30,220,21 - scan_time, 2); 
		if(scan_time == 20) 
		{
			 scan_time = 0;
		}
		scan_time++;
	} 
}


大家如果想省事的话也可直接下载全部工程资料。

完整工程链接:https://download.csdn.net/download/m0_59113542/85002160?spm=1001.2014.3001.5503​​​​​​​

  欢迎大家指正交流,有空可以一起讨论代码啊。

制作不易,感谢大家支持,感谢!!!!!!

  --------------一个正在努力的人

  • 46
    点赞
  • 320
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
你好!要驱动OV7670TFT显示器,你可以使用STM32微控制器和相应的库来实现。以下是一个简单的步骤指南: 1. 配置硬件连接:将OV7670摄像头TFT显示器连接到STM32微控制器的适当引脚。确保引脚分配正确,并使用适当的电平转换电路(如果需要)。 2. 初始化摄像头:使用STM32的GPIO和SPI接口初始化OV7670摄像头。可以使用相关的库函数或者手动配置相应的寄存器来完成初始化。 3. 配置摄像头输出:设置摄像头的输出格式和分辨率,以便与TFT显示器兼容。这通常涉及到配置摄像头的寄存器。 4. 初始化TFT显示器:使用STM32的GPIO和SPI接口初始化TFT显示器。根据显示器的规格,确保正确配置引脚和SPI通信参数。 5. 接收图像数据:从OV7670摄像头接收图像数据,并将其存储在STM32微控制器的内存中。这通常涉及到使用DMA(直接内存访问)或者中断来实现高效的数据传输。 6. 处理图像数据:如果需要,你可以对图像数据进行处理,例如裁剪、缩放、滤波等。 7. 发送图像数据到TFT显示器:将处理后的图像数据通过SPI接口发送到TFT显示器。根据显示器的规格,确保正确配置引脚和SPI通信参数。 8. 刷新显示器:根据需要,定期刷新TFT显示器的内容,以便更新图像。 以上只是一个概览,实际的驱动过程可能会更加复杂,具体取决于你使用的STM32型号、摄像头TFT显示器的规格。你可能需要参考相关的文档和示例代码来完成驱动开发。希望这些信息能对你有所帮助!如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值