飞思卡尔摄像头组西部赛区一等奖程序.docx
- 文档编号:893086
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:61
- 大小:23.91KB
飞思卡尔摄像头组西部赛区一等奖程序.docx
《飞思卡尔摄像头组西部赛区一等奖程序.docx》由会员分享,可在线阅读,更多相关《飞思卡尔摄像头组西部赛区一等奖程序.docx(61页珍藏版)》请在冰点文库上搜索。
飞思卡尔摄像头组西部赛区一等奖程序
#include
#include
#include
#include"sys_init.h"
#include"uart.h"
#include"SCCB.h"
#pragmaLINK_INFODERIVATIVE"mc9s12xs128"
/******************************************************************************
Êý¾ÝÀàÐͶ¨Òå¼°È«¾Ö±äÁ¿³õʼ»¯
******************************************************************************/
#defineINT8Uunsignedchar
#defineINT8Ssignedchar
#defineINT16Uunsignedshort
#defineINT16Ssignedshort
#defineINT32Uunsignedlong
#defineINT32Ssignedlong
voidrow_deal(void);
voidpoopctl(void);
voidPDCalc(void);
voidput01(void);
voidputdark(void);
voidgetadd(void);
voidspeedcontrol(void);
voiddelayms(intms);
voidgetrowend(void);
voidgetzhidao(void);
INT16UCountThreshold(void);
#definecolumn_max100
#definerow_max50
//#definemiddle23300
//#definemaxleft2300
//#definemaxright4000
/*#defineadd30
#definewan270
#definezhi450//245*/
//#defineruwan20
//#definePUT_01//put01
//ͼÏñ´¦Àí±äÁ¿
#defineBUFF_ADDR0x2500
INT8Uleftadd=25,rightadd=25;
INT16Sfazhi=0,max1=0,min1=0,middle=0,maxdifference,maxnum,maxnum2,maxdifference2,mindifference3,minnum,mindifference,heixian,minnum2;
INT8Ucmos[row_max][column_max]@BUFF_ADDR;
INT16Sboundary_left,boundary_right,value_left,value_right,left_spare,right_spare;
INT16Srow_i=0,row_counter=0,flag=1,speed_flag=0;
INT16Si,j,k=0,a;
INT16Sfield_sum=0,break_sum=0,row_middle[row_max];
//¶æ»ú¿ØÖƱäÁ¿
INT16Slastpart1_sum=0,part1_sum=0,lastpart2_sum=0,part2_sum=0,sum_m=0,field_lost=0;
INT16Ssum_m4=0,lastline1,lastline2,preline,nextline1,nextline2;//ÐÐÓëÐÐÖ®¼äµÄ²îÖµ
INT16Upoop=7500,poop_back=7500;
INT16Sxiaos,xiaos1,xiaos2,xiaos3,xiaos4,xiaos5,xiaos6,das;
INT16SLastsum1,Prevsum1,dsum1,Lastsum2,Prevsum2,dsum2,Lastsum3,Prevsum3,dsum3,Proportion1=3,Derivative1=4,Proportion2=2,Derivative2=2,Proportion3=5,Derivative3=40;
INT32Umiddle2,maxleft,maxright;
//µç»ú¿ØÖƱäÁ¿
INT16Sii=0,gg=0,stopnum=0,num=0,hh=0,bb=0,dd=850;
INT16Swan,zhi,man,a1,a2,speed,lastspeed;
//µÃµ½Ò»·ùͼÏñµÄ×îºóµÄÒ»¸öÓÐЧÐÐ
INT16Sfazhi1=0,maxdifference1,maxnum1,maxnum21,maxdifference21,mindifference31,minnum1,mindifference1,heixian1,minnum21;
INT16Sboundary_left1,boundary_right1,value_left1,value_right1,left_spare1,right_spare1;
INT16Si1,j1,k1=0,sum_m1,lost_flag1,field_lost1,rowend,rowend1,rowend2,rowend3,rowend4;
INT16Sbreak_sum1=0,row_middle1[row_max];
INT16Smax,min,maxnum11,maxnum3,minnum11,slope,x,minnum3,ruwan;
unsignedcharTempData[column_max];
constunsignedcharsegcode[]={//¹²Òõ¼«PBisoutputsegacodeportPM0--DS1PM1--DS2
0x3F,//0
0x06,//1
0x5B,//2
0x4F,//3
0x66,//4
0x6D,//5
0x7D,//6
0x07,//7
0x7F,//8
0x6F,//9
0x77,//A
0x7C,//B
0x39,//C
0x5E,//D
0x79,//E
0x71,//F
0x80//dot
};
chartxtbuf[50]="";
/*******************¿ª¹ØµÄÑ¡Ôñ*****************/
#pragmaCODE_SEGNON_BANKED,
voidinterrupt24PJI(void)
{
INT16Swan1,zhi1,zhi2;
PIFJ=0Xff;
PIEJ=0X00;
a++;
if(a>10)
a=0;
switch(a)
{
case0:
wan1=260,zhi1=390,zhi2=400,dd=850,bb=17,a1=35,a2=30,middle2=3975,maxleft=middle2-750,maxright=middle2+750,PORTB=PORTB=segcode[0];break;
case1:
wan1=280,zhi1=300,zhi2=350,dd=850,bb=17,a1=30,a2=28,middle2=3975,maxleft=middle2-690,maxright=middle2+720,PORTB=PORTB=segcode[1];break;
case2:
wan1=300,zhi1=310,zhi2=390,dd=850,bb=25,a1=30,a2=28,middle2=3975,maxleft=middle2-700,maxright=middle2+750,PORTB=PORTB=segcode[2];break;
case3:
wan1=320,zhi1=330,zhi2=400,dd=850,bb=25,a1=30,a2=28,middle2=3975,maxleft=middle2-700,maxright=middle2+750,PORTB=PORTB=segcode[3];break;
case4:
wan1=330,zhi1=350,zhi2=420,dd=850,bb=25,a1=30,a2=28,middle2=3975,maxleft=middle2-700,maxright=middle2+750,PORTB=PORTB=segcode[4];break;
case5:
wan1=340,zhi1=360,zhi2=420,dd=850,bb=25,a1=30,a2=28,middle2=3975,maxleft=middle2-700,maxright=middle2+750,PORTB=PORTB=segcode[5];break;
case6:
wan1=350,zhi1=370,zhi2=440,dd=850,bb=25,a1=30,a2=28,middle2=3975,maxleft=middle2-700,maxright=middle2+750,PORTB=PORTB=segcode[6];break;
case7:
wan1=280,zhi1=300,zhi2=350,dd=1800,bb=25,a1=30,a2=28,middle2=3975,maxleft=middle2-700,maxright=middle2+750,PORTB=PORTB=segcode[7];break;
case8:
wan1=300,zhi1=330,zhi2=410,dd=1800,bb=25,a1=30,a2=28,middle2=3975,maxleft=middle2-700,maxright=middle2+750,PORTB=PORTB=segcode[8];break;
case9:
wan1=310,zhi1=340,zhi2=420,dd=1800,bb=25,a1=30,a2=28,middle2=3975,maxleft=middle2-700,maxright=middle2+750,PORTB=PORTB=segcode[9];break;
case10:
wan1=350,zhi1=370,zhi2=440,dd=1800,bb=25,a1=30,a2=28,middle2=3975,maxleft=middle2-700,maxright=middle2+750,PORTB=PORTB=segcode[10];break;
}
PIEJ=0Xff;
delayms(30000);
delayms(30000);
//delayms(30000);
//delayms(30000);
wan=wan1;
zhi=zhi1;
man=zhi2;
}
/*******************¿ª¹ØµÄÑ¡Ôñ*****************/
/************************************³¬Æµ*****************************/
voiddelayms(intms)//40MHz--1ms
{
intii,jj;
if(ms<1)ms=1;
for(ii=0;ii for(jj=0;jj<0xff;jj++); } /************************Ö÷º¯Êý**************************/ unsignedchartemp_reg; voidmain(void) { DisableInterrupts; //=======ÉèÖüĴæÆ÷Çø======================================== SetBusCLK_16M(); PUCR_PUPEE=1;//PE¿ÚÉÏÀ SCL_DR=OUT;//³õʼsccbÊä³ö SDA_DR=OUT; I2cByteWrite(ov7620_addr,0X2D,0xC1);//193QVGA60FRAME/S I2cByteWrite(ov7620_addr,0X14,0x24);// //============================================== SetBusCLK_40M();//80MHz vIOPortInit(); //for(i=0;i<40;i++) SCI_Init(); vinterruptsinit(); PWM_Init(); flag=1; row_i=0; row_counter=0; value_left=fazhi; value_right=fazhi; putstr("videotest\r\n"); //key_set(); //PORTB=0X00; delayms(10); EnableInterrupts; for(;;) { }/*waitforever*/ /*pleasemakesurethatyouneverleavethisfunction*/ } //declarefunctionandvariables //externvoidgetline(void); //externvoidtempdata_to_arry(void); externunsignedcharbuff[1][column_max]; externvoidcaptureline(void); /************************ͼÏñ»ñµÃ************************/ #pragmaCODE_SEG__NEAR_SEGNON_BANKED voidinterrupt8Port0_interrupt(void) { TFLG1_C0F=1;//Çå³ýÐÐÖжϱêÖ¾ if(row_counter>40&&row_counter<=140&&row_counter%5==0)//20 { captureline(); row_i++; } elseif(row_counter>140&&row_counter<=200&&row_counter%4==0)//15 { captureline(); row_i++; } elseif(row_counter>200&&row_counter<=230&&row_counter%2==0)//15 { captureline(); row_i++; } /*elseif(row_counter>177&&row_counter<=230&&row_counter%5==0)//10 { captureline(); row_i++; }*/ elseif(row_counter>230)//×î¶à242ÐÐelseif(row_counter>=241) { TCTL4=0X08; //putdark();////////////////////////////// #ifdefPUT_01 put01();//////////////////////////// #endif row_deal(); poopctl(); //getadd(); getrowend(); getzhidao(); speedcontrol(); //speed_setblur(); //PIDCalc(); } row_counter++; } #pragmaCODE_SEGDEFAULT /***************************³¡Öжϴ¦Àí******************************************/ #pragmaCODE_SEG__NEAR_SEGNON_BANKED//³¡ÖÐ¶Ï voidinterrupt9Port1_interrupt(void) { introw_sum=0; TFLG1_C1F=1; if(flag==1) { TCTL4=0X09; flag=0; } else { for(i=48;i>row_i;i--) row_sum+=row_middle[i]; if(row_sum<10) PWMDTY01=poop_back; poop_back=poop; field_sum++; //break_sum=0; row_i=0; row_counter=0; TCTL4=0X09;//¿ªÆôÐÐÖÐ¶Ï } } #pragmaCODE_SEGDEFAULT voidrow_deal(void) { intjj; charlost_flag=0,tri_flag=0; break_sum=0; sum_m4=0; sum_m=0; part1_sum=0; part2_sum=0; fazhi=CountThreshold(); value_left=fazhi+4; value_right=fazhi; for(j=0;j<20;j++)//»ù×¼Ïß²éÕÒ { for(k=1;k<98;k++) { if(cmos[j][k]<20||cmos[j][k]>250) cmos[j][k]=(cmos[j][k-1]+cmos[j][k+1])>>1; } maxdifference=cmos[j][2]-cmos[j][0]; mindifference3=cmos[j][2]-cmos[j][0]; for(k=1;k<98;k++) { maxdifference2=cmos[j][k+2]-cmos[j][k]; maxdifference=(maxdifference>maxdifference2)? maxdifference: maxdifference2; maxnum=(maxdifference>maxdifference2)? maxnum2: k; maxnum2=maxnum; mindifference3=(mindifference3 mindifference3: maxdifference2; minnum=(mindifference3 minnum2: k; minnum2=minnum; } if(cmos[j][minnum-1]>fazhi&&cmos[j][minnum-2]>fazhi&&cmos[j][minnum-3]>fazhi&&cmos[j][maxnum+1]>fazhi&&cmos[j][maxnum+2]>fazhi&&cmos[j][maxnum+3]>fazhi) heixian=1; else heixian=0; if((maxnum-minnum>1)&&(maxnum-minnum)<9) { boundary_left=minnum2; boundary_right=maxnum2; row_middle[j]=(boundary_right+boundary_left)>>1; break; } else {//·ÀÖ¹Óкڵã»òÕßÊÇÖÜΧ»·¾³µÄÎÛȾ row_middle[j]=50; lost_flag++; } if(lost_flag==7)//ÅжÏÊÇ·ñÊdzµÕýÆ«³öÈüµÀ { field_lost=1; //PORTB=segcode[4]; return; } sum_m+=(row_middle[j]-50);//¼ÆË㳵ƫ³öÖÐÐÄÏßµÄ×ܵÄÊýÁ¿ } //================================================================================================== for(i=j+1;i<50;i++) { left_spare=boundary_left; right_spare=boundary_right; if(cmos[i][boundary_left] { k=8; while(k--&&boundary_left-2>=0) { if(cmos[i][boundary_left-1]>=value_left&&cmos[i][boundary_left-2]>=value_left) break; boundary_left--; } if(k==0) boundary_left=left_spare; elseif(boundary_left-2<0) boundary_left=0; else value_left=(cmos[i][boundary_left-2]+cmos[i][boundary_left-1]+cmos[i][boundary_left]+cmos[i][boundary_left+1])>>2; }//============================== elseif(cmos[i][boundary_left]>value_left) { k=6; while(k--&&boundary_left+2 { if(cmos[i][boundary_left+1]<=value_left&&cmos[i][boundary_left+2]<=value_left) break; bou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 卡尔 摄像头 西部 赛区 一等奖 程序