📄 main.c
字号:
//=========================================================================================
//作 者:浙江大学 杜维 张建敏 陈勋
//题 目:悬挂运动控制系统
//备 注:
// 2005年全国大学生电子竞赛
//=========================================================================================
#include "spce061v004.h"
#include "math.h"
#include "lcd_disp.h"
#include "s480.h"
#include "voice.h"
#define P_INT_Ctrl_New (volatile unsigned int *)0x702D
#define IWait 8
#define JWait 8
#define LineStep (19.44/6400)
#define Limit 80
void initialIO(void);
void initialStatus(void);
void initialISR(void);
const double table[Limit*2]={1,0,0.996917,0.0784591,0.987688,0.156434,0.97237,0.233445,0.951057,0.309017,0.92388,0.382683,0.891007,0.45399,0.85264,0.522499,0.809017,0.587785,0.760406,0.649448,
0.707107,0.707107,0.649448,0.760406,0.587785,0.809017,0.522499,0.85264,0.453991,0.891007,0.382683,0.92388,0.309017,0.951057,0.233445,0.97237,0.156434,0.987688,0.0784591,0.996917,
2.67949e-008,1,-0.0784591,0.996917,-0.156434,0.987688,-0.233445,0.97237,-0.309017,0.951057,-0.382683,0.92388,-0.45399,0.891007,-0.522499,0.85264,-0.587785,0.809017,-0.649448,0.760406,
-0.707107,0.707107,-0.760406,0.649448,-0.809017,0.587785,-0.85264,0.522499,-0.891007,0.453991,-0.92388,0.382683,-0.951057,0.309017,-0.97237,0.233445,-0.987688,0.156435,-0.996917,0.0784591,
-1,5.35898e-008,-0.996917,-0.078459,-0.987688,-0.156434,-0.97237,-0.233445,-0.951057,-0.309017,-0.92388,-0.382683,-0.891007,-0.45399,-0.85264,-0.522499,-0.809017,-0.587785,-0.760406,-0.649448,
-0.707107,-0.707107,-0.649448,-0.760406,-0.587785,-0.809017,-0.522499,-0.85264,-0.453991,-0.891006,-0.382684,-0.92388,-0.309017,-0.951056,-0.233445,-0.97237,-0.156435,-0.987688,-0.0784592,-0.996917,
-8.03847e-008,-1,0.078459,-0.996917,0.156434,-0.987688,0.233445,-0.97237,0.309017,-0.951057,0.382683,-0.92388,0.45399,-0.891007,0.522498,-0.85264,0.587785,-0.809017,0.649448,-0.760406,
0.707107,-0.707107,0.760406,-0.649448,0.809017,-0.587785,0.85264,-0.522499,0.891006,-0.453991,0.923879,-0.382684,0.951056,-0.309017,0.97237,-0.233445,0.987688,-0.156435,0.996917,-0.0784592
}; //用于画圆的余弦正弦表
const double vectortab[16]={1,0,0.70710678,-0.70710678,0,-1,-0.70710678,-0.70710678,-1,0,-0.70710678,0.70710678,0,1,0.70710678,0.70710678};
//8个方向向量余弦正弦表
unsigned int flag=0; //用于键盘判断
double vertices[Limit*2]; //任务队列 偶数为x坐标 奇数为y坐标 容纳50个点
unsigned int pointer; //指向当前任务
unsigned int num; //任务队列中还有多少个点
unsigned int arrive; //当前坐标是否到达指定点
unsigned int left; //左电机剩余驱动步数
unsigned int leftdir; //左电机方向
unsigned int right; //右电机剩余驱动步数
unsigned int rightdir; //右电机方向
unsigned long a,b; //a为左边绳子步长 b为右边绳子步长
unsigned int center1,center2;
double x,y; //当前坐标
double prex,prey; //一次直线运动前x,y的位置
unsigned int status; //当前系统状态
//1 直线设置模式 2画圆模式 3自动跟踪模式 4手动调整模式 5直线画圆运动模式 6自动跟踪模式
unsigned int temp1,temp2,temp3,temp4,temp5; //输入值的各位暂存值
unsigned int flashnum; //闪烁值
unsigned int dispcon[]={0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,
0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,
0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,
0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020,0x0020};
//闪烁值为 24 25 28 29 30
long time;
double vector[2];
double vectorlast[2];
unsigned int Radius;
unsigned int rec[8]; //探测结果变量 (是否接收到)
unsigned int reccounter;
//=========================================================================================
//主函数
//=========================================================================================
main()
{
unsigned int i,j;
unsigned int lala;
unsigned int ready; //表示现在是否能够可以开始跟踪
long counter;
counter=0;
initial_lcd();
*P_SystemClock=0x0050;
initialIO();
initialStatus();
initialISR();
reccounter=0;
while(1)
{
if(*P_IOA_Data&0x0080)
{
switch(*P_IOA_Data&0x0f00)
{
case 0x0000:
if(status==1||status==2)
switch (flashnum)
{
case 24:
flashnum=25;
temp1=0;
break;
case 25:
flashnum=28;
temp2=0;
break;
case 28:
flashnum=29;
temp3=0;
break;
case 29:
flashnum=30;
temp4=0;
break;
case 30:
flashnum=24;
temp5=0;
break;
}
if(status==4)
switch (flashnum)
{
case 20:
flashnum=21;
temp1=0;
break;
case 21:
flashnum=27;
temp2=0;
break;
case 27:
flashnum=28;
temp3=0;
break;
case 28:
flashnum=29;
temp4=0;
break;
case 29:
flashnum=20;
temp5=0;
break;
}
if(status==7)
switch (flashnum)
{
case 23:
flashnum=24;
temp1=0;
break;
case 24:
flashnum=23;
temp2=0;
break;
}
//键0 状态0和状态1下使用
break;
case 0x0100:
if(status==1||status==2)
{
switch (flashnum)
{
case 24:
flashnum=25;
temp1=1;
break;
case 25:
flashnum=28;
temp2=1;
break;
case 28:
flashnum=24;
temp3=1;
temp4=0;
temp5=0;
break;
case 29:
flashnum=30;
temp4=1;
break;
case 30:
flashnum=24;
temp5=1;
break;
}
}
if(status==4)
switch (flashnum)
{
case 20:
flashnum=21;
temp1=1;
break;
case 21:
flashnum=27;
temp2=1;
break;
case 27:
flashnum=20;
temp3=1;
temp4=0;
temp5=0;
break;
case 28:
flashnum=29;
temp4=1;
break;
case 29:
flashnum=20;
temp5=1;
break;
}
if(status==7)
switch (flashnum)
{
case 23:
flashnum=24;
temp1=1;
break;
case 24:
flashnum=23;
temp2=1;
break;
}
//键1 状态0和状态1下使用
break;
case 0x0200:
if(status==1||status==2)
{
switch (flashnum)
{
case 24:
flashnum=25;
temp1=2;
break;
case 25:
flashnum=28;
temp2=2;
break;
case 28:
flashnum=29;
temp3=0;
break;
case 29:
flashnum=30;
temp4=2;
break;
case 30:
flashnum=24;
temp5=2;
break;
}
}
if(status==4)
switch (flashnum)
{
case 20:
flashnum=21;
temp1=2;
break;
case 21:
flashnum=27;
temp2=2;
break;
case 27:
flashnum=28;
temp3=0;
break;
case 28:
flashnum=29;
temp4=2;
break;
case 29:
flashnum=20;
temp5=2;
break;
}
if(status==7)
switch (flashnum)
{
case 23:
flashnum=24;
temp1=2;
break;
case 24:
flashnum=23;
temp2=2;
break;
}
//键2 状态0和状态1下使用
break;
case 0x0300:
if(status==1||status==2)
{
switch (flashnum)
{
case 24:
flashnum=25;
temp1=3;
break;
case 25:
flashnum=28;
temp2=3;
break;
case 28:
flashnum=29;
temp3=0;
break;
case 29:
flashnum=30;
temp4=3;
break;
case 30:
flashnum=24;
temp5=3;
break;
}
}
if(status==4)
switch (flashnum)
{
case 20:
flashnum=21;
temp1=3;
break;
case 21:
flashnum=27;
temp2=3;
break;
case 27:
flashnum=28;
temp3=0;
break;
case 28:
flashnum=29;
temp4=3;
break;
case 29:
flashnum=20;
temp5=3;
break;
}
if(status==7)
switch (flashnum)
{
case 23:
flashnum=24;
temp1=3;
break;
case 24:
flashnum=23;
temp2=3;
break;
}
//键3 状态0和状态1下使用
break;
case 0x0400:
if(status==1||status==2)
{
switch (flashnum)
{
case 24:
flashnum=25;
temp1=4;
break;
case 25:
flashnum=28;
temp2=4;
break;
case 28:
flashnum=29;
temp3=0;
break;
case 29:
flashnum=30;
temp4=4;
break;
case 30:
flashnum=24;
temp5=4;
break;
}
}
if(status==4)
switch (flashnum)
{
case 20:
flashnum=21;
temp1=4;
break;
case 21:
flashnum=27;
temp2=4;
break;
case 27:
flashnum=28;
temp3=0;
break;
case 28:
flashnum=29;
temp4=4;
break;
case 29:
flashnum=20;
temp5=4;
break;
}
if(status==7)
switch (flashnum)
{
case 23:
flashnum=24;
temp1=4;
break;
case 24:
flashnum=23;
temp2=4;
break;
}
//键4 状态0和状态1下使用
break;
case 0x0500:
if(status==1||status==2)
{
switch (flashnum)
{
case 24:
flashnum=25;
temp1=5;
break;
case 25:
flashnum=28;
temp2=5;
break;
case 28:
flashnum=29;
temp3=0;
break;
case 29:
flashnum=30;
temp4=5;
break;
case 30:
flashnum=24;
temp5=5;
break;
}
}
if(status==4)
switch (flashnum)
{
case 20:
flashnum=21;
temp1=5;
break;
case 21:
flashnum=27;
temp2=5;
break;
case 27:
flashnum=28;
temp3=0;
break;
case 28:
flashnum=29;
temp4=5;
break;
case 29:
flashnum=20;
temp5=5;
break;
}
if(status==7)
switch (flashnum)
{
case 23:
flashnum=24;
temp1=5;
break;
case 24:
flashnum=23;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -