由于系统是由数个开关和按键组成混合逻辑,我用PT0-3和PU1-4端口作为输入状态判断口。PA0-5;PB0-5K0-5Q0-5为输出
用了一个‘合成’的字节寄存器来判断输入口的状态:
Tinputs = TInputs_GetVal(); //读PT3-PT0的状态
Uinputs = UInputs_GetVal(); //读PT3-PT0的状态
Iinputs = (Tinputs&0x0F)|((Uinputs&0x0F)<<4);//组成一个判断寄存器(由高到底字节位的顺序组成-PU4,PU3,PU2,PU1,PT3,PT2,PT1,PTO)。
举例如下:
for(;;)
{
if(((Iinputs&0xF4)==0xF4)&&ikey==0); 判断开关#1是否ON
// (PU4-PU1)=0000/(PT3-PT0)= 0100
{
OnGreen_SetBit(0); // PA0输出‘低‘,绿LED亮
delay(500000); // 5秒延迟
OnGreen_ClrBit(0); // PA0输出‘高‘,绿LED灭
ikey=1;
}
---------------以上从来没出现问题----下面总是出错------------------
else if((TUinputs==0xCE)&&(TUinputs!=0xF4)&&ikey==1) //判断开关是否扳回初始状态(TUinputs==0xCE)。
{
OnGreen_SetBit(1); // PA1输出‘低‘,绿LED亮
delay(500000); // 5秒延迟
OnGreen_ClrBit(1); // PA1输出‘高‘,绿LED灭
}
} |