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

📄 motor.c

📁 在CCS环境下基于TMS320C5416开发的小键盘输入数字并在LED显示器上显示出来的课程设计。
💻 C
字号:
#include "scancode.h"

#define	TIM		*(int *)0x24
#define	PRD     *(int *)0x25
#define	TCR		*(int *)0x26
#define	IMR		*(int *)0x0
#define	IFR		*(int *)0x1		
#define	PMST	*(int *)0x1d	
#define SPSA0 *(unsigned int *)0x38
#define SPSD0 *(unsigned int *)0x39
#define SPSA1 *(unsigned int *)0x48
#define SPSD1 *(unsigned int *)0x49
#define REGISTERCLKMD (*(unsigned int *)0x58)

#define T46uS		0x0200

ioport unsigned char port8000;	
ioport unsigned char port8001;	
ioport unsigned char port8002;	
ioport unsigned char port8007;	

void Delay(unsigned int nTime);
void interrupt time(void);
char ConvertScanToChar(unsigned char cScanCode);

ioport unsigned char port8001;	
unsigned int uWork,nCount,uN,nCount1,nDir;

main()
{
	unsigned int nSpeed,nScanCode,uWork1,uN1;
	unsigned char cKey,cOldKey;

	REGISTERCLKMD=0;
	port8000=0;
	port8000=0x80;
	port8000=1;
	port8007=0;			// 关闭东西方向的交通灯
	port8007=0x40;	// 关闭南北方向的交通灯
	uWork1=port8002;	// 清除键盘缓冲区
	REGISTERCLKMD=0x1007;	// DSP主频改为两倍PLL时钟=32MHz
	uN=30; nCount=nCount1=0; nDir=0; cKey=cOldKey=0;
	SPSA1=1;	// set McBSP1's SPCR2
	uWork=SPSD1;
	uWork&=0xfffe;	// set XRST=0
	SPSD1=uWork;
	SPSA1=0x0e;	// set McBSP1's PCR1
	uWork=SPSD1;
	uWork|=0x2400;	// set XIOEN=1 FSXM=1, Enable IO,FSR for output
	SPSD1=uWork;
	SPSA0=0;	// set McBSP0's SPCR1
	uWork=SPSD0;
	uWork&=0xfffe;	// set RRST=0
	SPSD0=uWork;
	SPSA0=0x0e;	// set McBSP0's PCR1
	uWork=SPSD0;
	uWork|=0x1101;	// set RIOEN=1 FSXM=1, Enable IO,CLKR for output,set Motor's direction to 1
	SPSD0=uWork;
	asm("	ssbx	INTM");	// 关中断,进行关键设置时不许打扰
	uWork1= PMST; 		      
	PMST = uWork1&0xff;
	IMR = 0x8;
	TCR = 0x411;
	TIM = 0;
	PRD = T46uS;
	nSpeed=T46uS;
	TCR = 0x422;
	IFR = 0x8;
	asm("	rsbx	INTM");
	while ( 1 )
	{
		if ( nCount>16 )
		{
			port8000=1;
			nCount=0;
			nScanCode=port8001;	// 读扫描码
			nScanCode&=0x0ff;	// 低8位
			//uWork1=port8001;	// 清除键盘缓冲区
			if ( nScanCode!=0 )
			{
				if ( nScanCode==SCANCODE_Enter )	break;
				else
				{
					cKey=ConvertScanToChar(nScanCode);
					if ( cKey!=0 && cOldKey!=cKey )
					{
						cOldKey=cKey;
						switch ( cKey )
						{
							case '0': uN=100; break;
							case '1': uN=70; break;
							case '2': uN=50; break;
							case '3': uN=30; break;
							case '4': uN=10; break;
							case '5': uN=1; break;
							case '+':
								uN1=uN;
								uN=60;		// 降速
								Delay(1024);
								SPSA0=0;	
								uWork1=SPSD0;
								uWork1&=0xfffe;	
								SPSD0=uWork1;
								SPSA0=0x0e;
								uWork1=SPSD0;
								uWork1|=0x1101;	//set Motor's direction to 1
								SPSD0=uWork1;
								PRD=nSpeed; 
				 			 	nDir=0; 
								Delay(1024);
								uN=uN1;
								break;
							case '-':
								uN1=uN;
								uN=60;		// 降速
								Delay(1024);
								SPSA0=0;	
								uWork1=SPSD0;
								uWork1&=0xfffe;	
								SPSD0=uWork1;
								SPSA0=0x0e;
								uWork1=SPSD0;
								uWork1|=0x1100;	//set Motor's direction to 0
								uWork1&=0xfffe;
								SPSD0=uWork1;
								PRD=nSpeed; 
				 			 	nDir=1;
								Delay(1024);
								uN=uN1;
								break;
						}
					}
				}
			}
		}
	}
	TCR = 0x412;
	REGISTERCLKMD=0;
	port8000=0;
	port8000=0x80;
	port8000=0;
	exit(0);
}               

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

void interrupt time(void)
{
		SPSA1=1;	// set McBSP1's SPCR2
		uWork=SPSD1;
		uWork&=0xfffe;	// set XRST=0
		SPSD1=uWork;
		SPSA1=0x0e;	// set McBSP1's PCR1
		uWork=SPSD1;
		uWork|=0x2400;	// set XIOEN=1 FSXM=1, Enable IO,FSR for output
		if ( nCount1>uN )	uWork|=4;
		else	uWork&=0x0fffb;
		SPSD1=uWork;
		nCount++;
		nCount1++; nCount1%=100;
}

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;
//		case SCANCODE_F1: 
		case SCANCODE_Plus: cReturn='+'; break;
//		case SCANCODE_F2: 
		case SCANCODE_Minus: cReturn='-'; break;
	}
	 
	return cReturn;
}

⌨️ 快捷键说明

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