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

📄 motor.c

📁 ICETEK-LF2407-A板和教学实验箱使用说明书及开发板的所有实验例程
💻 C
字号:
#include "2407c.h"                    
#include "scancode.h"
#include "math.h"
#include "LF2407A.h"
#define T46uS		0x0d40
void gp_init(void);
void Delay(unsigned int nTime);
void interrupt time(void);
char ConvertScanToChar(unsigned char cScanCode);
void ICETEKLF2407AInit();
//unsigned int T46uS;
ioport unsigned int port8000;
ioport unsigned int port8005;
ioport unsigned int port8001;
ioport unsigned int port8002;
ioport unsigned int port8003;
ioport unsigned int port8004;
ioport unsigned int port8007;
#define CTRGR port8000
#define CTRLCDCMDR port8001
#define CTRKEY port8001
#define CTRLCDCR port8002
#define CTRCLKEY port8002
#define CTRLCDLCR  port8003
#define CTRLCDRCR port8004
#define CTRLA port8005
#define CTRLR port8007
ioport unsigned int portc;	
unsigned int uWork,nCount;
unsigned int pwm1[8]={ 0x8e,0x8c,0x8d,0x89,0x8b,0x83,0x87,0x86 };
unsigned int pwm2[8]={ 0x86,0x87,0x83,0x8b,0x89,0x8d,0x8c,0x8e };
int nAddStep,nStep,z=0;

main()
{
	unsigned int nScanCode,uWork,uWork1,i;
	unsigned char cKey;
    uWork1=(*PIVR);
	
	ICETEKLF2407AInit();
	CTRGR=0;  
    CTRGR=0x80; 
    CTRGR=0; 	// 使能CTR
    CTRLR=0;  CTRLR=0x40;  CTRLR=0x0c0;		
	uWork1=port8002;
	nStep=0; nAddStep=1; cKey=0;
	CTRLR=0x0c2;
	asm(" setc INTM");	// 关闭可屏蔽中断
	(*PIRQR0)=0;
	*EVAIMRA = 0x80;
	*EVAIFRA = 0xffff;
	*GPTCONA = 0x0100;
	*T1PR    = 0x1a00;
	*T1CNT   = 0;
	*T1CON   = 0x1340;
	*IMR=0x3;
	*IFR=0xffff;    	
	asm(" clrc INTM");         
	while ( 1 )
	{
		if ( nCount==16 )
		{
			
			nCount=0;
			nScanCode=CTRKEY;
			nScanCode&=0x0ff;
			uWork=CTRCLKEY;
			CTRLR=0x0c2;
			if ( nScanCode!=0 )
			{
				if ( nScanCode==SCANCODE_Enter )	break;
				else
				{
					cKey=ConvertScanToChar(nScanCode);
				}
				cKey=ConvertScanToChar(nScanCode);
				if ( cKey!=0 )
				{
					if ( cKey=='4' )	nAddStep=1;
					else if ( cKey=='6' )	nAddStep=-1;
				}
			}
		}
		Delay(1);
	}
}               

void Delay(unsigned int nDelay)
{
	int i,j,k=0;
	for ( i=0;i<nDelay;i++ )
		for ( j=0;j<64;j++ )
			k++;
}

void interrupt gptime1(void)
{
   uWork=(*PIVR);
   switch(uWork)
   {  
   		case 0x27:
   		{
			(*EVAIFRA)=0x80;
		CTRLR=pwm2[nStep];
		nStep+=nAddStep;
		if ( nStep<0 )	nStep=7;
		else if ( nStep>7 )	nStep=0;
		nCount++;nCount%=18;
		if(z==0)
		 {portc=0;
		  z=1;
		 }
		else
		{ z=0;
		  portc=1;
		 }
   		   	break;
   		}
   }

}
void gp_init(void)
{
   *EVAIMRA = 0x80;
   *EVAIFRA = 0xffff;
   *GPTCONA = 0x0100;
   //*T1PR    = T46uS; 
   *T1PR    = 0x1a00;
   *T1CNT   = 0;
   *T1CON   = 0x1340;
}

char ConvertScanToChar(unsigned char cScanCode)
{
	char cReturn;
	
	cReturn=0;
	switch ( cScanCode )
	{
		case SCANCODE_0: cReturn='0'; break;
		case SCANCODE_1: cReturn='1'; break;
		case SCANCODE_2: cReturn='2'; break;
		case SCANCODE_3: cReturn='3'; break;
		case SCANCODE_4: cReturn='4'; break;
		case SCANCODE_5: cReturn='5'; break;
		case SCANCODE_6: cReturn='6'; break;
		case SCANCODE_7: cReturn='7'; break;
		case SCANCODE_8: cReturn='8'; break;
		case SCANCODE_9: cReturn='9'; break;
	}
	 
	return cReturn;
}

void ICETEKLF2407AInit()
{
	asm(" setc INTM");
	(*PIRQR0)=0;
	uWork=(*WSGR);
	uWork&=0x0fe3f;
	(*WSGR)=uWork;
	*WDCR=0x6f;
	*WDKEY=0x5555;
	*WDKEY=0xaaaa;    
	*SCSR1=0x81fe;    //40m      
}

⌨️ 快捷键说明

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