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

📄 main.c

📁 2005年全国大学生电子设计竞赛论文集
💻 C
📖 第 1 页 / 共 2 页
字号:
//=========================================================================================
//作    者:西安航空技术高等专科学校 李新钊 胡春雷 钱建松
//题    目:悬挂运动控制系统
//备    注:
//         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 + -