基于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​​​​​​​

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

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

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

猜你喜欢

转载自blog.csdn.net/m0_59113542/article/details/123592010