📄 motor.c
字号:
#include "2407c.h"
#include "scancode.h"
#define T46uS 0x0800
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
void Delay(unsigned int nTime);
void interrupt time(void);
char ConvertScanToChar(unsigned char cScanCode);
void interrupt gptime1(void);
void gp_init(void);
ioport unsigned int port8001;
unsigned int uWork,nCount,uN,uN1,nCount1=0,nDir;
main()
{ char cKey,cOldKey;
unsigned int nScanCode;
unsigned int uWork1,nSpeed;
asm(" setc INTM");
CTRGR=0x80; // 初始化ICETEK-CTR
CTRGR=0x0;
CTRGR=0x80;
CTRLR=0; // 关闭东西方向的交通灯
CTRLR=0x40; // 关闭南北方向的交通灯
CTRLR=0xC0;
CTRGR=0x81;
uWork1=CTRCLKEY; // 清除键盘缓冲区
uN=40; nCount=nCount1=0; nDir=0; cKey=cOldKey=0;
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa;
*SCSR1=0x81fe; //40m
uWork=(*MCRC);
uWork&=0x0efdf; /* PWM11/IOPE5,TDIR2/IOPF4 for normal I/O ports */
(*MCRC)=uWork;
gp_init();
*IMR=0x3;
*IFR=0xffff;
nCount=0;
uWork=(*WSGR);
uWork&=0x0fe3f;
(*WSGR)=uWork;
uWork=(*PFDATDIR);
uWork|=0x1000;
uWork1&=0xffef; /* Set direct=0 */
(*PFDATDIR)=uWork;
asm(" clrc INTM");
Delay(128);
*T1PR=T46uS;
nSpeed=T46uS;
for(;;)
{
if ( nCount>16 )
{
nCount=0;
nScanCode=port8001; // 读扫描码
nScanCode&=0x0ff; // 低8位
CTRGR=1;
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=90; break;
case '2': uN=70; break;
case '3': uN=50; break;
case '4': uN=30; break;
case '5': uN=10; break;
case '+':
uN1=uN;
uN=60; // 降速
Delay(128);
uWork1=(*PFDATDIR);
uWork1|=0x0010; /* Set Motor's direction to 1 */
(*PFDATDIR)=uWork1;
*T1PR=nSpeed;
nDir=0;
Delay(128);
uN=uN1;
break;
case '-':
uN1=uN;
uN=60; // 降速
Delay(128);
uWork1=(*PFDATDIR);
uWork1&=0xffef; /* Set direct=0 */
(*PFDATDIR)=uWork1;
Delay(128);
*T1PR=nSpeed;
nDir=1;
Delay(128);
uN=uN1;
break;
}
}
}
}
}
//Delay(8);
}
CTRGR=0;
CTRGR=0x80;
CTRGR=0;
exit(0);
}
void interrupt gptime1(void)
{
uWork=(*PIVR);
switch(uWork)
{
case 0x27:
{
(*EVAIFRA)=0x80;
uWork=(*PEDATDIR);
uWork|=0x2000;
if ( nCount1>uN )
uWork|=0x20;
else
uWork&=0x0ffdf;
(*PEDATDIR)=uWork;
nCount++;
nCount%=18;
nCount1++; nCount1%=100;
break;
}
}
}
void gp_init(void)
{
*EVAIMRA = 0x80;
*EVAIFRA = 0xffff;
*GPTCONA = 0x0100;
*T1PR = T46uS*9/5;
*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;
// case SCANCODE_F1:
case SCANCODE_Plus: cReturn='+'; break;
// case SCANCODE_F2:
case SCANCODE_Minus: cReturn='-'; break;
}
return cReturn;
}
void Delay(unsigned int nDelay)
{
int i,j,k;
for ( i=0;i<nDelay;i++ )
for ( j=0;j<16;j++ )
k++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -