📄 main.c
字号:
break;
case 2:
center1=temp1*10+temp2;
center2=temp3*100+temp4*10+temp5;
status=7;
flashnum=23;
temp1=0;
temp2=0;
dispcon[0]=0x0020;
dispcon[1]=0x0020;
dispcon[2]=0x0020;
dispcon[3]=0x0020;
dispcon[4]=0x0020;
dispcon[5]=0x0052;
dispcon[6]=0x0061;
dispcon[7]=0x0064;
dispcon[8]=0x0069;
dispcon[9]=0x0075;
dispcon[10]=0x0073;
dispcon[11]=0x0020;
dispcon[12]=0x0020;
dispcon[13]=0x0020;
dispcon[14]=0x0020;
dispcon[15]=0x0020;
dispcon[16]=0x0020;
dispcon[17]=0x0020;
dispcon[18]=0x0020;
dispcon[19]=0x0020;
dispcon[20]=0x0020;
dispcon[21]=0x0020;
dispcon[22]=0x0020;
dispcon[23]=0x0030;
dispcon[24]=0x0030;
dispcon[25]=0x0020;
dispcon[26]=0x0020;
dispcon[27]=0x0020;
dispcon[28]=0x0020;
dispcon[29]=0x0020;
dispcon[30]=0x0020;
dispcon[31]=0x0020;
break;
case 3:
if(ready)
{
status=6;
vectorlast[0]=vector[0];
vectorlast[1]=vector[1];
voice_trace();
asm("IRQ ON");
}
break;
case 4:
x=temp1*10+temp2;
y=temp3*100+temp4*10+temp5;
prex=x;
prey=y;
a=sqrt((x+15)*(x+15)+(115-y)*(115-y))/LineStep;
b=sqrt((95-x)*(95-x)+(115-y)*(115-y))/LineStep;
status=1;
flashnum=24;
voice_ini((int)x,(int)y);
temp1=0;
temp2=0;
temp3=0;
temp4=0;
temp5=0;
dispcon[0]=0x0061;
dispcon[1]=0x0078;
dispcon[2]=0x0069;
dispcon[3]=0x0073;
dispcon[4]=0x0020;
dispcon[5]=0x003a;
dispcon[6]=0x0020;
dispcon[7]=0x0020;
dispcon[8]=0x0058;
dispcon[9]=0x0020;
dispcon[10]=0x0020;
dispcon[11]=0x0020;
dispcon[12]=0x0020;
dispcon[13]=0x0059;
dispcon[14]=0x0020;
dispcon[15]=0x0020;
dispcon[16]=0x0076;
dispcon[17]=0x0061;
dispcon[18]=0x006c;
dispcon[19]=0x0075;
dispcon[20]=0x0065;
dispcon[21]=0x003a;
dispcon[22]=0x0020;
dispcon[23]=0x0020;
dispcon[26]=0x0020;
dispcon[27]=0x0020;
dispcon[31]=0x0020;
break;
case 7:
//圆心判断程序
Radius=temp1*10+temp2;
if((center1+Radius<=80)&&(center1-Radius>=0)&&(center2-Radius>=0)&&(center2+Radius<=100&&Radius>=10))
{
voice_circle(center1,center2,Radius);
num=Limit+1;
for(i=0;i<Limit;i++)
{
vertices[i*2]=center1+Radius*table[i*2];
vertices[i*2+1]=center2+Radius*table[i*2+1];
}
pointer=Limit-1;
status=5;
time=0;
asm("IRQ ON");
}
break;
}
//确认键 在1 2 3状态下转到5 6状态 保存状态 4状态转到1状态
break;
case 0x0c00:
if(status==4||status==3)
{
*P_IOA_Data=*P_IOA_Buffer|0x2000;
while(*P_IOA_Data&0x0080)//等待按键放开
{
*P_IOA_Data=*P_IOA_Buffer|0x1000;
for(i=0;i<IWait;i++)
for(j=0;j<JWait;j++)
*P_Watchdog_Clear=0x0001;
//延时
*P_IOA_Data=*P_IOA_Buffer&0xefff;
for(i=0;i<IWait;i++)
for(j=0;j<JWait;j++)
*P_Watchdog_Clear=0x0001;
//延时
b--; //调整绳长
}
x=(a*LineStep*a*LineStep-b*LineStep*b*LineStep+8800)/220;
y=115-sqrt(a*LineStep*a*LineStep-(15+x)*(15+x));
}
//右电机上拉
if(status==1)
{
num++;
vertices[pointer*2]=temp1*10+temp2;
vertices[pointer*2+1]=temp3*100+temp4*10+temp5;
temp1=0;
temp2=0;
temp3=0;
temp4=0;
temp5=0;
flashnum=24;
pointer++;
}
break;
case 0x0d00:
if(status==4||status==3)
{
*P_IOA_Data=*P_IOA_Buffer&0xdfff;
while(*P_IOA_Data&0x0080)//等待按键放开
{
*P_IOA_Data=*P_IOA_Buffer|0x1000;
for(i=0;i<IWait;i++)
for(j=0;j<JWait;j++)
*P_Watchdog_Clear=0x0001;
//延时
*P_IOA_Data=*P_IOA_Buffer&0xefff;
for(i=0;i<IWait;i++)
for(j=0;j<JWait;j++)
*P_Watchdog_Clear=0x0001;
//延时
b++; //调整绳长
}
x=(a*LineStep*a*LineStep-b*LineStep*b*LineStep+8800)/220;
y=115-sqrt(a*LineStep*a*LineStep-(15+x)*(15+x));
}
//右电机下拉
break;
case 0x0e00:
if(status==4||status==3)
{
*P_IOA_Data=*P_IOA_Buffer&0xfffd;
while(*P_IOA_Data&0x0080)//等待按键放开
{
*P_IOA_Data=*P_IOA_Buffer|0x0001;
for(i=0;i<IWait;i++)
for(j=0;j<JWait;j++)
*P_Watchdog_Clear=0x0001;
//延时
*P_IOA_Data=*P_IOA_Buffer&0xfffe;
for(i=0;i<IWait;i++)
for(j=0;j<JWait;j++)
*P_Watchdog_Clear=0x0001;
//延时
a--; //调整绳长
}
x=(a*LineStep*a*LineStep-b*LineStep*b*LineStep+8800)/220;
y=115-sqrt(a*LineStep*a*LineStep-(15+x)*(15+x));
}
//左电机上拉
break;
case 0x0f00:
if(status==4||status==3)
{
*P_IOA_Data=*P_IOA_Buffer|0x0002;
while(*P_IOA_Data&0x0080)//等待按键放开
{
*P_IOA_Data=*P_IOA_Buffer|0x0001;
for(i=0;i<IWait;i++)
for(j=0;j<JWait;j++)
*P_Watchdog_Clear=0x0001;
//延时
*P_IOA_Data=*P_IOA_Buffer&0xfffe;
for(i=0;i<IWait;i++)
for(j=0;j<JWait;j++)
*P_Watchdog_Clear=0x0001;
//延时
a++; //调整绳长
}
x=(a*LineStep*a*LineStep-b*LineStep*b*LineStep+8800)/220;
y=115-sqrt(a*LineStep*a*LineStep-(15+x)*(15+x));
}
//左电机下拉
break;
}
flag=1;
if(status==1||status==2)
{
dispcon[24]=temp1+0x0030;
dispcon[25]=temp2+0x0030;
dispcon[28]=temp3+0x0030;
dispcon[29]=temp4+0x0030;
dispcon[30]=temp5+0x0030;
}
if(status==4)
{
dispcon[20]=temp1+0x0030;
dispcon[21]=temp2+0x0030;
dispcon[27]=temp3+0x0030;
dispcon[28]=temp4+0x0030;
dispcon[29]=temp5+0x0030;
}
if(status==3)
{
reccounter=0;
for(j=0;j<8;j++)
{
*P_IOB_Data=(*P_IOB_Buffer&0xfff0)|j;
for(i=0;i<100;i++)
;
if(*P_IOA_Data&0x8000)
{
rec[j]=0;
reccounter++;
}
else
rec[j]=1;
}
if(reccounter==1||reccounter==2)
ready=1;
else
ready=0;
if(ready)
{
dispcon[4]=0x0020;
dispcon[5]=0x0020;
dispcon[6]=0x0052;
dispcon[7]=0x0065;
dispcon[8]=0x0061;
dispcon[9]=0x0064;
dispcon[10]=0x0079;
dispcon[11]=0x0020;
dispcon[12]=0x0020;
dispcon[23]=0x0020;
dispcon[24]=0x0020;
//U 0x0055 23
//D 0x0044
//L 0x004c 24
//R 0x0052
vector[0]=0;
vector[1]=0;
if(rec[0]==0)
{
vector[0]+=vectortab[0];
vector[1]+=vectortab[1];
dispcon[24]=0x0052;
}
if(rec[2]==0)
{
vector[0]+=vectortab[4];
vector[1]+=vectortab[5];
dispcon[23]=0x0044;
}
if(rec[4]==0)
{
vector[0]+=vectortab[8];
vector[1]+=vectortab[9];
dispcon[24]=0x004c;
}
if(rec[6]==0)
{
vector[0]+=vectortab[12];
vector[1]+=vectortab[13];
dispcon[23]=0x0055;
}
if(rec[1]==0)
{
vector[0]+=vectortab[2];
vector[1]+=vectortab[3];
dispcon[23]=0x0044;
dispcon[24]=0x0052;
}
if(rec[3]==0)
{
vector[0]+=vectortab[6];
vector[1]+=vectortab[7];
dispcon[23]=0x0044;
dispcon[24]=0x004c;
}
if(rec[5]==0)
{
vector[0]+=vectortab[10];
vector[1]+=vectortab[11];
dispcon[23]=0x0055;
dispcon[24]=0x004c;
}
if(rec[7]==0)
{
vector[0]+=vectortab[14];
vector[1]+=vectortab[15];
dispcon[23]=0x0055;
dispcon[24]=0x0052;
}
}
else
{
dispcon[4]=0x0053;
dispcon[5]=0x0065;
dispcon[6]=0x0061;
dispcon[7]=0x0072;
dispcon[8]=0x0063;
dispcon[9]=0x0068;
dispcon[10]=0x0069;
dispcon[11]=0x006e;
dispcon[12]=0x0067;
dispcon[23]=0x0020;
dispcon[24]=0x0020;
}
}
if(status==7)
{
dispcon[23]=temp1+0x0030;
dispcon[24]=temp2+0x0030;
}
if(status==1||status==2||status==3||status==4||status==7)
lcd_disp(dispcon,flashnum);
}
if (flag)
{
while(*P_IOA_Data&0x0080)//等待按键放开 //IOA7 做为键是否放开的依据
*P_Watchdog_Clear=0x0001;
flag=0;
}
*P_Watchdog_Clear=0x0001;
}
}
//=========================================================================================
//
//=========================================================================================
void initialIO()
{
*P_IOB_Dir=(*P_IOB_Dir&0xfff0)|0x000f;
*P_IOB_Attrib=(*P_IOB_Attrib&0xfff0)|0x000f;
*P_IOB_Data=(*P_IOB_Buffer&0xfff0)|0x0000;
//IOB0-IOB3用于探测器的控制口 同相输出 110
*P_IOA_Dir=(*P_IOA_Dir&0xf0ff)|0x0000;
*P_IOA_Attrib=(*P_IOA_Attrib&0xf0ff)|0x0000;
*P_IOA_Data=(*P_IOA_Buffer&0xf0ff)|0x0000;
//IOA8-IOA11作为键盘数据的输入口 下拉输入 000
*P_IOA_Dir=(*P_IOA_Dir&0xff7f)|0x0000;
*P_IOA_Attrib=(*P_IOA_Attrib&0xff7f)|0x0000;
*P_IOA_Data=(*P_IOA_Buffer&0xff7f)|0x0000;
//IOA7作为键盘输入 下拉输入 000
*P_IOA_Dir=(*P_IOA_Dir&0xff8f)|0x0000;
*P_IOA_Attrib=(*P_IOA_Attrib&0xff8f)|0x0070;
*P_IOA_Data=(*P_IOA_Buffer&0xff8f)|0x0070;
//IOA4-IOA6悬浮无唤醒输入 011
*P_IOA_Dir=(*P_IOA_Dir&0x8fff)|0x7000;
*P_IOA_Attrib=(*P_IOA_Attrib&0x8fff)|0x7000;
*P_IOA_Data=(*P_IOA_Buffer&0x8fff)|0x0000;
//IOA12-IOA14作为左电机控制口 同相输出 110
*P_IOA_Dir=(*P_IOA_Dir&0xfff8)|0x0007;
*P_IOA_Attrib=(*P_IOA_Attrib&0xfff8)|0x0007;
*P_IOA_Data=(*P_IOA_Buffer&0xfff8)|0x0000;
//IOA0-IOA2作为右电机控制口 同相输出 110
//从低到高依次为脉冲输出 电机方向 是否在无输入时锁定 默认正转
}
//=========================================================================================
//
//=========================================================================================
void initialStatus()
{
double temp;
prex=0;
prey=0;
x=0;
y=0;
temp=115.9741/LineStep;
a=(long)temp;
//初始长度115.9741cm
temp=149.1643/LineStep;
b=(long)temp;
//初始长度149.1643cm
//假设初始在原点0,0
num=0; //任务队列中还有多少个点
arrive=1; //当前坐标是否到达指定点
left=0; //左电机剩余驱动步数
right=0; //右电机剩余驱动步数
pointer=0;
status=4;
flashnum=20;
dispcon[0]=0x0020;
dispcon[1]=0x0020;
dispcon[2]=0x0020;
dispcon[3]=0x0020;
dispcon[4]=0x0049;
dispcon[5]=0x004e;
dispcon[6]=0x0049;
dispcon[7]=0x0054;
dispcon[8]=0x0049;
dispcon[9]=0x0041;
dispcon[10]=0x004c;
dispcon[11]=0x0020;
dispcon[12]=0x0020;
dispcon[13]=0x0020;
dispcon[14]=0x0020;
dispcon[15]=0x0020;
dispcon[16]=0x0020;
dispcon[17]=0x0020;
dispcon[18]=0x0020;
dispcon[19]=0x0020;
dispcon[20]=0x0030;
dispcon[21]=0x0030;
dispcon[22]=0x0020;
dispcon[23]=0x0020;
dispcon[24]=0x0020;
dispcon[25]=0x0020;
dispcon[26]=0x0020;
dispcon[27]=0x0030;
dispcon[28]=0x0030;
dispcon[29]=0x0030;
dispcon[30]=0x0020;
dispcon[31]=0x0020;
lcd_disp(dispcon,flashnum);
//测试用
}
//=========================================================================================
//
//=========================================================================================
void initialISR()
{
unsigned int temp;
*P_INT_Ctrl=0x0040; //打开IRQ4_1KHz中断作为处理键盘
}
// x=(a*a-b*b-11875)/250
// (15+x)^2+(100-y)^2=a^2
// (110-x)^2+(100-y)^2=a^2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -