EasyTrace演示工程
0.png (37.78 KB, 下載次數(shù): 88)
下載附件
2017-8-11 03:41 上傳
stm32單片機實現(xiàn)顏色跟蹤源程序如下:
- //注:此文件代碼由王工提供
- #include "Sensor.h"
- #include "sccb.h"
- const char OV7670_reg[OV7670_REG_NUM][2]=
- {
- /*以下為OV7670 QVGA RGB565參數(shù) */
- {0x3a, 0x04},
- {0x40, 0x10},
- {0x12, 0x14},
- {0x32, 0x80},
- {0x17, 0x16},
- {0x18, 0x04},//5
- {0x19, 0x02},
- {0x1a, 0x7b},//0x7a,
- {0x03, 0x06},//0x0a,
- {0x0c, 0x0c},
- {0x15, 0x02},
- {0x3e, 0x00},//10
- {0x70, 0x00},
- {0x71, 0x01},
- {0x72, 0x11},
- {0x73, 0x09},//
- {0xa2, 0x02},//15
- {0x11, 0x00},
- {0x7a, 0x20},
- {0x7b, 0x1c},
- {0x7c, 0x28},
- {0x7d, 0x3c},//20
- {0x7e, 0x55},
- {0x7f, 0x68},
- {0x80, 0x76},
- {0x81, 0x80},
- {0x82, 0x88},
- {0x83, 0x8f},
- {0x84, 0x96},
- {0x85, 0xa3},
- {0x86, 0xaf},
- {0x87, 0xc4},//30
- {0x88, 0xd7},
- {0x89, 0xe8},
- {0x13, 0xe0},
- {0x00, 0x00},//AGC
- {0x10, 0x00},
- {0x0d, 0x00},
- {0x14, 0x30},//0x38, limit the max gain
- {0xa5, 0x05},
- {0xab, 0x07},
- {0x24, 0x75},//40
- {0x25, 0x63},
- {0x26, 0xA5},
- {0x9f, 0x78},
- {0xa0, 0x68},
- {0xa1, 0x03},//0x0b,
- {0xa6, 0xdf},//0xd8,
- {0xa7, 0xdf},//0xd8,
- {0xa8, 0xf0},
- {0xa9, 0x90},
- {0xaa, 0x94},//50
- {0x13, 0xe5},
- {0x0e, 0x61},
- {0x0f, 0x4b},
- {0x16, 0x02},
- {0x1e, 0x07},//0x07,
- {0x21, 0x02},
- {0x22, 0x91},
- {0x29, 0x07},
- {0x33, 0x0b},
- {0x35, 0x0b},//60
- {0x37, 0x1d},
- {0x38, 0x71},
- {0x39, 0x2a},
- {0x3c, 0x78},
- {0x4d, 0x40},
- {0x4e, 0x20},
- {0x69, 0x5d},
- {0x6b, 0x40},//PLL
- {0x74, 0x19},
- {0x8d, 0x4f},
- {0x8e, 0x00},//70
- {0x8f, 0x00},
- {0x90, 0x00},
- {0x91, 0x00},
- {0x92, 0x00},//0x19,//0x66
- {0x96, 0x00},
- {0x9a, 0x80},
- {0xb0, 0x84},
- {0xb1, 0x0c},
- {0xb2, 0x0e},
- {0xb3, 0x82},//80
- {0xb8, 0x0a},
- {0x43, 0x14},
- {0x44, 0xf0},
- {0x45, 0x34},
- {0x46, 0x58},
- {0x47, 0x28},
- {0x48, 0x3a},
- {0x59, 0x88},
- {0x5a, 0x88},
- {0x5b, 0x44},//90
- {0x5c, 0x67},
- {0x5d, 0x49},
- {0x5e, 0x0e},
- {0x64, 0x04},
- {0x65, 0x20},
- {0x66, 0x05},
- {0x94, 0x04},
- {0x95, 0x08},
- {0x6c, 0x0a},
- {0x6d, 0x55},
- {0x4f, 0x80},
- {0x50, 0x80},
- {0x51, 0x00},
- {0x52, 0x22},
- {0x53, 0x5e},
- {0x54, 0x80},
- {0x6e, 0x11},//100
- {0x6f, 0x9f},//0x9e for advance AWB
- {0x55, 0x00},//亮度
- {0x56, 0x45},//對比度
- {0x57, 0x80},//0x40, change according to Jim's request
- };
- extern const char OV7670_reg[OV7670_REG_NUM][2];
- static void delay_us(unsigned long i)
- {
- while( i--);
- }
- void Sensor_GPIO_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- // Enable GPIOC clock
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Pin = Sensor_VSYNC_BIT;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;////上拉
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- }
- //////////////////////////////////////////////////
- ////函數(shù)功能:中斷配制
- //guanfu_wang
- void Sensor_Interrupts_Config(void)//VSYNC 中斷
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- /* Configure one bit for preemption priority */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
-
- /* Configure one bit for preemption priority */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
-
- /* Enable the EXTI9_5 Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
- ////////////////////////////////////////////////////////////////////////
- void Sensor_EXTI_Config(void)//VSYNC 中斷
- {
- EXTI_InitTypeDef EXTI_InitStructure;
-
- GPIO_EXTILineConfig(GPIO_PORT_SOURCE_VSYNC_CMOS, GPIO_PIN_SOURCE_VSYNC_CMOS);
- EXTI_InitStructure.EXTI_Line = EXTI_LINE_VSYNC_CMOS;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
- EXTI_GenerateSWInterrupt(EXTI_LINE_VSYNC_CMOS);
- }
- ///////////////////////////////////////////////////////////////////////////
- //功能:寫OV7660寄存器
- //返回:1-成功 0-失敗
- //guanfu_wang
- unsigned char wr_Sensor_Reg(unsigned char regID, unsigned char regDat)
- {
- startSCCB();//發(fā)送SCCB 總線開始傳輸命令
- if(0==SCCBwriteByte(0x42))//寫地址
- {
- stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
- return(0);//錯誤返回
- }
- delay_us(20);
- if(0==SCCBwriteByte(regID))//積存器ID
- {
- stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
- return(0);//錯誤返回
- }
- delay_us(20);
- if(0==SCCBwriteByte(regDat))//寫數(shù)據(jù)到積存器
- {
- stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
- return(0);//錯誤返回
- }
- stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
-
- return(1);//成功返回
- }
- ////////////////////////////
- //功能:讀OV7660寄存器
- //返回:1-成功 0-失敗
- //guanfu_wang
- unsigned char rd_Sensor_Reg(unsigned char regID, unsigned char *regDat)
- {
- //通過寫操作設置寄存器地址
- startSCCB();
- if(0==SCCBwriteByte(0x42))//寫地址
- {
- stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
- return(0);//錯誤返回
- }
- delay_us(20);
- if(0==SCCBwriteByte(regID))//積存器ID
- {
- stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
- return(0);//錯誤返回
- }
- stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
-
- delay_us(20);
-
- //設置寄存器地址后,才是讀
- startSCCB();
- if(0==SCCBwriteByte(0x43))//讀地址
- {
- stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
- return(0);//錯誤返回
- }
- delay_us(20);
- *regDat=SCCBreadByte();//返回讀到的值
- noAck();//發(fā)送NACK命令
- stopSCCB();//發(fā)送SCCB 總線停止傳輸命令
- return(1);//成功返回
- }
- /* Sensor_init() */
- //返回1成功,返回0失敗
- //guanfu_wang
- unsigned char Sensor_init(void)
- {
- unsigned char temp;
-
- unsigned int i=0;
- // XCLK_init_ON();//開啟MCO功能 提供時鐘給CMOS傳感器
- //uchar ovidmsb=0,ovidlsb=0;
- Sensor_GPIO_Init();
- SCCB_GPIO_Config();//io init..
-
- temp=0x80;
- if(0==wr_Sensor_Reg(0x12, temp)) //Reset SCCB
- {
- return 0 ;//錯誤返回
- }
-
- delay_us(10000);
-
- if(0==rd_Sensor_Reg(0x0b, &temp))//讀ID
- {
- return 0 ;//錯誤返回
- }
-
- 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;//錯誤返回
- }
- }
-
- Sensor_EXTI_Config();
- Sensor_Interrupts_Config();
- }
- return 0x01; //ok
- }
復制代碼
所有資料51hei提供下載:
http://www.zg4o1577.cn/bbs/dpj-92244-1.html (2樓下載)
|