📄 main.c
字号:
//=========================================================================================
//作 者:西安航空技术高等专科学校 李新钊 胡春雷 钱建松
//题 目:悬挂运动控制系统
//备 注:
// 2005年全国大学生电子竞赛
//=========================================================================================
#include "hardware.h"
#include "math.h"
#define HaveKey 1
#define NoKey 0
#define pi 3.1415926
#define P_Watchdog_Clear (unsigned int*)0x7012
#define P_IOA_Data (unsigned int*)0x7000
#define P_IOB_Data (unsigned int*)0x7005
void guiwei(void);
void xundian(void);
void SP_Init1_IOA08(void);
void SP_Init2_IOA08(void);
void ziyou(void);
void dingdian(void);
void huifu(void);
void jisuan(void);
void ddelay(void);
void CheckBusy(void);
void display(void);
void Write_instruction(int j);
void WriteLCDData(int k);
void Initial(void);
void Delay(void);
void Cls(void);
void Running(void);
void PlayS480(int Result);
unsigned int x0,x1,x2,y00,y11,y2;
unsigned int s=0,aa[6];
float x,y;
float xx,yy;
int stopxun;
unsigned int KeyVal;
unsigned int KeyDownTimes; //保存按键次数
unsigned int KeyFlag; //按键标识
unsigned int a1,a2,a3,b1,b2,b3;
float w1,w2;
float l1=0,l2=0;
long int wc1,wc2;
float w11,w12;
unsigned int pp0,pp1; //测试
unsigned int h0; //测试
float h1;
float h2,h3;
float zancunx,zancuny;
float v1,u1;
long int ss1,ss2;
float zong1,heng1;
char loop1,loop2;
//===============================================================================================
// 函数: main()
// 描述:主函数
//============================================================================================
int main()
{
SP_Init_IOB1();
KeyDownTimes = 0; //低四位为带下拉电阻的输入端
KeyFlag = NoKey;
Initial(); //启动程序
Cls();
Write_instruction(193);
WriteLCDData(78);//N
WriteLCDData(111);//o
WriteLCDData(119);//w
WriteLCDData(58);//:
WriteLCDData(32);//kong ge
WriteLCDData(88);//x
WriteLCDData(58);//:
WriteLCDData(48);
WriteLCDData(48);
Write_instruction(203);
WriteLCDData(89);//y
WriteLCDData(58);//:
WriteLCDData(48);
WriteLCDData(48);
//Cls();
// Write_instruction(0x82); //写地址
huifu();
while(1)
{
F_Key_Scan();
*P_Watchdog_Clear=0x0001;
while(KeyFlag == HaveKey)
{
KeyVal=F_Get_Key();
KeyFlag = NoKey;
switch(KeyVal)
{
case 0:
if(s==4) break;
aa[s]=9;s++;
WriteLCDData(57); //写数据9
PlayS480(9);
if(s==2)
Write_instruction(0x8e);
break;
case 1: if(s==4) break;
aa[s]=8;s++;
WriteLCDData(56); //写数据8
PlayS480(8);
if(s==2)
Write_instruction(0x8e);
break;
case 2: if(s==4) break;
aa[s]=7;s++;
WriteLCDData(55); //写数据7
PlayS480(7);
if(s==2)
Write_instruction(0x8e);
break;
case 3: if(s==4)
{jisuan();
Write_instruction(12);
Write_instruction(0x80);
WriteLCDData(32);
WriteLCDData(65);
WriteLCDData(105);
WriteLCDData(109);
WriteLCDData(32);
PlayS480(19);
PlayS480(18);
dingdian();
PlayS480(16);
Initial(); //启动程序
s=0;
huifu();
}
break;
case 4: if(s==4) break;
aa[s]=6;s++;
WriteLCDData(54); //写数据6
PlayS480(6);
if(s==2)
Write_instruction(0x8e);
break;
case 5: if(s==4) break;
aa[s]=5;s++;
WriteLCDData(53); //写数据5
PlayS480(5);
if(s==2)
Write_instruction(0x8e);
break;
case 6: if(s==4) break;
aa[s]=4;s++;
WriteLCDData(52); //写数据4
PlayS480(4);
if(s==2)
Write_instruction(0x8e);
break;
case 7: Write_instruction(12);
Write_instruction(0x80);
WriteLCDData(82);
WriteLCDData(101);
WriteLCDData(115);
WriteLCDData(101);
WriteLCDData(116);
Write_instruction(0x89);
WriteLCDData(48);
WriteLCDData(48);
Write_instruction(0x8e);
WriteLCDData(48);
WriteLCDData(48);
PlayS480(24);
guiwei();
PlayS480(16);
Initial(); //启动程序
s=0;
huifu();
break;
case 8: if(s==4) break;
aa[s]=3;s++;
WriteLCDData(51); //写数据3
PlayS480(3);
if(s==2)
Write_instruction(0x8e);
break;
case 9: if(s==4) break;
aa[s]=2;s++;
WriteLCDData(50); //写数据2
PlayS480(2);
if(s==2)
Write_instruction(0x8e);
break;
case 10: if(s==4) break;
aa[s]=1;s++;
WriteLCDData(49); //写数据1
PlayS480(1);
if(s==2)
Write_instruction(0x8e);
break;
case 11: Write_instruction(12);
Write_instruction(0x80);
WriteLCDData(32);
WriteLCDData(68);
WriteLCDData(101);
WriteLCDData(109);
WriteLCDData(111);
WriteLCDData(110);
WriteLCDData(115);
WriteLCDData(116);
WriteLCDData(114);
WriteLCDData(97);
WriteLCDData(116);
WriteLCDData(105);
WriteLCDData(111);
WriteLCDData(110);
WriteLCDData(32);
WriteLCDData(32);
PlayS480(14);
PlayS480(18);
ziyou();
PlayS480(16);
Initial(); //启动程序
s=0;
huifu();
break;
case 12: if(s==4) break;
aa[s]=0;s++;
WriteLCDData(48); //写数据0
PlayS480(0);
if(s==2)
Write_instruction(0x8e);
break;
case 13:
if(s==4) break; //ceshi
aa[s]=0;s++; //
Write_instruction(0x80);
WriteLCDData(32);
WriteLCDData(32);
WriteLCDData(32);
WriteLCDData(32);
WriteLCDData(32);
WriteLCDData(83);
WriteLCDData(101);
WriteLCDData(97);
WriteLCDData(114);
WriteLCDData(99);
WriteLCDData(104);
WriteLCDData(32);
WriteLCDData(32);
WriteLCDData(32);
WriteLCDData(32);
WriteLCDData(32);
PlayS480(15);
xunji();
PlayS480(16);
Initial(); //启动程序
s=0;
huifu();
if(s==2) //ceshi
Write_instruction(0x8e); //ceshi
SP_Init_IOB1();
break;
case 14: Write_instruction(0x89); //写地址
WriteLCDData(32);
WriteLCDData(32);
Write_instruction(0x8e);
WriteLCDData(32);
WriteLCDData(32);
Write_instruction(0x89);
s=0;
break;
case 15: if(s==4)
{ jisuan(); //确定开始走直线
Write_instruction(12);
Write_instruction(0x80);
WriteLCDData(67);
WriteLCDData(105);
WriteLCDData(114);
WriteLCDData(99);
WriteLCDData(108);
WriteLCDData(101);
PlayS480(17);
PlayS480(18);
zancunx=xx;
zancuny=yy;
xx=xx;
yy=yy-25;
dingdian();
PlayS480(21); //开始
PlayS480(17); //画 圆
for(h0=0;h0<500;h0++)
{
h1=pi+2*pi/500*h0;
h2=25.0*sinf(h1);
h3=25.0*cosf(h1);
*P_Watchdog_Clear=0x0001;
xx=zancunx+h2;
yy=zancuny+h3;
dingdian();
}
PlayS480(17); //画 圆
PlayS480(16); //完成
Initial(); //启动程序
s=0;
huifu();
}
break;
default: break;
}
}
}
}
//=========================================================================================
//
//=========================================================================================
void xunji(void)
{ unsigned int o;
unsigned int kou,tenci;
float zuobiaox,zuobiaoy,dianju;
SP_Init_IOB(0x0000,0xffff,0xffff,0xffff);
stopxun=0;
while(1)
{
for(tenci=0;tenci<50;tenci++)
{
kou=*P_IOB_Data;
kou&=0x0f00;
for(o=0;o<0x0100;o++)
{
*P_Watchdog_Clear=0x0001;
*P_Watchdog_Clear=0x0001;
}
switch(kou)
{
case 0x0000: xx=xx+0.1;yy=yy+0.1;dingdian();break;
case 0x0100: xx=xx;yy=yy-0.1; dingdian();break;
case 0x0200: xx=xx;yy=yy+0.1; dingdian();break;
case 0x0400: xx=xx+0.1;yy=yy; dingdian();break;
case 0x0800: xx=xx-0.1;yy=yy; dingdian();break;
case 0x0600: xx=xx+0.1;yy=yy+0.1; dingdian();break;
case 0x0500: xx=xx+0.1;yy=yy-0.1; dingdian();break;
case 0x0900: xx=xx-0.1;yy=yy-0.1; dingdian();break;
case 0x0a00: xx=xx-0.1;yy=yy+0.1; dingdian();break;
case 0x0d00: xx=xx;yy=yy-0.1;dingdian();break;
case 0x0e00: xx=xx;yy=yy+0.1;dingdian();break;
case 0x0700: xx=xx+0.1;yy=yy;dingdian();break;
case 0x0b00: xx=xx-0.1;yy=yy;dingdian();break;
default: break;
}
}
dianju=sqrtf((zuobiaox-xx)*(zuobiaox-xx)+(zuobiaoy-yy)*(zuobiaoy-yy));
if(dianju<0.4)
xundian();
zuobiaox=xx;
zuobiaoy=yy;
if(stopxun==1) break;
}
}
//=========================================================================================
//
//=========================================================================================
void xundian(void)
{
unsigned int koupan;
while(1)
{
xx=xx-1.5;
yy=yy+2;
dingdian();
koupan=*P_IOB_Data;
koupan&=0x0f00;
if(koupan!=0x0f00)
{
break;
}
xx=xx+1.5;
yy=yy-2;
dingdian();
xx=xx;
yy=yy+2.5;
dingdian();
koupan=*P_IOB_Data;
koupan&=0x0f00;
if(koupan!=0x0f00)
{
break;
}
xx=xx;
yy=yy-2.5;
dingdian();
xx=xx+1.5;
yy=yy+2;
dingdian();
koupan=*P_IOB_Data;
koupan&=0x0f00;
if(koupan!=0x0f00)
{
break;
}
xx=xx-1.5;
yy=yy-2;
dingdian();
xx=xx+2;
yy=yy+2;
dingdian();
koupan=*P_IOB_Data;
koupan&=0x0f00;
if(koupan!=0x0f00)
{
break;
}
xx=xx-2;
yy=yy-2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -