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

📄 main.c

📁 基于ARM7的S3C44BO基础测试实验:步进电机驱动实验.
💻 C
字号:
#include <stdlib.h>
#include <string.h>
#include "..\inc\option.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"

void Isr_Init(void);
void HaltUndef(void);
void HaltSwi(void);
void HaltPabort(void);
void HaltDabort(void);
void Quit(void);
void ClearScreen(void);
void SMG_SHOW(U16 value);
void DCrun0(void);
void DCrun1(void);
void DCrun2(void);
void DCrun3(void);
void DCrun4(void);
void DCrun5(void);
void DCrun6(void);
void DCrun7(void);
void STEP_motor1(void);
void STEP_motor2(void);
void STEP_motor3(void);
void STEP_motor4(void);
void STEP_motor5(void);
void STEP_motor6(void);
void STEP_motor7(void);
U16 key_read();
void Read_value(int data);
volatile U8 value,valu=16;



int data;
U16 FunctionKey=0xffff;//功能键扫描吗,0有效

U16 val[4][4]={
                 {12,13,14,15},
                 {8,9,10,11},
                 {4,5,6,7},
                 {0,1,2,3},
              };

unsigned char Scandata[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};


/****************************************************************
   My first S344B0 Application
 ***************************************************************/


void Main(void)
{
       
	rSYSCFG=CACHECFG;
       	Port_Init();
  	Uart_Init(0,115200);
	Uart_Select(0);    	 	
//	Isr_Init();
	Delay(0);  //calibrate Delay()
	Uart_Printf("\n\n\n\n ----StepMotor & DCMotor Experiment----\n");

	Uart_Printf("\n\nS3C44B0X Test Program Ver 0.00 rSYSCFG=0x%x MCLK=%d\n",rSYSCFG,MCLK);
	Uart_Printf("\n 请按实验系统键盘操作:\n");
	Uart_Printf("\n 1:步进电机低速正转    2:步进电机中速正转     3:步进电机高速正转");
	Uart_Printf("\n 5:步进电机低速反转    6:步进电机中速反转     7:步进电机高速反转");
	Uart_Printf("\n 9:直流电机低速正转    a:直流电机中速正转     b:直流电机高速正转");
	Uart_Printf("\n d:直流电机低速反转    e:直流电机中速反转     f:直流电机高速反转");
    Uart_Printf("\n 0、4、8、c:停止直流、步进电机\n\n\n");

    	while(1)
		{
	 	key_read();
		if(valu<8)
			{
			rPDATD &=0xf0; 

			if(valu==0)	 		
                        		STEP_motor7();
			if(valu==1)	 		
                        		STEP_motor1();	
			if(valu==2)	 		
                        		 STEP_motor2();
			if(valu==3)	 		
                        		 STEP_motor3();
			if(valu==4)	 		
                        		 STEP_motor7();
			if(valu==5)	 		
                        		 STEP_motor4();
			if(valu==6)	 		
                        		STEP_motor5();
 			if(valu==7)	 		
                        		STEP_motor6();
			}
		else
			{
			rPDATA &= 0x0; 

			if(valu==8)
				DCrun0();
			if(valu==9)
				DCrun1(); 
			if(valu==10)
				DCrun2();
			if(valu==11)
				DCrun3();
			if(valu==12)
				DCrun4();
			if(valu==13)
				DCrun5();
			if(valu==14)
				DCrun6();
			if(valu==15)
				DCrun7();
			}
		}

}

void DCrun0(void)
{ 
	Uart_Printf("直流电机停止运行\r");
	rPDATD &=0xf0; //gpD0,1,2,3:00 00,stop

}

void DCrun1(void)
{
	Uart_Printf("直流电机低速正转\r");	
	
	rPDATD &=0xf6; 
	rPDATD |=0x06; 	//gpd0,1,2,3:01 10,run
	Delay(70); 
	rPDATD &=0xf2; 
	rPDATD |=0x02;  	//gpd0,1,2,3:00 10,stop
	Delay(100); 		//正传

}

void DCrun2(void)
{
	Uart_Printf("直流电机中速正转\r");	
	
	rPDATD &=0xf6; 
	rPDATD |=0x06; 	//gpd0,1,2,3:01 10,run
	Delay(140); 
	rPDATD &=0xf2; 
	rPDATD |=0x02;  	//gpd0,1,2,3:00 10,stop
	Delay(100); 		//正传
}

void DCrun3(void)
{
	Uart_Printf("直流电机高速正转\r");	
	
	rPDATD &=0xf6; 
	rPDATD |=0x06; 	//gpd0,1,2,3:01 10,run
	Delay(100); 
//	rPDATD &=0xf2; 
//	rPDATD |=0x02;  	//gpd0,1,2,3:00 10,stop
//	Delay(10); 		//正传

}
void DCrun4(void)
{
	Uart_Printf("直流电机停止运行\r");
	rPDATD &=0xf0; //gpd0,1,2,3:00 00,stop

}
void DCrun5(void)
{
	Uart_Printf("直流电机低速反转\r");
	
	rPDATD &=0xf9; 
	rPDATD |=0x09; 	//gpd0,1,2,3:1001,run
	Delay(70); 
	rPDATD &=0xf8; 
	rPDATD |=0x08;  	//gpd0,1,2,3:1000,stop
	Delay(100); 		//反转

}
void DCrun6(void)
{
	Uart_Printf("直流电机中速反转\r");
	
	rPDATD &=0xf9; 
	rPDATD |=0x09; 	//gpd0,1,2,3:1001,run
	Delay(140); 
	rPDATD &=0xf8; 
	rPDATD |=0x08;  	//gpd0,1,2,3:1000,stop
	Delay(100); 		//反转
}
void DCrun7(void)
{
	Uart_Printf("直流电机高速反转\r");
	
	rPDATD &=0xf9; 
	rPDATD |=0x09; 	//gpd0,1,2,3:1001,run
	Delay(100); 
//	rPDATD &=0xf8; 
//	rPDATD |=0x08;  	//gpd0,1,2,3:1000,stop
//	Delay(10); 		//反转

}

void STEP_motor1(void)
{
			Uart_Printf("步进电机低速正转\r");
               rPDATA=0x7; 
              Delay(1000);
               rPDATA=0xb; 
              Delay(1000);
               rPDATA=0xd; 
              Delay(1000);
               rPDATA=0xe; 
              Delay(1000);
}
void STEP_motor2(void)
{
			Uart_Printf("步进电机中速正转\r");
               rPDATA=0x7; 
              Delay(500);
               rPDATA=0xb; 
              Delay(500);
               rPDATA=0xd; 
              Delay(500);
               rPDATA=0xe; 
              Delay(500);
}
void STEP_motor3(void)
{
			Uart_Printf("步进电机高速正转\r");
               rPDATA=0x7; 
              Delay(200);
               rPDATA=0xb; 
              Delay(200);
               rPDATA=0xd; 
              Delay(200);
               rPDATA=0xe; 
              Delay(200);
}
void STEP_motor4(void)
{
			Uart_Printf("步进电机低速反转\r");
               rPDATA=0xe; 
              Delay(1000);
               rPDATA=0xd; 
              Delay(1000);
               rPDATA=0xb; 
              Delay(1000);
               rPDATA=0x7; 
              Delay(1000);
}
void STEP_motor5(void)
{
			Uart_Printf("步进电机中速反转\r");
               rPDATA=0xe; 
              Delay(500);
               rPDATA=0xd; 
              Delay(500);
               rPDATA=0xb; 
              Delay(500);
               rPDATA=0x7; 
              Delay(500);
}
void STEP_motor6(void)
{
			Uart_Printf("步进电机高速反转\r");
               rPDATA=0xe; 
              Delay(200);
               rPDATA=0xd; 
              Delay(200);
               rPDATA=0xb; 
              Delay(200);
               rPDATA=0x7; 
              Delay(200);
}
void STEP_motor7(void)
{
			Uart_Printf("步进电机停止运行\r");
               rPDATA=0x0;   
}


U16 key_read()
{
	int i;
     	char gets;
   //  do{
                
	             rPDATC = rPDATC & 0xfffe;//置GPC0为低,扫描键盘第四行
	  	 rPDATC = rPDATC | 0xe;	//GPC1、2、3为高
	  	 i=3;			
	  	 Read_value(i);
	  	 rPDATC = rPDATC & 0xfffd;//置GPC1为低,扫描键盘第三行
	  	 rPDATC = rPDATC | 0xd;	//GPC0、2、3为高
	  	 i=0;
	  	 Read_value(i);
		 rPDATC = rPDATC & 0xfffb;//置GPC2为低,扫描第二行键盘
	  	 rPDATC = rPDATC | 0xb;	//GPC0、1、3为高
	  	 i=1;
	  	 Read_value(i);
	  	 rPDATC = rPDATC & 0xfff7;//置GPC3为低,扫描第一行键盘
	  	 rPDATC = rPDATC | 0x7;	//GPC0、1、2为高
	  	 i=2;
	  	 Read_value(i);
  //         gets=Uart_GetKey();

   //     }while(!gets);  //按任意键退出
                    //while(value!='0');  	

//	 Uart_Printf("\nSMG And Key Test finished!\n");
	
}

        
void Read_value(int data)
{   	 	
	
	 if((rPDATE & 0x8) == 0) 
              {
                   valu=val[data][3];
              }
	 if((rPDATE & 0x10) == 0)
              {
                   valu=val[data][2];
              }
  
         if((rPDATE & 0x40) == 0)
              {
                   valu=val[data][1];
              }
    
	 if((rPDATE & 0x80) == 0)
		   
              { 
	      valu=val[data][0];
              }  						 	
       
//               value=Scandata[valu];
//	  Uart_Printf("\r keyvalue is %c  \r",value);	//显示键值
}

void Isr_Init(void)
{
    pISR_UNDEF=(unsigned)HaltUndef;
    pISR_SWI  =(unsigned)HaltSwi;
    pISR_PABORT=(unsigned)HaltPabort;
    pISR_DABORT=(unsigned)HaltDabort;

    //rINTCON=0x1;	  // Vectored Int. IRQ enable,FIQ disable    
    rINTCON=0x5;	  // Non-vectored,IRQ enable,FIQ disable    

    rINTMOD=0x0;	  // All=IRQ mode
    rINTMSK=BIT_GLOBAL;	  // All interrupt is masked.
}




void HaltUndef(void)
{
    Uart_Printf("Undefined instruction exception!!!\n");
    while(1);
}

void HaltSwi(void)
{
    Uart_Printf("SWI exception!!!\n");
    while(1);
}

void HaltPabort(void)
{
    Uart_Printf("Pabort exception!!!\n");
    while(1);
}

void HaltDabort(void)
{
    Uart_Printf("Dabort exception!!!\n");
    while(1);
}

void Quit(void)
{
    Uart_Printf("Programe end successfully.\n");
    while(1);
}


void ClearScreen(void)
{
    int i;
    for (i=0; i<24; i++)	
               Uart_Printf("\n");
}

⌨️ 快捷键说明

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