关于C51中的移位程序。。。。

 #include <STC_12.h>
 #define uchar unsigned char
 #define uint unsigned int

 void delay(int num) {
            uint k = 0;
            uint j = 0;
            for (k = 0; k < 1000; k ++) {
                        for (j = 0; j < num; j ++) ;
                        }
        }

 main() {
             uint i = 0;
            while (1) {
            for (i = 0; i < 5; i ++) {
                    P4 <<= 1;
                    p4 = p4 +1;
                    delay(1000);
                    }
             }
        }

我写的是在STC12C5A60S2上的一个4LED灯的流水灯程序,但是调试的时候灯并不是按流水灯的形式变化,请大神们看看到底是什么错误导致的啊?是不是左移那里出了问题啊?

不同的LED灯以及不同的连线不同。
你应该先调试下每个相位亮灯是否正确。然后再组合成完整的程序。

恩,我试试,谢谢你的建议。。。

看硬件连得对不对,然后再来分析程序

不要用P4直接操作,你用一个变量移位然后再赋值给P4,P4如果由于外部电路补拉高或拉低,你读的P4的值就会有影响的