📄 systeminitial.h
字号:
}
black_num_cmos[line_i_10]++;
if(begin_flag==2)
{
begin_flag=3;
index_cmos_end_temp=row_i-1;
break;
}
}
else if(begin_flag==1)
{
begin_flag=2;
index_cmos_end_temp=row_i-1;
}
}
if(begin_flag==1)index_cmos_end_temp=row_i_end;
index_cmos[line_i_10]=(index_cmos_begin_temp+index_cmos_end_temp)/2;
if((begin_flag==1 || begin_flag==2) && black_num_cmos[line_i_10]<=6)
{
index_cmos_flag[line_i_10]=1;
}
else if(begin_flag==3)index_cmos_flag[line_i_10]=2;
else index_cmos_flag[line_i_10]=0;
}
else
{
for(row_i=row_i_end;row_i>=row_i_begin;row_i--)
{
if(ad_video[line_i_10][row_i]<31)
{
#ifdef sci_cmos_select
if(begin_flag==1)
ad_video[line_i_10][row_i]=0;
#endif
if((ad_video[line_i_10][row_i+1]>31 || row_i==row_i_end) && begin_flag==0)
{
#ifdef sci_cmos_select
ad_video[line_i_10][row_i]=0;
#endif
index_cmos_begin_temp=row_i;
begin_flag=1;
}
black_num_cmos[line_i_10]++;
if(begin_flag==2)
{
begin_flag=3;
index_cmos_end_temp=row_i+1;
break;
}
}
else if(begin_flag==1)
{
begin_flag=2;
index_cmos_end_temp=row_i+1;
}
}
if(begin_flag==1)index_cmos_end_temp=row_i_begin;
index_cmos[line_i_10]=(index_cmos_begin_temp+index_cmos_end_temp)/2;
if((begin_flag==1 || begin_flag==2) && black_num_cmos[line_i_10]<=6)
{
index_cmos_flag[line_i_10]=1;
}
else if(begin_flag==3)index_cmos_flag[line_i_10]=2;
else index_cmos_flag[line_i_10]=0;
}
if(index_cmos_flag[line_i_10]==1/* && black_num_cmos[line_i]>=1*/) //??
{
if(right_line_cmos==0 /*|| line_i_10==LINE_num/10*/)
right_line_cmos++;
else if(abs(index_cmos[line_i_10]-index_cmos[line_i_10+1])<=4 &&
black_num_cmos[line_i_10]<=black_num_cmos[line_i_10+1]+4 && black_num_cmos[line_i_10]<=6)
right_line_cmos++;
else right_line_cmos=0;
}
else right_line_cmos=0;
if(right_line_cmos>2)
{
flag_cmos_visible=1;
begin_line=line_i_10+right_line_cmos-1;
index_cmos_begin_line_last=index_cmos[begin_line];
break;
}
}
}
direct_flag=0;
if(flag_cmos_visible==1)
{
//begin_line_flag=0;
error_line_cmos=0;line_num_duan=0;
//if(infrared_value7>=speed_v_min)line_min=0;
//else line_min=6;
//line_min=1.5f*abs(index_cmos_last-index_center);
/* if(infrared_value7>190)line_min=0;
else if(infrared_value7>180)line_min=10;
else if(infrared_value7>170)line_min=20;
else if(infrared_value7>160)line_min=30;
else if(infrared_value7>150)line_min=40;
else if(infrared_value7>140)line_min=40;
else if(infrared_value7>130)line_min=50;
else if(infrared_value7>120)line_min=50;
else if(infrared_value7>110)line_min=60;
else if(infrared_value7>100)line_min=60;
*/
for(line_i--;line_i>=0;line_i--)
{
if(line_i%10==0)
{
line_i_10=line_i/10;
begin_flag=0;
black_num_cmos[line_i_10]=0;
for(last_i=1;last_i<=3;last_i++)
if(index_cmos_flag[line_i_10+last_i]==1)
{
if(index_cmos[line_i_10+last_i]-10<0)row_i_begin=0;
else row_i_begin=index_cmos[line_i_10+last_i]-10;
if(index_cmos[line_i_10+last_i]+10>ROW_num-1)row_i_end=ROW_num-1;
else row_i_end=index_cmos[line_i_10+last_i]+10;
break;
}
if(index_cmos_last<=index_center)
{
for(row_i=row_i_begin;row_i<=row_i_end;row_i++)
{
if(ad_video[line_i_10][row_i]<=31)
{
#ifdef sci_cmos_select
if(begin_flag==1)
ad_video[line_i_10][row_i]=0;
#endif
if((ad_video[line_i_10][row_i-1]>31 || row_i==row_i_begin) && begin_flag==0)
{
#ifdef sci_cmos_select
ad_video[line_i_10][row_i]=0;
#endif
index_cmos_begin_temp=row_i;
begin_flag=1;
}
black_num_cmos[line_i_10]++;
if(begin_flag==2)
{
begin_flag=3;
break;
}
}
else if(begin_flag==1)
{
begin_flag=2;
index_cmos_end_temp=row_i-1;
}
}
if(begin_flag==1)index_cmos_end_temp=row_i_end;
if((begin_flag==1 || begin_flag==2) && black_num_cmos[line_i_10]<=10)
{
index_cmos[line_i_10]=(index_cmos_begin_temp+index_cmos_end_temp)/2;
index_cmos_flag[line_i_10]=1;
}
else index_cmos_flag[line_i_10]=0;
}
else
{
for(row_i=row_i_end;row_i>=row_i_begin;row_i--)
{
if(ad_video[line_i_10][row_i]<=31)
{
#ifdef sci_cmos_select
if(begin_flag==1)
ad_video[line_i_10][row_i]=0;
#endif
if((ad_video[line_i_10][row_i+1]>31 || row_i==row_i_end) && begin_flag==0)
{
#ifdef sci_cmos_select
ad_video[line_i_10][row_i]=0;
#endif
index_cmos_begin_temp=row_i;
begin_flag=1;
}
black_num_cmos[line_i_10]++;
if(begin_flag==2)
{
begin_flag=3;
break;
}
}
else if(begin_flag==1)
{
begin_flag=2;
index_cmos_end_temp=row_i+1;
}
}
if(begin_flag==1)index_cmos_end_temp=row_i_begin;
if((begin_flag==1 || begin_flag==2) && black_num_cmos[line_i_10]<=10)
{
index_cmos[line_i_10]=(index_cmos_begin_temp+index_cmos_end_temp)/2;
index_cmos_flag[line_i_10]=1;
}
else index_cmos_flag[line_i_10]=0;
}
if(index_cmos_flag[line_i_10]==0 ||
abs(index_cmos[line_i_10]-index_cmos[line_i_10+1+error_line_cmos])>2+(black_num_cmos[line_i_10]+black_num_cmos[line_i_10+1+error_line_cmos])/2 ||//5+error_line_cmos/*8*/ ||
//(abs(index_cmos[line_i_10]-index_cmos[begin_line])>20 && abs(index_cmos[line_i_10]-index_center)>10) || //??
black_num_cmos[line_i_10]>(black_num_cmos[line_i_10+1+error_line_cmos]+5+error_line_cmos)/*8*/ ||
((index_cmos[line_i_10]-index_cmos[line_i_10+error_line_cmos+1])>0 && direct_flag==1) ||
((index_cmos[line_i_10]-index_cmos[line_i_10+error_line_cmos+1])<0 && direct_flag==2) //||
//black_num_cmos[line_i_10]>black_num_cmos[begin_line]+5
)
{
index_cmos_flag[line_i_10]=0;
if((abs(index_cmos[line_i_10+1+error_line_cmos]-index_center)>12 && error_line_cmos>=0) || error_line_cmos>=2) /*2*/
{
error_line_cmos++;
break;
}
else error_line_cmos++;
}
else
{
error_line_cmos=0;
}
if(index_cmos_flag[line_i_10]!=0 && index_cmos_flag[line_i_10+1]!=0)
{
if(index_cmos[line_i_10]-index_cmos[line_i_10+1]>0)direct_flag=2;
else if(index_cmos[line_i_10]-index_cmos[line_i_10+1]<0)direct_flag=1;
else direct_flag=0;
}
}
}
line_i_10+=error_line_cmos;
//if(line_i<18)line_i+=infrared_value7/10;
//if(line_i>begin_line)line_i=begin_line;
last_line=line_i_10;
for(line_ii=LINE_num/10;line_ii>=begin_line;line_ii--)
{
if(index_cmos_flag[line_ii]==1 || index_cmos_flag[line_ii]==2)
{
begin_line_near=line_ii;
break;
}
}
//if((abs(index_cmos[line_i_10]-index_cmos[begin_line_near])>20 && abs(index_cmos[line_i_10]-index_center)>10)) //??
if(((float)abs(index_cmos[line_i_10]-index_cmos[begin_line_near])/(float)abs(begin_line_near-line_i_10))>1.5f && abs(index_cmos[last_line]-index_cmos[begin_line])>8 && begin_line<14) //??
{
flag_cmos_visible=2;
}
//if(line_i==-1)
//{
// index_cmos_last=index_cmos[0];
////PORTB=~0X00;
//}
//else
//{
if(flag_cmos_visible==1)
{
if((begin_line_flag==0/* && (begin_line-last_line)>3*/) || begin_line-last_line>7)
{
index_cmos_last=index_cmos[line_i_10];
begin_line_flag=0;
}
//PORTB=~index_cmos_last;
/*
k_counter=0;k_angle=0;
for(ave_i=LINE_num/10;ave_i>10;ave_i--)
if(index_cmos_flag[ave_i]!=0)
{
k_angle+=abs(index_cmos[ave_i]-index_center);
k_counter++;
}
k_angle+=abs(index_cmos[begin_line]-index_center);
k_counter++;
k_angle=k_angle/k_counter;
if(k_angle<9)
{
if(infrared_value7>130)
k_angle=2;
else if(infrared_value7>125)
k_angle=3;
else if(infrared_value7>120)
k_angle=4;
else if(infrared_value7>115)
k_angle=5;
else if(infrared_value7>110)
k_angle=6;
}
if(k_angle-k_angle_last>0)k_angle=k_angle_last+1;
else if(k_angle-k_angle_last<0)k_angle=k_angle_last-1;
k_angle_last=k_angle;
*/
//k_angle=(int)(33.0f-0.20f*(infrared_value7+speed_v)/2.0f);
ave_temp=(infrared_value7+speed_v)/20;
if((infrared_value7+speed_v)/20>21)ave_temp=21;
else if((infrared_value7+speed_v)/20<1)ave_temp=1;
k_angle=(int)ave[ave_temp-1];
//k_angle=2000.0f/((infrared_value7+speed_v)/2.0f)-7;
/*for(front_i=0;front_i<3;front_i++)
{
if(index_cmos_flag[11+front_i]==1)
break;
}
if(abs(index_cmos[last_line]-index_cmos[begin_line])/(begin_line-last_line)>0.8f && abs(index_cmos[last_line]-index_cmos[11+front_i])/(11+front_i-last_line)>1.5f && (index_cmos[last_line]-index_center)*(index_cmos[11+front_i]-index_center)<0)
{
k_angle=3;PORTB=0X00;
}
else PORTB=0XFF;
*/
if(k_angle<3)k_angle=3;
else if(k_angle>21)k_angle=21;
front_sum=0;front_flag=0;
for(front_i=last_line;front_i<k_angle;front_i++)
{
if(index_cmos_flag[front_i]==1)
{
front_sum+=index_cmos[front_i];
front_flag++;
}
}
front_sum+=index_cmos[last_line];
front_flag+=1;
//front_sum+=index_cmos[begin_line];
//front_flag++;
//index_cmos_last_duoji=index_cmos[last_line+3];
index_cmos_last=front_sum/front_flag;
}
else
{
if((index_cmos_last-index_cmos[begin_line])>0)
{
index_cmos_last=index_max;
//PORTB=0X00;
begin_line_flag=1;
}
else if((index_cmos_last-index_cmos[begin_line])<0)
{
index_cmos_last=index_min;
//PORTB=0X00;
begin_line_flag=2;
}
}
//}
//PORTB=~0X00;
//if(abs(index_cmos_last-index_cmos_last_last)>(2+infrared_value7/15))index_cmos_last=index_cmos_last_last;//+4;
//index_cmos_last_last=index_cmos_last;
/*if(begin_line_flag==1)
{
index_cmos_last=index_cmos[begin_line];
if(begin_line>18 && index_cmos_last>=index_max-5)
index_cmos_last=index_cmos_last_last;
else begin_line_flag=0;
}
else if(begin_line_flag==2)
{
index_cmos_last=index_cmos[begin_line];
if(begin_line>18 && index_cmos_last<=index_min+5)
index_cmos_last=index_cmos_last_last;
else begin_line_flag=0;
}*/
}
else
{
////PORTB=~0Xff;
if(index_cmos_last>index_center)
{
index_cmos_last=index_max;
//PORTB=0X00;
begin_line_flag=1;
}
else if(index_cmos_last<index_center)
{
index_cmos_last=index_min;
//PORTB=0X00;
begin_line_flag=2;
}
}
//PWMDTY01_temp=3000-(int)(9*(index_to_angle[index_cmos_last]*(1+(26-last_line)*0.5f/26.0f)+0.8f*(index_cmos[last_line]-index_cmos[begin_line])));//1.0f*((index_cmos[last_line]-index_center)*2-(index_cmos[begin_line]-index_center))//*(0.5+infrared_value7/58.0f/2.0f);//*(1.0f+cmos_k));
//if(abs(index_cmos_last-index_center)>10)
// PWMDTY01_temp=3000-(int)(9*(index_to_angle[index_cmos_last]*(1+(26-last_line)*0.5f/26.0f)+0.5f*(index_cmos[last_line]-index_cmos[begin_line])));//1.0f*((index_cmos[last_line]-index_center)*2-(index_cmos[begin_line]-index_center))//*(0.5+infrared_value7/58.0f/2.0f);//*(1.0f+cmos_k));
if(counter>6)
{
counter=0;
index_cmos_last_last=index_cmos_last;
}
if(begin_line_flag==2)
PWMDTY01_temp=3350;/**(1+(26-last_line)*1.0f/26.0f)));//*///+2.6f*((float)(index_cmos[last_line]-index_cmos[begin_line])/(float)(begin_line-last_line))));//1.0f*((index_cmos[last_line]-index_center)*2-(index_cmos[begin_line]-index_center))//*(0.5+infrared_value7/58.0f/2.0f);//*(1.0f+cmos_k));
else if(begin_line_flag==1)
PWMDTY01_temp=2650;/**(1+(26-last_line)*1.0f/26.0f)));//*///+2.6f*((float)(index_cmos[last_line]-index_cmos[begin_line])/(float)(begin_line-last_line))));//1.0f*((index_cmos[last_line]-index_center)*2-(index_cmos[begin_line]-index_center))//*(0.5+infrared_value7/58.0f/2.0f);//*(1.0f+cmos_k));
else
{
if((abs(index_cmos[(last_line+begin_line)/2]-(index_cmos[begin_line]+index_cmos[last_line])/2)<2) && abs(index_cmos[last_line]-index_cmos[begin_line])>3 && abs(index_cmos[last_line]-index_cmos[begin_line])<15
&& (abs(index_cmos[(2*last_line+begin_line)/3]-(index_cmos[begin_line]+2*index_cmos[last_line])/3)<2)
&& (abs(index_cmos[(last_line+2*begin_line)/3]-(2*index_cmos[begin_line]+index_cmos[last_line])/3)<2)
&& (abs(index_cmos[(3*last_line+begin_line)/4]-(index_cmos[begin_line]+3*index_cmos[last_line])/4)<2)
&& (abs(index_cmos[(last_line+3*begin_line)/4]-(3*index_cmos[begin_line]+index_cmos[last_line])/4)<2))
{
k=2.5f;//8+abs(index_cmos[last_line]-index_cmos[begin_line]);
//PORTB=0X00;
//PWMDTY01_temp=3000-(int)(0.41*17*(index_to_angle[index_cmos_last])+3*(index_cmos_last-index_cmos[begin_line]));/**(1+(26-last_line)*1.0f/26.0f)));//*///+2.6f*((float)(index_cmos[last_line]-index_cmos[begin_line])/(float)(begin_line-last_line))));//1.0f*((index_cmos[last_line]-index_center)*2-(index_cmos[begin_line]-index_center))//*(0.5+infrared_value7/58.0f/2.0f);//*(1.0f+cmos_k));
}
//else if(abs(index_cmos[last_line]-index_cmos[begin_line])/(begin_line-last_line)>1 && (index_cmos[last_line]-index_center)*(index_cmos[begin_line]-index_center)<0)
else
{
k=0.0f;//PORTB=0XFF;
//PWMDTY01_temp=3000-(int)(0.41*17*(index_to_angle[index_cmos_last])+0*(index_cmos_last-index_cmos[begin_line]));/**(1+(26-last_line)*1.0f/26.0f)));//*///+2.6f*((float)(index_cmos[last_line]-index_cmos[begin_line])/(float)(begin_line-last_line))));//1.0f*((index_cmos[last_line]-index_center)*2-(index_cmos[begin_line]-index_center))//*(0.5+infrared_value7/58.0f/2.0f);//*(1.0f+cmos_k));
}
//PWMDTY01_temp=3000+(int)((index_to_angle[index_cmos_last])/*+k*(index_cmos_last-index_cmos[begin_line])*/);/**(0.7+(last_line)*1.0f/26.0f)));//*///+2.6f*((float)(index_cmos[last_line]-index_cmos[begin_line])/(float)(begin_line-last_line))));//1.0f*((index_cmos[last_line]-index_center)*2-(index_cmos[begin_line]-index_center))//*(0.5+infrared_value7/58.0f/2.0f);//*(1.0f+cmos_k));
//if(abs(index_cmos_last-index_center)<10)
//if(last_line<10)
//PWMDTY01_temp=3000-(int)(index_to_angle[index_cmos_last]*(0.7f+(last_line)*0.7f/21.0f)+k*3.0f*(index_cmos_last-index_cmos[begin_line]));
//else PWMDTY01_temp=3000-(int)(index_to_angle[index_cmos_last]*(0.5f+(last_line)*2.0f/21.0f)+k*3.0f*(index_cmos_last-index_cmos[begin_line]));
//if(last_line<=15)
PWMDTY01_temp=3000-(int)(240.0f/14.0f*(index_cmos_last-index_center)*(0.70f+(last_line)*0.40f/21.0f)+k*3.0f*(index_cmos_last-index_cmos[begin_line])/*+k*(index_cmos_last-index_cmos[begin_line])*/);/**(1+(26-last_line)*1.0f/26.0f)));//*///+2.6f*((float)(index_cmos[last_line]-index_cmos[begin_line])/(float)(begin_line-last_line))));//1.0f*((index_cmos[last_line]-index_center)*2-(index_cmos[begin_line]-index_center))//*(0.5+infrared_value7/58.0f/2.0f);//*(1.0f+cmos_k));
//else
// PWMDTY01_temp=3000-(int)(250.0f/14.0f*(index_cmos_last-index_center)*(0.75f+(last_line)*2.40f/21.0f)+k*3.0f*(index_cmos_last-index_cmos[begin_line])/*+k*(index_cmos_last-index_cmos[begin_line])*/);/**(1+(26-last_line)*1.0f/26.0f)));//*///+2.6f*((float)(index_cmos[last_line]-index_cmos[begin_line])/(float)(begin_line-last_line))));//1.0f*((index_cmos[last_line]-index_center)*2-(index_cmos[begin_line]-index_center))//*(0.5+infrared_value7/58.0f/2.0f);//*(1.0f+cmos_k));
////PWMDTY01_temp=3000-(int)(220.0f/14.0f*(index_cmos_last-index_center)*0.6f+k*3.0f*(index_cmos_last-index_cmos[begin_line])/*+k*(index_cmos_last-index_cmos[begin_line])*/);/**(1+(26-last_line)*1.0f/26.0f)));//*///+2.6f*((float)(index_cmos[last_line]-index_cmos[begin_line])/(float)(begin_line-last_line))));//1.0f*((index_cmos[last_line]-index_center)*2-(index_cmos[begin_line]-index_center))//*(0.5+infrared_value7/58.0f/2.0f);//*(1.0f+cmos_k));
//else
//PWMDTY01_temp=3000-(int)(240.0f/14.0f*(index_cmos_last-index_center)+k*3.0f*(index_cmos_last-index_cmos[begin_line])/*+k*(index_cmos_last-index_cmos[begin_line])*/);/**(1+(26-last_line)*1.0f/26.0f)));//*///+2.6f*((float)(index_cmos[last_line]-index_cmos[begin_line])/(float)(begin_line-last_line))));//1.0f*((index_cmos[last_line]-index_center)*2-(index_cmos[begin_line]-index_center))//*(0.5+infrared_value7/58.0f/2.0f);//*(1.0f+cmos_k));
}
//else PWMDTY01_temp=3000-(int)(9*(index_to_angle[index_cmos_last]));
if(PWMDTY01_temp<2750)PWMDTY01_temp+=10;
else if(PWMDTY01_temp>3250)PWMDTY01_temp-=10;
PWMDTY01=PWMDTY01_temp-shift_angle;
// PWMDTY01=3000+shift_angle;
}
else if(line_counter>LINE_invalid_num) //LINE_invalid_num为场前消隐行数,加1防错
{
row_num_temp=0;
line_counter_valid=line_counter-LINE_invalid_num-1;
if(line_counter_valid%10==0)
{
MDC_u(6);
//MCCTL=(MCCTL_MCZI_MASK|MCCTL_MCEN_MASK); //开定时器,中断使能
//MCCNT=7.1f*BUS_CLK; //write to MCCNT会清中断标志
line_counter_temp=line_counter_valid/10;
}
else if(line_counter_valid<60)
{
MDC_u(6);
line_counter_temp=LINE_num/10+line_counter_valid;
}
#ifdef ccd_time_test
PORTB=100-MCCNT/24;
mcnt=MCCNT;
MDC_u(100);
ATD1CTL2&=~ATD1CTL2_ASCIE_MASK; //开启ATD中断使能
ATD0CTL2 |= ATD0CTL2_ASCIE_MASK;
ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK);
#endif
}
EnableInterrupts;
}
void interrupt ATD0_ISR(void) //对摄像头采集数据的点的处理,每次转换一个点
{
DisableInterrupts;
if(row_num_temp>=ROW_num)
{
ATD0CTL2&=~ATD0CTL2_ASCIE_MASK;
ATD1CTL2|= ATD1CTL2_ASCIE_MASK; //开启ATD1中断使能
ATD1CTL5 = (ATD1CTL5_DJM_MASK|ATD1CTL5_SCAN_MASK|ATD1CTL5_CC_MASK|ATD1CTL5_CB_MASK|ATD1CTL5_CA_MASK);//|ATD1CTL5_MULT_MASK);//|ATD1CTL5_CB_MASK); // 右对齐,连续多路转换
return;
}
ad_video[line_counter_temp][row_num_temp++]=ATD0DR0;
EnableInterrupts;
}
void interrupt ATD1_ISR(void) //对测速传感器采集的模拟量进行转换
{
DisableInterrupts;
infrared_value7 = ATD1DR0; //读取AD1转换口通道7的数据,该通道为速度传感器的模拟量
#ifdef sci_infrared_select
print_uchar(infrared_value7);
print_string("\r\n");
#endif
ATD1CTL2&=~ATD1CTL2_ASCIE_MASK;
EnableInterrupts;
}
void interrupt MDC_ISR(void) //定时器,定时结束后进入该中断,开启ATD0、1通道,进行转换
{
DisableInterrupts;
MCFLG_MCZF=1; //清标志位
MCCTL=0x00;
#ifndef ccd_time_test
ATD1CTL2&=~ATD1CTL2_ASCIE_MASK; //开启ATD中断使能
ATD0CTL2 |= ATD0CTL2_ASCIE_MASK;
ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK);
#endif
EnableInterrupts;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -