⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 2005年全国大学生电子设计竞赛论文集
💻 C
📖 第 1 页 / 共 3 页
字号:
//=========================================================================================
//作    者:浙江大学 杜维 张建敏 陈勋
//题    目:悬挂运动控制系统
//备    注:
//         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 + -