3ms程序代码手册.docx

上传人:b****7 文档编号:25570746 上传时间:2023-06-09 格式:DOCX 页数:46 大小:22.55KB
下载 相关 举报
3ms程序代码手册.docx_第1页
第1页 / 共46页
3ms程序代码手册.docx_第2页
第2页 / 共46页
3ms程序代码手册.docx_第3页
第3页 / 共46页
3ms程序代码手册.docx_第4页
第4页 / 共46页
3ms程序代码手册.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

3ms程序代码手册.docx

《3ms程序代码手册.docx》由会员分享,可在线阅读,更多相关《3ms程序代码手册.docx(46页珍藏版)》请在冰豆网上搜索。

3ms程序代码手册.docx

3ms程序代码手册

#include/*commondefinesandmacros*/

#include/*derivativeinformation*/

#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"

//#include"sci.h"

#definesciflag1;

#defineflag1;

externucharcflag;

externinti,j,m,n;

externbytecs[40][60];

/*-----------------------*/

/*-------初始化----------*/

voidInputInit(){

TIE_C1I=0;//channel0interruptDISable

TIOS_IOS1=0;//channel0inputcapture

TCTL4_EDG1A=1;

TCTL4_EDG1B=0;

}

/*-----------------------*/

/*--中断初始化--------------------*/

voidinit_IRQ(){

INTCR_IRQE=1;//IRQselectedgesensitiveonly

INTCR_IRQEN=1;//externalIRQenable

}

/*------ADT初始化--------------*/

voidADCInit(void)

{

ATD0CTL2_ADPU=1;//ENABLEATDPOWER

ATD0CTL2_AFFC=1;//FASTCLEARFLAGALL

ATD0CTL2_ASCIE=1;

ATD0CTL3_S1C=1;//ConversionSequenceLength

ATD0CTL3_S4C=0;

ATD0CTL3_S2C=0;

ATD0CTL3_S8C=0;

//ATD0CTL3=ATD0CTL3_S1C_MASK;

//每个序列2次转换,NoFIFO,Freeze模式下继续转换

ATD0CTL4_SRES8=1;

ATD0CTL4_PRS=0;

ATD0CTL5_DJM=1;

//8位精度,1个时钟+4A/D时钟周期,ATDClock=[BusClock*0.5]/[PRS+1];PRS=5,divider=12

//AD时钟10MATDclock=[BusClock]/[PRS+1]*0.5

ATD0CTL5_CC=0;

ATD0CTL5_CA=0;

ATD0CTL5_CB=0;

ATD0DIEN=0x00;//禁止数字输入

}

#pragmaCODE_SEGNON_BANKED

#pragmaTRAP_PROC

interruptvoidInputInt(void){

TFLG1_C1F=1;

j=0;

i++;

if(i==315){

TIE_C1I=0;

INTCR_IRQEN=0;

}

#ifflag

ATD0CTL5_SCAN=0;

if(i>=35&&i<315&&(i<169&&(i-35)%5==0)){

ATD0CTL5_SCAN=1;

m=(i-35)/5;

}

if(i>=169&&i<315&&(i-169)%12==0){

ATD0CTL5_SCAN=1;

m=(i-169)/12+27;

}

#else

ATD0CTL5_SCAN=1;

#endif

}

#pragmaCODE_SEGDEFAULT

#pragmaCODE_SEGNON_BANKED

#pragmaTRAP_PROC

voidIRQ_ISR()

{

TIE_C1I=1;;

//DDRB=0XFF;

//PORTB=0XF0;

//while

(1);

i=0;

j=0;

}

#pragmaCODE_SEGDEFAULT

#pragmaCODE_SEGNON_BANKED

#pragmaTRAP_PROC

voidInt_AD0(void)

{wordAD_wData;

AD_wData=ATD0DR0;

#ifflag

cs[m][j++]=(byte)AD_wData;

#else

cs[i][j++]=(byte)AD_wData;

#endif

}

#pragmaCODE_SEGDEFAULT

#include/*commondefinesandmacros*/

#include

#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"

voidSciInit(){

SCI0BD=208;//SCIbaudrate=SCImoduleclock/(16xBR)

SCI0CR1=0x00;//normaloperation,8-bitdata,noparity

SCI0CR2=0x0C;//enabletransmitter,enablereceiver

}

/***********************************

************************************/

voidtransmit_sci(uchartransmit_data)

{

while(SCI0SR1_TC!

=1);

while(SCI0SR1_TDRE!

=1);//waituntiltransmitfinished

SCI0DRL=transmit_data;

}

/***********************************

************************************/

voidSciTransmitString(uchar*t,intn){

uinti;

for(i=0;i

while(!

SCI0SR1_TDRE);

SCI0DRL=*t;

//while(!

SCI0SR1_TC);

t++;

}

}

#include

#include

#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"

#include

#include

#include"pwm.h"

#definerow40

#defineline40

#defineBLACKMAX130

#defineWHITEMAX255

#defineyuzhi25

#defineyuzhihou18

#defineThresholdkp116

#defineThresholdkp28

#definexganrao1

#definebganrao2

#definewganrao3

#definewellroad5

#definezhidao6

#definewandao7

#definesroad8

#definesroadb9

#definesroads10

//#definewandaor9

#definexroadblacke6

externwordSpeedValue;

externwordspeedzhankongbi;

wordzspeedvalue=0;

wordsspeedvalue=0;

wordwspeedvalue=0;

wordcspeedvalue=0;

bytebc[33];

bytejiaochaxian=0;

byteruwanbiaozhi=0;

bytechazhib=0;

bytedifnum=0;

bytechazhis=40;

bytedifarray[26];

bytestangle(void);

typedefstructpoint{

intx;

inty;

}point;

intangle=0;

intlastangle=0;

intoutangle=0;

byteK;

byteKD;

uchargetlinecenter(uchari);

ucharfgetlinecenter(uchari);

uchargetlinecenter1(uchari);

bytegetstartlinecenter(ucharj);

bytegetblackline(byteoline,byteorow);

bytecopycs[40][42];

ucharbline[40];

bytethreshold=WHITEMAX;

bytethresholdmax=0;

bytethresholdmin=255;

ucharstart=0;

ucharend=0;

byteendp=0;

externbytecs[40][60];

externucharfz[row];

externbytemax[row];

externbytecmax[21];

bytexz=0;

longblackcontrol;

bytenumber=0;

//均值

byteroad;

doublejuzhi=0;

doublefangcha=0;

ulongleicha=0;

voidroadtype();

bytestartkind=0;

byteslrecognise(void);

voidanglecontrol(void);

/*******************************************/

/********赛道判断变量***********/

voidroadparameter(void);

voidsdch(pointp1,pointp2);

voidchange(pointp[6]);

doublesa;

doubleca;

doublesdpuan(void);

doubled,xp,pe;

pointceshi[7];

doublepancha[10];

bytemincenter=0;

bytemincenternum=0;

bytemaxcenterend=0;

bytemaxcenterstart=0;

bytemaxcenterstartnum=0;

bytemaxcenterendnum=0;

bytemincenterend=0;

bytemincenterstart=0;

byteroadkind;

bytelastroadkind=0;

bytesroadcount=0;

bytezhidaocount=0;

bytewandaocount=0;

bytenumcenter=0;

bytebnum=0;

byteroadturnl=0;

/****************************************/

//直线拟合变量

pointx[10];

voidzhixian(void);

voidlinenihe(void);

intfun(intt,intn);

voidquqi(int*a,int*b,int*c,int*d);

intf0[10];

intf1[10];

intf2[10];

doubleh=0;

doublech[4];

doublea=0;

doubleb=0;

doublepc=0;

//inti=0;

//intj=0;

intA,B,C,D;

intF1=0;

intF2=0;

floatpianjiao=0;

floatlpianjiao=0;

doubleq=0;

intsroadcontrol(void);

/********************************************/

ucharCountThreshold(inti)

{

unsignedintmax1=BLACKMAX,max2=BLACKMAX,min1=WHITEMAX,min2=WHITEMAX;

intj;

for(j=3;j<40;j++){

//if((cs[i][j]WHITEMAX))

//continue;

if(cs[i][j]>max1){

max2=max1;

max1=cs[i][j];

}elseif(cs[i][j]>max2){

max2=cs[i][j];

}elseif(cs[i][j]

min2=min1;

min1=cs[i][j];

}elseif(cs[i][j]

min2=cs[i][j];

}

//死循环标志

//PORTB_BIT0=0;

}

if(i>20)

return((uchar)((max2+min2)/2-(uchar)(Thresholdkp1*(max2-min2)/100)));

else

return((uchar)((max2+min2)/2-(uchar)(Thresholdkp2*(max2-min2)/100)));

//return120;

}

/**************************************************************************/

voidvideo(){

//////////////////////////////////////////////////////////

////

//黑线提取与虑波//

////

////

//////////////////////////////////////////////////////////

uchari=0;

ucharu=0;

byteonum=0;

max[end]=0;

start=0;

end=0;

for(i=0;i

max[i]=0;

}

for(i=row-1;i>=19;i=i-5){

fz[i]=CountThreshold(i);

}

thresholdmax=0;

thresholdmin=255;

for(i=row-1;i>=19;i=i-5){

if(thresholdmax

thresholdmax=fz[i];

}

for(i=row-1;i>=19;i=i-5){

if(thresholdmin>fz[i])

thresholdmin=fz[i];

}

threshold=(byte)((fz[39]+fz[34]+fz[29]+fz[24]+fz[19]-thresholdmin-thresholdmax)/3);

/******************************************************************/

/*for(i=row-1;i>=20;i--)

for(j=4;j

if(cs[i][j]

copycs[i][j]=0;

else

copycs[i][j]=255;*/

/********************************************************************/

for(i=row-1;i>=19;i--){

max[i]=getlinecenter(i);

if(max[i]>=39||max[i]<5)

max[i]=0;

}

for(i=row-1;i>0;i--){

if(max[i]!

=0){

start=i;

break;

}

}

for(i=19;i

if(max[i]!

=0){

end=i;

break;

}

/**********************************************/

if(start>=19)

if(getstartlinecenter(start)!

=xganrao)

for(i=start-1;i>=19;i--){

if(getstartlinecenter(i)==xganrao)

max[i]=max[i+1];

//死循环标志

//PORTB_BIT1=0;

}else

for(i=start-6;i<=start;i++){

if(getstartlinecenter(i)==xganrao)

max[i]=max[i-1];

//sixunhuan

//PORTB_BIT2=0;

}

if(end<=start){

if(fabs(max[end]-fgetlinecenter(end))>4){

for(i=end;i

if(fabs(max[i]-fgetlinecenter(i))<4){

xz=max[i];

u=i;

break;

}

for(i=end;i

if(fabs(fgetlinecenter(i)-max[i])>3){

if(fabs(fgetlinecenter(i)-xz)

max[i]=fgetlinecenter(i);

}

}

//while

(1);

}

elseif(fabs(max[start]-fgetlinecenter(start))>4){

for(i=end+1;i<=start;i++){

if(fabs(fgetlinecenter(i)-max[i-1])

max[i]=fgetlinecenter(i);

}

}

elseif(fabs(max[end]-fgetlinecenter(end))<4&&fabs(max[start]-fgetlinecenter(start))<4){

for(i=end+1;i

if(fabs(max[i]-max[i+1])>4||fabs(max[i]-max[i-1])>4){

if(fabs(fgetlinecenter(i)-max[end])

max[i]=fgetlinecenter(i);

}

}

}

/////////////////////////////////////////////////////////

if(start>=end)

for(i=start-1;i>end+1;i--){

if(fabs(max[i]-max[i+1])>4&&fabs(max[i]-max[i-1])>4)

max[i]=max[i-1];

//SIXUNHUAN

//PORTB_BIT3=0;

}

end=0;

for(i=19;i

if(max[i]!

=0){

end=i;

break;

}

/*for(i=end;i>0;i--){

max[i]=getblackline(max[i+1],i);

}*/

if(end!

=0){

onum=0;

for(i=end;i>0;i--){

max[i]=getblackline(max[i+1],i);

if(max[i]!

=0)

onum=0;

if(max[i]==0&&onum<3){

max[i]=max[i+1];

cs[i][max[i]]=cs[i+1][max[i+1]];

onum++;

/*if(onum==2){

PORTB=0XF0;

while

(1);

}*/

}

if(onum==3){

break;

}

}

if(max[1]!

=0){

max[0]=getblackline(max[1],0);

}

}

for(i=0;i

if(max[i]!

=0){

end=i;

break;

}

}

///发数据

//transmit_sci(222);

//SciTransmitString(max,40);

//transmit_sci(end);

/*********算前20中心平均值*************************/

for(i=row-1;i>20;i--){

blackcontrol=max[i]+blackcontrol;

if(max[i]!

=0)

number++;

}

blackcontrol=(long)(blackcontrol/number);

//while

(1);

//////////////////////////////////////////////////////////

////

//赛道判断//

////

////

//////////////////////////////////////////////////////////

roadparameter();

/////////清标志

roadkind=0;

/**************s弯判断******************/

mincenter=0;

mincenternum=0;

maxcenterend=0;

maxcenterstart=0;

maxcenterstartnum=0;

maxcenterendnum=0;

mincenterend=0;

m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1