118句的变量a如果是从0开始到7,那么SMG_Channel函数就可以用几条语句来替换掉冗长的switch语句。因为a的值就等于输给三八译码器三位二进制的值。如a=0时,LSA = 0;LSB = 0;LSC = 0;a=1时,LSA = 1;LSB = 0;LSC =0; unsigned char tmp; tmp=P2; tmp&=0xf8;//与二进制数11111000按位与,把低三位清零。 tmp|=a;//通过按位或把a加到后三位上。 P2=tmp;//再把值赋给P2。 当然118行的循环语句也可以改成另一种风格书写,最好是在定时中断中调用,把a定义为静态变量。 a++; a&=0x07;//a的与二进制数00000111按位与,如果小于7,不变,如果变成1000,高位被清零。 |