danpianji.c

来自「2005年全国大学生电子设计竞赛论文集」· C语言 代码 · 共 815 行 · 第 1/2 页

C
815
字号
//////////////////////////////////////////
/////////竞赛程序/////////////////////////////////
//////////lixinzhao////////////////////////////////
//////////////////////////////////////////
#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(); 
       

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?