@floatsd
2016-06-09T15:32:57.000000Z
字数 3479
阅读 2148
note_DSP
if(cKey!=0&&cOldKey!=cKey)
语句中的&&cOldKey!=cKey
,这样才能实现连续加速和连续减速。
while (1)
{
nScanCode=*(int *)0x108001; // 读扫描码
nScanCode&=0x0ff; // 取扫描值的低8位
uPort8000=*(int *)0x108002;
if ( nScanCode!=0 )
{
if ( nScanCode==9 ) break;//按下9键退出程序
else
{
cKey=nScanCode;//cKey赋值为扫描值并依照键盘选择进行调速
if ( cKey!=0 )
{
cOldKey=cKey;
switch ( cKey )
{
case 1: uN=10; break;
case 2: uN=50; break;
case 3: uN=60; break;
case 4: uN=70; break;
case 5: uN=80; break;
case 6: uN=100; break;
case7:
uN=uN+5; //按下7占空比加5
break;
case8:
uN=uN+5; //按下8占空比减5
break;
}
}
}
}
}
while (1)
{
nScanCode=*(int *)0x108001;
nScanCode&=0x0ff;
if ( nScanCode!=0 ) //如果要限定扫描值为1-9,为什么要只判断是否非零
{
if ( nScanCode==9 ) break;
else
{
cKey=nScanCode;
//前面已经判断过nScanCode了,cKey是直接由nScanCode赋值,为什么还要判断一次同样的内容。
if ( cKey!=0 )
{
cOldKey=cKey;
switch ( cKey )
...
}}}}
思考题1:结合液晶显示控制实验,修改源程序,将所设定的占空比实时在液晶屏幕上显示。
CTRGR=0x80; // 初始化ICETEK-CTR
CTRGR=0x0;
CTRGR=0x80;
CTRLR=0; // 关闭东西方向的交通灯
CTRLR=0x40; // 关闭南北方向的交通灯
uPort8000=CTRCLKEY;
TurnOnLCD(); // 打开显示
LCDCLS(); // 清除显示内存
CTRLCDCMDR=LCDCMDSTARTLINE; // 设置显示起始行
Delay(LCDDELAY);
CTRLCDCR=0;
Delay(LCDDELAY);
f_init(0,0); //初始化LCD为00
CTRLR=0xC0;
CTRGR=0x81;
Gpio_PortA();
Gpio_PortB();
nSpeed=T46uS;
uN=60; nCount=nCount1=0; nDir=0; cKey=cOldKey=0;
StartCpuTimer0(); //启动定时器
while (1)
{
nScanCode=*(int *)0x108001; // 读扫描码
nScanCode&=0x0ff; // 低8位
uPort8000=*(int *)0x108002;
//Delay(5);
if ( nScanCode!=0 )
{
if ( nScanCode==9 ) break;
else
{
cKey=nScanCode;
if ( cKey!=0 /*&& cOldKey!=cKey*/ )
{
cOldKey=cKey;
switch ( cKey )
{
case 1: uN=10; break;
case 2: uN=50; break;
case 3: uN=60; break;
case 4: uN=70; break;
case 5: uN=80; break;
case 6: uN=100; break;
case 7:
uN=uN+5;
nScanCode=0;
break;
case 8:
uN=uN-5;
nScanCode=0;
break;
}
CTRGR=0x80; // 初始化ICETEK-CTR
CTRGR=0x0;
CTRGR=0x80;
CTRLR=0; // 关闭东西方向的交通灯
CTRLR=0x40;
b=uN%10;
a=(uN-b)/10; //得到占空比个位数和十位数
f_init(a,b); //输入待显示十位数个位数
CTRLR=0xC0;CTRGR=0x81;
}
}
}
CTRLR=0xC0;CTRGR=0x81;
//Delay(4);
}
StopCpuTimer0();
CTRGR=0;
}
思考题2:电动机是一个电磁干扰源。电动机的启停还会影响电网电压的波动,它周围的电器开关也会引发火花干扰。因此,除了采用必要的隔离、屏蔽盒电路板合理布线等措施外,看门狗的功能就会显得格外重要。看门狗在工作时不断地监视程序运行的情况,一旦程序“跑飞”,会立刻使DSP复位。