unsigned char cKey;
asm(" setc INTM"); /* 关中断,进行关键设置时不允许发生中断,以免干扰 */
*WDCR=0x6f;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-47
*WDKEY=0x5555;
*WDKEY=0xaaaa; /* 关闭看门狗中断 */
*SCSR1=0x81fe; /* 打开所有外设,设置时钟频率40MHz */
(*MCRB)=0;
port8000=0; // 初始化ICETEK-CTR
port8000=0x80;
port8000=0;
port8007=0; // 关闭东西方向的交通灯
port8007=0x40; // 关闭南北方向的交通灯
port8007=0x0c1;
uPort8000=port8002; // 清键盘缓冲区
for ( nCount=0;nCount<8;nCount++ )
{
ledbuf[nCount]=0x0ff; // 显示为空白
ledx[nCount]=(nCount<<4); // 生成显示列控制字
}
RefreshLEDArray();
nCount=nCursorCount=0;
for (;;)
{
nScanCode=port8001;
nScanCode&=0x0ff;
uPort8000=port8002;
if ( nScanCode!=0 && nScanCode!=0x0ff )
{
if ( nScanCode==SCANCODE_Enter ) break;
哈尔滨工业大学——DSP 原理与应用实验指导书
III-48
else
{
cKey=ConvertScanToChar(nScanCode);
if ( cKey!=0 )
{
nKeyCode=cKey-0;
SetLEDArray(nKeyCode);
}
}
}
Delay(16);
nCursorCount++; nCursorCount%=4;
if ( nCursorCount==0 ) ledbuf[7]^=0x80;
}
for ( nCount=0;nCount<8;nCount++ )
{
ledbuf[nCount]=0x0ff; // 显示为空白
ledx[nCount]=(nCount<<4); // 生成显示列控制字
}
RefreshLEDArray();
exit(0);
}
void Delay(unsigned int nDelay)
{
int ii,jj,kk=0;
for ( ii=0;ii<nDelay;ii++ )
{
for ( jj=0;jj<64;jj++ )
哈尔滨工业大学——DSP 原理与应用实验指导书
III-49
{
RefreshLEDArray();
kk++;
}
}
}
void RefreshLEDArray()
{
int i;
for ( i=0;i<8;i++ )
{
port8000=ledx[i];
port8005=ledbuf[i];
}
}
void SetLEDArray(int nNumber)
{
int i;
for ( i=0;i<8;i++ )
ledbuf[i]=~ledkey[nNumber][7-i];
}
char ConvertScanToChar(unsigned char cScanCode)
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-29489-93.html
对自己定位清晰的boy