#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "usmart.h"
#include "lcd.h"
#include "ov7670.h"
#include "exti.h"
#include "timer.h"
//ALIENTEK Mini STM32开发板扩展实验9
extern u8 ov_sta; //在exit.c里面定义
extern u8 ov_frame; //在timer.c里面定义
//更新LCD显示
void camera_refresh(void)
{
u32 j,i=0;
u16 color;
u16 x[320],y[240],m,n;
u16 Xmin,Xmax,Ymin,Ymax;
if(ov_sta==2)
{
LCD_Scan_Dir(U2D_L2R); //从上到下,从左到右
LCD_SetCursor(0x00,0x0000); //设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAM
OV7670_CS=0;
OV7670_RRST=0; //开始复位读指针
OV7670_RCK=0;
OV7670_RCK=1;
OV7670_RCK=0;
OV7670_RRST=1; //复位读指针结束
OV7670_RCK=1;
for(j=0;j<76800;j++)
{
GPIOB->CRL=0X88888888;
OV7670_RCK=0;
color=OV7670_DATA; //读数据
OV7670_RCK=1;
color<<=8;
OV7670_RCK=0;
color|=OV7670_DATA; //读数据
OV7670_RCK=1;
GPIOB->CRL=0X33333333;
if(color<25000)
{
color=0x0000;
m=j%320;
n=j/320;
if(i==0)
{
x[i]=m;
y[i]=n;
Xmin=m;
Xmax=m;
Ymin=n;
Ymax=n;
i++;
}
x[i]=m;
y[i]=n;
if((x[i]-x[i-1])<50&&(y[i]-y[i-1])<50)
{
if((x[i]<315)&&(x[i]>5)&&(y[i]<235)&&(y[i]>5))
{
if(x[i]>Xmax)
Xmax=x[i];
if(x[i] if(y[i]>Ymax) Ymax=y[i]; if(y[i] i++; } } } else color=0xFFFF; LCD_WR_DATA(color); } POINT_COLOR=RED; LCD_DrawRectangle(Xmin,Ymin,Xmax,Ymax); OV7670_CS=1; OV7670_RCK=0; OV7670_RCK=1; EXTI->PR=1<<15; //清除LINE8上的中断标志位 ov_sta=0; //开始下一次采集 ov_frame++; LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认扫描方向 } } int main(void) { u8 i; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2 uart_init(9600); OV7670_Init(); LED_Init(); //初始化与LED连接的硬件接口 LCD_Init(); //初始化LCD if(lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963) //强制设置屏幕分辨率为320*240.以支持3.5寸大屏 { lcddev.width=240; lcddev.height=320; } usmart_dev.init(72); //初始化USMART POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(60,50,200,200,16,"Mini STM32"); LCD_ShowString(60,70,200,200,16,"OV7670 TEST"); LCD_ShowString(60,90,200,200,16,"ATOM@ALIENTEK"); LCD_ShowString(60,110,200,200,16,"2014/3/27"); LCD_ShowString(60,130,200,200,16,"Use USMART To Set!"); LCD_ShowString(60,150,200,200,16,"OV7670 Init...");
上一篇:基于stm32f103c8t6的温度检测程序
下一篇:STM32通过两个按键变量控制多种花样灯亮法源程序
推荐阅读最新更新时间:2024-11-05 20:07
设计资源 培训 开发板 精华推荐
- 用于完整 3V、12 位、1MHz 模数转换系统的 AD8604ARUZ 运算放大器的典型应用
- TCR2BF28、200mA、2.8V 输出电压 CMOS 低压降稳压器的典型应用,在 SMV(SOT-25) 中具有自动放电功能
- PEmicro Cyclone FX编程器
- VAR-STK-DUAL_LO、VAR-SOLO基于VAR-SOM-SOLO i.MX6处理器的定制开发板
- 高铁场景
- 使用 ON Semiconductor 的 KA7805AE 的参考设计
- LTC3642IMS8E-5 小尺寸、有限峰值电流、10mA 稳压器的典型应用电路
- EVAL-AD7677CB,AD7677 评估板,48 引脚,16 位 PulSAR 模数转换器
- 测试开源后相关功能
- Halo TD-XPAH:开源 802.11ah 可扩展远程 Wi-Fi 开发平台(原理图、PCB等)