一个问题,你发了3/4个帖子,基本的编程逻辑都没有。 |
unsigned char P1_0=P1^0,P1_1=P1^1,P1_2=P1^2,P1_3=P1^3,P1_4=P1^4,P1_5=P1^5,P1_6=P1^6,P1_7=P1^7; 位声明用sbit,另外,编程注意格式,否则乱麻一堆 |
你的led_1到led_8定义和赋值都是“unsigned char”类型, 但在使用时,却赋值给了“bit”类型: unsigned char led1 是8bit,而P1_0=P1^0是的1bit,却要让P1_0=led1;你是要闹哪样? 如楼上所说,应该要整个P1口输出:P1=led1; |
我猜你的显示是LED4亮然后延迟LED8亮,因为你赋值是整体赋值,后面的会覆盖前面的,如果非要你这样的话那么应该把几个值按位或上 |
最好是给整个P0赋值来控制简单些 |
你是要干嘛?是要点亮led1234四个灯延迟一段时间再点亮led5678再延迟循环吗?你这是应该是赋值不对,最好是给整个P0吗? |
严格来讲,你这代码应该出了 delay 就没对的地方…… 先根据你的代码和电路图,猜测你要做流水灯,代码如下: #include <reg51.h> #include <INTRINS.H> void delay(unsigned char i) { unsigned char j,k; for(k=0;k<i;k++) for(j=0;j<255;j++); } void main() { P1 = 0xFE; //阴控亮一灯 // P1 = 0x01; //阳控亮一灯 while(1) { _cror_(P1,1); //右移一位 // _crol_(P1,1); //左移一位 delay(200); //这个照抄的你的delay , 实际需要多少,自己调整 } } 如上, 如果你是要做流水灯,这就是全部代码了。 |