初级会员

- 积分
- 58
- 金钱
- 58
- 注册时间
- 2014-7-21
- 在线时间
- 10 小时
|

楼主 |
发表于 2014-7-22 08:10:26
|
显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,你看一下下面的程序,这也是专区的人写的图像这一块的,可是没注释,我看不懂,如果你看得懂,你帮我看看:
#include <stm32f10x.h>
#include <stdio.h>
#include <usart.h>
#include <Nvic_Exit.h>
#include <delay.h>
#include <tft.h>
#include <ov7670.h>
#include <I2C.h>
#include "Image.h"
#include "include.h"
u8 Get_a_Y()
{
u8 t1,t2;
//????????Y·?????????
FIFO_RCK=0;
FIFO_RCK=1;
t1=(0x00ff&GPIOB->IDR);
FIFO_RCK=0;
FIFO_RCK=1;
t2=(0x00ff&GPIOB->IDR);
//????????????
FIFO_RCK=0;
FIFO_RCK=1;
t2=(0x00ff&GPIOB->IDR);
FIFO_RCK=0;
FIFO_RCK=1;
t2=(0x00ff&GPIOB->IDR);
return t1;
}
void skip_a_row()
{
u16 i;
u8 temp;
for (i=0;i<320;i++)
{
//????????????
FIFO_RCK=0;
FIFO_RCK=1;
temp=(0x00ff&GPIOB->IDR);
FIFO_RCK=0;
FIFO_RCK=1;
temp=(0x00ff&GPIOB->IDR);
}
}
void Get_a_Image()
{
u16 i,j;
for (i=0;i<R;i++)
{
for(j=0;j<C;j++)
{
// data[j]= Get_a_Y();
}
//????????×???5??
skip_a_row();
skip_a_row();
skip_a_row();
skip_a_row();
skip_a_row();
}
}
u8 Abs8(u8 a)
{
if (a>=0)
{
return a;
}
else
{
return -a;
}
}
void send_pic(void)
{
u8 i,j;
USART_SendData(USART1,0xFF);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
for (i=0;i<R;i++)
{
for (j=0;j<C;j++)
{
if(data[j]==255) data[j]--;
USART_SendData(USART1,data[j]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
}
}
//*************************************************************//
//??????: DataAnalyse
//?????à????void ??????l????????×é??
//??????????????·???
//*************************************************************//
void DataAnalyse(u8 l)
{
Data=&data[0][0];
ImageProcess();
}
///////////////////////////////////////////
//????±?????????
///////////////////////////////////////////
void ImageProcess()
{
int i=0,j=0;
u8 *p=0;
//unsigned char *q=0;
//ThresholdValue = otsu ((unsigned char *)Data, C, 0, 0, R, C);
//ThresholdValue = 130;
//?ù?????¨
// for(i=0;i<38;i++)
// {
// for (p=Data+i*C+3;p<Data+(i+1)*C-3;p++)
// {
// *p=(*p+*(p+1)+*(p-1))/3; //?????ù?????¨??·??????¨
// }
// }
//??????
for (p = Data; p ><= Data+R*C; p++)
{
if (*p > ThresholdValue){*p = White;}
else{*p = Black;}
}
//???¨
for (i=0;i<R;i++)
{
p = Data+i*C+1;
j=0;
while (j><C-2)
{
if (*(p-1) == White && *p == Black && *(p+1) == White)
{
*p = White;
}
else if (*(p-1) == Black && *p == White && *(p+1) == Black)
{
*p = Black;
}
j++;
p++;
}
}
}
void mygetLmr()
{
u8 i=0;
u8 j=0;
u8 pLeft,pRight ;
u8 bFoundLeft = 0;
u8 bFoundRight = 0;
/// unsigned char TripLen = 4;
char bLeftEnd=0;
char bRightEnd=0;
char bMidEnd=0;
BlackLineData[R-1]=LastFieldMid1;
for (i=R-2;i>3&&bMidEnd!=1;i--)
{
//????????±???????????
bFoundLeft=0;
bFoundRight=0;
//?ò×ó?¨?è
for (pLeft=BlackLineData[i+1];pLeft>2;pLeft--)
{
if (*(Data+i*C+pLeft)==Black)
{
bFoundLeft=1;
Left=pLeft;
pLeft=1;
}
}
if(bFoundLeft!=1)
Left=1;
//?ì????·????????·
//?ò???¨?è
for (pRight=BlackLineData[i+1];pRight<C-2;pRight++)
{
if (*(Data+i*C+pRight)==Black)//&&*(Data+i*C+pRight+1)==Black)
{
bFoundRight=1;
Right=pRight;
pRight=C;
}
}
if (bFoundRight!=1)
Right=C-1;
BlackLineData=((Left+Right))/2;
//×ó??±????????á???????????????í???×?í???????????? ????????·??ú??°???
/*
if ( *(Data+i*C+ BlackLineData)==Black)
bMidEnd=1;
*/
if ((BlackLineData>C-4)||BlackLineData<4)
bMidEnd=1;
}
LastFieldMid1= BlackLineData[ R-5];
LastFieldMid2=BlackLineData[ R-6];
}
void SmoothMid()
{
u8 i;
for (i=R-3;i>2;i--) {
if (Abs8(BlackLineData-BlackLineData[i-1])>5&& Abs8(BlackLineData-BlackLineData[i+1])>5 )
BlackLineData=(BlackLineData[i-1]+BlackLineData[i+1] )/2;
}
}
void AddMtoPic(void)
{
u8 i;
for(i=0;i<R;i++)
{
data[BlackLineData]=Black;
data[80]=Black;
}
}
void Steer_control(void)
{
u8 kp,kd,ki;
s16 steererr = 0;
// s32 sum=0;
//s8 dircnt=0;
Err=(BlackLineData[12]+BlackLineData[113]+BlackLineData[14]+BlackLineData[15]+BlackLineData[11])/5-80;
//Err=Err+45;
/*
Errd=Err-Errlast;
Errlast=Err;
Errdlast = Errd;
Errhistory[7]=Errhistory[6];
Errhistory[6]=Errhistory[5];
Errhistory[5]=Errhistory[4];
Errhistory[4]=Errhistory[3];
Errhistory[3]=Errhistory[2];
Errhistory[2]=Errhistory[1];
Errhistory[1]=Errhistory[0];
Errhistory[0]=Err;
Erri=(s16)((Errhistory[0]+Errhistory[1]+Errhistory[2]+Errhistory[3]+Errhistory[4]+Errhistory[5]+Errhistory[6]+Errhistory[7])>>3);
*/
kp=8;
kd=0;
ki=0;
steererr = kp*Err;
Steerangle = STRM-steererr;
if(Steerangle<=STRL) Steerangle=STRL;
if(Steerangle>=STRR) Steerangle=STRR;
TIM3->CCR1 = Steerangle;
}
void SpeedContiol(u16 speed)
{
TIM3->CCR2 =speed;
//TIM2->CCR2 = speed;
} |
|