标题:
STM32驱动OV7725摄像头拍照液晶显示程序源码
[打印本页]
作者:
自自在在123
时间:
2017-5-15 19:45
标题:
STM32驱动OV7725摄像头拍照液晶显示程序源码
改写了一个摄像头拍照,并保存SD卡
本程序运行需要SD卡支持,具体操作参考“Doc/readme.txt”文件的说明
0.png
(67.5 KB, 下载次数: 144)
下载附件
2017-5-15 22:44 上传
/*********************************************************************************************/
本文档使用 TAB = 4 对齐,使用keil5默认配置打开阅读比较方便。
【*】程序简介
-工程名称:OV7725摄像头-液晶显示
-实验平台: 秉火STM32 指南者 开发板
-MDK版本:5.16
-ST固件库版本:3.5
【 !】功能简介:
驱动摄像头,把采集得的图像直接显示在液晶屏上,支持拍照。
【 !】实验操作:
连接摄像头、3.2寸液晶屏、接入已格式化的SD卡,下载程序后复位开发板即可,屏幕会显示采集得的图像,
可通过旋转镜头调焦。
按Key1可以把当前屏幕显示的图像保存成BMP图片到SD卡
按Key2可以使用黑白模式。
bsp_ov7725.c文件中cam_mode提供了几组不同的配置,
可以根据其中的注释说明使用不同的配置测试下
修改cam_mode的值可实现不同的配置
/***************************************************************************************************************/
【*】 引脚分配
摄像头:
摄像头与STM32的普通GPIO相连,使用模拟I2C:
OV7725_OE <---> PA3 //FIFO输出使能
OV7725_RRST <---> PA2 //读指针复位引脚,低电平复位
OV7725_RCLK <---> PC5 //FIFO读时钟
OV7725_XCLK <---> 不需要连接,OV7725时钟输入引脚,摄像头内已自带晶振
OV7725_VSYNC <---> PC3 //OV7725帧同步信号
OV7725_WRST <---> PC4 //写指针复位引脚,低电平复位
OV7725_WEN <---> PD3 //FIFO写使能
OV7725_HREF <---> 不需要连接,本程序控制不需要这个信号
OV7725_D[0:7] <---> PB[8:15] //FIFO数据信号线
OV7725_SIO_C <---> PC6 //I2C 时钟信号,模拟
OV7725_SIO_D <---> PC7 //I2C 数据信号,模拟
液晶屏:
液晶屏接口与STM32的FSMC接口相连,支565格式,
使用FSMC产生8080时序与液晶屏驱动芯片ILI9341通讯.
/*液晶控制信号线*/
ILI9341_CS <---> PD7 //片选,选择NOR/SRAM块 BANK1_NOR/SRAM1
ILI9341_DC <---> PD11 //PD11为FSMC_A16,本引脚决定了访问LCD时使用的地址
ILI9341_WR <---> PD5 //写使能
ILI9341_RD <---> PD4 //读使能
ILI9341_RST <---> PE1 //复位引脚
ILI9341_BK <---> PD12 //背光引脚
数据信号线省略,本实验没有驱动触摸屏。
串口(TTL-USB TO USART):
CH340的收发引脚与STM32的发收引脚相连。
RX<--->PA9
TX<--->PA10
/*********************************************************************************************/
单片机源程序如下:
/**
******************************************************************************
* @file main.c
* @author fire
* @version V1.0
* @date 2013-xx-xx
* @brief 摄像头火眼ov7725测试例程
******************************************************************************
* @attention
*
* 实验平台:秉火 F103-指南者 STM32 开发板
*
******************************************************************************
*/
#include "stm32f10x.h"
#include "./ov7725/bsp_ov7725.h"
#include "./lcd/bsp_ili9341_lcd.h"
#include "./led/bsp_led.h"
#include "./usart/bsp_usart.h"
#include "./key/bsp_key.h"
#include "./systick/bsp_SysTick.h"
#include "./bmp/bsp_bmp.h"
#include "ff.h"
extern uint8_t Ov7725_vsync;
unsigned int Task_Delay[NumOfTask];
extern OV7725_MODE_PARAM cam_mode;
FATFS fs; /* FatFs文件系统对象 */
FRESULT res_sd; /* 文件操作结果 */
/**
* @brief 主函数
* @param 无
* @retval 无
*/
int main(void)
{
float frame_count = 0;
uint8_t retry = 0;
/* 液晶初始化 */
ILI9341_Init();
ILI9341_GramScan ( 3 );
LCD_SetFont(&Font8x16);
LCD_SetColors(RED,BLACK);
ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); /* 清屏,显示全黑 */
/********显示字符串示例*******/
ILI9341_DispStringLine_EN(LINE(0),"BH OV7725 Test Demo");
USART_Config();
LED_GPIO_Config();
Key_GPIO_Config();
SysTick_Init();
/*挂载sd文件系统*/
res_sd = f_mount(&fs,"0:",1);
if(res_sd != FR_OK)
{
printf("\r\n请给开发板插入已格式化成fat格式的SD卡。\r\n");
}
printf("\r\n ** OV7725摄像头实时液晶显示例程** \r\n");
/* ov7725 gpio 初始化 */
OV7725_GPIO_Config();
LED_BLUE;
/* ov7725 寄存器默认配置初始化 */
while(OV7725_Init() != SUCCESS)
{
retry++;
if(retry>5)
{
printf("\r\n没有检测到OV7725摄像头\r\n");
ILI9341_DispStringLine_EN(LINE(2),"No OV7725 module detected!");
while(1);
}
}
/*根据摄像头参数组配置模式*/
OV7725_Special_Effect(cam_mode.effect);
/*光照模式*/
OV7725_Light_Mode(cam_mode.light_mode);
/*饱和度*/
OV7725_Color_Saturation(cam_mode.saturation);
/*光照度*/
OV7725_Brightness(cam_mode.brightness);
/*对比度*/
OV7725_Contrast(cam_mode.contrast);
/*特殊效果*/
OV7725_Special_Effect(cam_mode.effect);
/*设置图像采样及模式大小*/
OV7725_Window_Set(cam_mode.cam_sx,
cam_mode.cam_sy,
cam_mode.cam_width,
cam_mode.cam_height,
cam_mode.QVGA_VGA);
/* 设置液晶扫描模式 */
ILI9341_GramScan( cam_mode.lcd_scan );
ILI9341_DispStringLine_EN(LINE(2),"OV7725 initialize success!");
printf("\r\nOV7725摄像头初始化完成\r\n");
Ov7725_vsync = 0;
while(1)
{
/*接收到新图像进行显示*/
if( Ov7725_vsync == 2 )
{
frame_count++;
FIFO_PREPARE; /*FIFO准备*/
ImagDisp(cam_mode.lcd_sx,
cam_mode.lcd_sy,
cam_mode.cam_width,
cam_mode.cam_height); /*采集并显示*/
Ov7725_vsync = 0;
// LED1_TOGGLE;
}
/*检测按键*/
if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON )
{
static uint8_t name_count = 0;
char name[40];
//用来设置截图名字,防止重复,实际应用中可以使用系统时间来命名。
name_count++;
sprintf(name,"0:photo_%d.bmp",name_count);
LED_BLUE;
printf("\r\n正在截图...");
/*截图必需设置好液晶显示方向和截图窗口*/
ILI9341_GramScan ( cam_mode.lcd_scan );
if(Screen_Shot(0,0,LCD_X_LENGTH,LCD_Y_LENGTH,name) == 0)
{
printf("\r\n截图成功!");
LED_GREEN;
}
else
{
printf("\r\n截图失败!");
LED_RED;
}
}
/*检测按键*/
if( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON )
{
/*LED反转*/
// LED3_TOGGLE;
/*动态配置摄像头的模式,
有需要可以添加使用串口、用户界面下拉选择框等方式修改这些变量,
达到程序运行时更改摄像头模式的目的*/
cam_mode.QVGA_VGA = 0, //QVGA模式
cam_mode.cam_sx = 0,
cam_mode.cam_sy = 0,
cam_mode.cam_width = 320,
cam_mode.cam_height = 240,
cam_mode.lcd_sx = 0,
cam_mode.lcd_sy = 0,
cam_mode.lcd_scan = 3, //LCD扫描模式,本横屏配置可用1、3、5、7模式
//以下可根据自己的需要调整,参数范围见结构体类型定义
cam_mode.light_mode = 0,//自动光照模式
cam_mode.saturation = 0,
cam_mode.brightness = 0,
cam_mode.contrast = 0,
cam_mode.effect = 1, //黑白模式
/*根据摄像头参数写入配置*/
OV7725_Special_Effect(cam_mode.effect);
/*光照模式*/
OV7725_Light_Mode(cam_mode.light_mode);
/*饱和度*/
OV7725_Color_Saturation(cam_mode.saturation);
/*光照度*/
OV7725_Brightness(cam_mode.brightness);
/*对比度*/
OV7725_Contrast(cam_mode.contrast);
/*特殊效果*/
OV7725_Special_Effect(cam_mode.effect);
/*设置图像采样及模式大小*/
OV7725_Window_Set(cam_mode.cam_sx,
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
2.摄像头拍照.zip
(1.07 MB, 下载次数: 270)
2017-5-15 19:45 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2017-5-15 22:48
好资料,51黑有你更精彩!!!
作者:
17liqi17
时间:
2017-11-5 12:49
为了下载这个资料我发了两个贴,但是不知道为什么下载不起,我的电脑弹不出那个窗口~嘤嘤嘤~
作者:
ZXXY009
时间:
2019-2-27 14:47
请问这个精英版可以用吗
作者:
ZXXY009
时间:
2019-2-27 15:17
如果是TF屏幕可以用吗,在线等
作者:
xqtop
时间:
2019-3-1 06:17
非常不错,感谢分享。
作者:
我是阿煤
时间:
2019-5-8 14:43
没有黑币了,能不发我邮箱,
1787713921@qq.com
,感谢!
作者:
18846081939
时间:
2019-8-7 15:31
什么型号的开发板啊
作者:
4591314
时间:
2019-11-15 09:00
能不能用山外的串口显示出图像啊
作者:
lzcsheep
时间:
2021-4-18 09:51
18846081939 发表于 2019-8-7 15:31
什么型号的开发板啊
好像是F1系列的开发板
作者:
话之王
时间:
2022-3-8 10:31
18846081939 发表于 2019-8-7 15:31
什么型号的开发板啊
只要驱动是F1都能用
作者:
话之王
时间:
2022-3-10 11:42
‘摄像头带FIFO吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1