欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
51單片機(jī)驅(qū)動(dòng)OV7670可見(jiàn)光定位源程序 9325tp 320x240液晶顯示
[打印本頁(yè)]
作者:
vana
時(shí)間:
2017-8-9 16:23
標(biāo)題:
51單片機(jī)驅(qū)動(dòng)OV7670可見(jiàn)光定位源程序 9325tp 320x240液晶顯示
0.png
(10.91 KB, 下載次數(shù): 72)
下載附件
2017-8-9 17:11 上傳
OV7670攝像頭模塊,輸出黑白圖像的辦法:
http://m.raoushi.com/bbs/dpj-92273-1.html
OV7670單片機(jī)源程序如下:
#include <STC12C5A.h>
#include <stdio.h>
#include "9325tp.h"
#include "ov7670_fifo.h"
#include "UART.h"
void main_init()
{
EX0=1; //紅外中斷
IT0=1; //下降沿有效
}
unsigned char bn=0;
void main(void)
{
unsigned int a,b;
unsigned int c_data;
unsigned char tmp;
main_init();
UART1_init();
UART1_Send_String("UART初始化成功!\r\n");
ILI9325_Initial();
UART1_Send_String("LCD初始化成功!\r\n");
CLR_Screen(Blue2);
FIFO_CS_L();
FIFO_WE_L();
do
{
tmp = Sensor_init();
}
while(!tmp);
UART1_Send_String("OV7670初始化成功!\r\n");
EA=1; //總中斷
while(1)
{
while(bn!=2)
{
}
FIFO_RRST_L(); //復(fù)位FIFO讀指針
FIFO_RD_L();
FIFO_RD_H();
FIFO_RD_L();
FIFO_RRST_H();
FIFO_RD_H();
LCD_SetPos(0,239,0,319);
EA=0;
for(a=0;a<320;a++)
{
for(b=0;b<240;b++)
{
FIFO_RD_L();
c_data = CAMERA2MCU_Data;//讀高位
c_data <<= 8;
FIFO_RD_H();
FIFO_RD_L();
c_data |= CAMERA2MCU_Data;//讀低位
FIFO_RD_H();
Write_Data_U16(c_data);
}
}
EA=1;
bn=0;
}
}
void int0() interrupt 0
{
if(bn==0)
{
FIFO_WRST_L(); //復(fù)位FIFO寫(xiě)指針
FIFO_RD_L();
FIFO_RD_H();
FIFO_RD_L();
FIFO_WRST_H();
FIFO_RD_H();
bn=1;
FIFO_WE_H();
}
else if(bn==1)
{
FIFO_WE_L();
bn=2;
}
}
復(fù)制代碼
ov7670_fifo.c:
/********************AL422+OV7670外接引腳************************/
// 1、SCL_SCCB 攝像頭輸出配置時(shí)鐘引腳
// 2、SDA_SCCB 攝像頭輸出配置數(shù)據(jù)引腳
// 3、VSYNC 攝像頭的幀信號(hào)引腳
// 4、WEN(WR) AL422 FIFO的輸入使能引腳
// 5、RRST AL422 FIFO的輸出復(fù)位引腳,可以將地址指針值為0
// 6、OE/CS(CS) AL422 FIFO的輸出使能引腳 ,OE為低電平時(shí),允許數(shù)據(jù)輸出 ,高電平時(shí),數(shù)據(jù)輸出高阻態(tài)
// 7、RCLK/WR(RD) AL422 FIFO的讀使能引腳
// 8、XCLK 攝像頭的時(shí)鐘信號(hào)
// 9、D0~D7 AL422 FIFO的8位數(shù)據(jù)入口,直接連接攝像頭的8位數(shù)據(jù)輸出
/*****************************************************************/
/********************AL422+OV7670外接引腳******************************************/
//1\SIC P2_0
//2\SID P2_1
//3\VSYNC P2_2
//4\WEN P2_3
//5\RRST P2_4
//6\CS P2_5
//7\WR/(RD) P2_6
/////////////////////////////////////////////////////////////////////////////////////////
//9\D0~D7 P6_0~P6_7
/**********************************************************************************/
/*************************************AL422+OV7670使用方法*************************/
//1\SCCB 攝像頭輸出配置
//2\XCLK 為攝像頭提供時(shí)鐘
//3\VSYN 場(chǎng)中斷的處理,判斷是否需要保存和讀取圖像
//4\FIFO 對(duì)其進(jìn)行操作,讀取圖像信息和保存圖像信息
/**********************************************************************************/
#include <STC12C5A.h>
#include "ov7670_fifo.h"
#include "Sensor_config.h"
void delay_us(unsigned int n)
{
n=n>>1;
while(n--);
}
/*
-----------------------------------------------
功能: start命令,SCCB的起始信號(hào)
參數(shù): 無(wú)
返回值: 無(wú)
-----------------------------------------------
*/
void startSCCB(void)
{
SCCB_SID_H(); //數(shù)據(jù)線高電平
delay_us(50);
SCCB_SIC_H(); //在時(shí)鐘線高的時(shí)候數(shù)據(jù)線由高至低
delay_us(50);
SCCB_SID_L();
delay_us(50);
SCCB_SIC_L(); //數(shù)據(jù)線恢復(fù)低電平,單操作函數(shù)必要
delay_us(50);
}
/*
-----------------------------------------------
功能: stop命令,SCCB的停止信號(hào)
參數(shù): 無(wú)
返回值: 無(wú)
-----------------------------------------------
*/
void stopSCCB(void)
{
SCCB_SID_L();
delay_us(50);
SCCB_SIC_H();
delay_us(50);
SCCB_SID_H();
delay_us(50);
}
/*
-----------------------------------------------
功能: noAck,用于連續(xù)讀取中的最后一個(gè)結(jié)束周期
參數(shù): 無(wú)
返回值: 無(wú)
-----------------------------------------------
*/
void noAck(void)
{
SCCB_SID_H();
delay_us(50);
SCCB_SIC_H();
delay_us(50);
SCCB_SIC_L();
delay_us(50);
SCCB_SID_L();
delay_us(50);
}
/*
-----------------------------------------------
功能: 寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)到SCCB
參數(shù): 寫(xiě)入數(shù)據(jù)
返回值: 發(fā)送成功返回1,發(fā)送失敗返回0
-----------------------------------------------
*/
unsigned char SCCBwriteByte(unsigned char m_data)
{
unsigned char j,tem;
for(j=0;j<8;j++) //循環(huán)8次發(fā)送數(shù)據(jù)
{
if((m_data<<j)&0x80)
{
SCCB_SID_H();
}
else
{
SCCB_SID_L();
}
delay_us(50);
SCCB_SIC_H();
delay_us(50);
SCCB_SIC_L();
delay_us(20);
}
//delay_us(50);
SCCB_SID_IN;/*設(shè)置SDA為輸入*/
delay_us(10);
SCCB_SIC_H();
delay_us(80);
if(SCCB_SID_STATE){tem=0;} //SDA=1發(fā)送失敗,返回0}
else {tem=1;} //SDA=0發(fā)送成功,返回1
SCCB_SIC_L();
delay_us(50);
SCCB_SID_OUT;/*設(shè)置SDA為輸出*/
return (tem);
}
/*
-----------------------------------------------
功能: 一個(gè)字節(jié)數(shù)據(jù)讀取并且返回
參數(shù): 無(wú)
返回值: 讀取到的數(shù)據(jù)
-----------------------------------------------
*/
unsigned char SCCBreadByte(void)
{
unsigned char read,j;
read=0x00;
SCCB_SID_IN;/*設(shè)置SDA為輸入*/
delay_us(50);
for(j=8;j>0;j--) //循環(huán)8次接收數(shù)據(jù)
{
//delay_us(100);
SCCB_SIC_H();
delay_us(50);
read=read<<1;
if(SCCB_SID_STATE)
{
read=read+1;
}
SCCB_SIC_L();
delay_us(50);
}
SCCB_SID_OUT;/*設(shè)置SDA為輸出*/
return(read);
}
//功能:寫(xiě)OV7660寄存器
//返回:1-成功 0-失敗
unsigned char wr_Sensor_Reg(unsigned char regID, unsigned char regDat)
{
startSCCB();//發(fā)送SCCB 總線開(kāi)始傳輸命令
if(0==SCCBwriteByte(0x42))//寫(xiě)地址
{
stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
return(0);//錯(cuò)誤返回
}
delay_us(20);
if(0==SCCBwriteByte(regID))//寄存器ID
{
stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
return(0);//錯(cuò)誤返回
}
delay_us(20);
if(0==SCCBwriteByte(regDat))//寫(xiě)數(shù)據(jù)到積存器
{
stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
return(0);//錯(cuò)誤返回
}
stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
return(1);//成功返回
}
//功能:讀OV7660寄存器
//返回:1-成功 0-失敗
unsigned char rd_Sensor_Reg(unsigned char regID, unsigned char *regDat)
{
//通過(guò)寫(xiě)操作設(shè)置寄存器地址
startSCCB();
if(0==SCCBwriteByte(0x42))//寫(xiě)地址
{
stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
return(0);//錯(cuò)誤返回
}
delay_us(20);
if(0==SCCBwriteByte(regID))//積存器ID
{
stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
return(0);//錯(cuò)誤返回
}
stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
delay_us(20);
//設(shè)置寄存器地址后,才是讀
startSCCB();
if(0==SCCBwriteByte(0x43))//讀地址
{
stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
return(0);//錯(cuò)誤返回
}
delay_us(20);
*regDat=SCCBreadByte();//返回讀到的值
noAck();//發(fā)送NACK命令
stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
return(1);//成功返回
}
/* Sensor_init() */
//返回1成功,返回0失敗
unsigned char Sensor_init(void)
{
unsigned char temp;
unsigned int i=0;
SCCB_SID_OUT; //AL422+OV7670 控制引腳初始化
camera_DataIn; //攝像頭8位數(shù)據(jù)端口初始化
temp=0x80;
if(0==wr_Sensor_Reg(0x12, temp)) //Reset SCCB
{
return 0 ;//錯(cuò)誤返回
}
delay_us(20000);
if(0==rd_Sensor_Reg(0x0b, &temp))//讀ID
{
return 0 ;//錯(cuò)誤返回
}
if(temp==0x73)//OV7670
{
for(i=0;i<OV7670_REG_NUM;i++)
{
if( 0==wr_Sensor_Reg(OV7670_reg[i][0],OV7670_reg[i][1]))
{
return 0;//錯(cuò)誤返回
}
}
}
else if(temp==0x21)//OV7725
{
for(i=0;i<OV7725_REG_NUM;i++)
{
if( 0==wr_Sensor_Reg(OV7725_reg[i][0],OV7725_reg[i][1]))
{
return 0;//錯(cuò)誤返回
}
}
}
return temp; //ok
}
復(fù)制代碼
所有資料51hei提供下載:
OV7670攝像頭.zip
(78.69 KB, 下載次數(shù): 99)
2017-8-9 16:25 上傳
點(diǎn)擊文件名下載附件
ov7670
下載積分: 黑幣 -5
作者:
hjjkl1
時(shí)間:
2017-8-10 10:36
可見(jiàn)光定位,三個(gè)LED燈位置如何擺放
作者:
dkh002
時(shí)間:
2019-3-11 10:47
樓主大神,我想請(qǐng)教下,你程序里面宏定義了一個(gè)#define SCCB_SID_IN 這個(gè)有什么意義,還有想問(wèn)下你這個(gè)SCCB的通訊協(xié)議是從STM32那個(gè)移植過(guò)來(lái)的嗎?
作者:
plj213
時(shí)間:
2019-5-2 15:29
謝謝樓主分享。。。
作者:
jemery1030
時(shí)間:
2020-10-3 21:13
先謝謝你的程序,下周再來(lái)測(cè)試,希望順利。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1