写两个数组就能搞定的事,不要写的那么麻烦
|
请教CheckValue = P3&0x32;//按键接在p3.1 p3.4 p3.5这个是怎么计算得来的? 在这里不是按位与运算,是直接取地址,0x32就是给这几个端口赋值1。程序中直接位定义不行吗 |
请教CheckValue = P3&0x32;//按键接在p3.1 p3.4 p3.5这个是怎么计算得来的? |
简单的计数判断轻松实现用不了写那么多代码,都是掩人耳目的伎俩。 |
网络不安全 发表于 2021-12-23 12:20 应该是你仿真有问题,不支持16位以上,所以,我一共给你写了两个版本,8位和32位,但是,最后是32位的不行,8位的版本就OK了。所以,问题应该在你的仿真上,如果直接下载到单片机,应该两个都能用。 |
xuyaqi 发表于 2021-12-23 13:42 10楼程序结构就跟你不一样,先看懂别人程序。 |
网络不安全 发表于 2021-12-23 12:20 10楼chengxujiegoujiugengnibuyiyang |
lkc8210 发表于 2021-12-22 12:00 我这个代码应该有问题吧 |
网络不安全 发表于 2021-12-21 16:27 我用我的代码加上强制转换数据类型就可以了不知道为什么你的代码不行 ![]()
|
1.我这台电脑只能上网,不能测试了。 2.应该是这句问题 LEDShow(0x00000001<<LEDIndex); 它实际只传递了24位,你要是改,大致是改函数void Mode_0(void), 3.在C51你即使用强制类转换也传不过去(不知新版的是不是可以了。) 4.建议观察void LEDShow(unsigned long LEDStatus)中temp值是否正确,最好加上&0xFF. void Mode_0(void) { unsigned long LEDStatus; if(LEDDirection) { LEDStatus=0x00000001; LEDStatus<<=LEDIndex; LEDShow(LEDStatus); } else { LEDStatus=0x00800000; LEDStatus <<=LEDIndex; LEDShow(LEDStatus); } if(++LEDIndex == 24) { LEDIndex = 0; LEDDirection = !LEDDirection; } } |
188610329 发表于 2021-12-22 00:31 您好,我按您的方法修改后,仿真效果和第一次修改的一样,灯跑到P2口就8只一起亮,然后返回不亮,可能其他地方也有错吧。附件里有仿真+程序,您方便帮我试试吗? |
网络不安全 发表于 2021-12-21 20:24 void LEDShow(unsigned long LEDStatus) { unsigned char temp; temp = LEDStatus; P0 = ~temp; temp = LEDStatus >> 8; P1 = ~temp; temp = LEDStatus >> 16; P2 = ~temp; } void Mode_0(void) { if(LEDDirection) LEDShow(0x00000001<<LEDIndex); else LEDShow(0x00800000>>LEDIndex); if(++LEDIndex == 24) { LEDIndex = 0; LEDDirection = !LEDDirection; } } |
求大神帮助,不要石沉大海啦 |
您好,我按您的方法修改了,P2口LED全亮闪一下,不能往返,是不是还有地方需要修改呢?
|
试试这样改
|
通电不让LED全亮已解决 |
网络不安全 发表于 2021-12-21 20:24 如果,上面一个有问题的话,用这个: void Mode_0(void) { unsigned char temp; if(LEDDirection) { temp = (0x01 << (LEDIndex & 0x07)); if((LEDIndex>>3) == 0) P0 = ~temp; else P0 = 0xff; if((LEDIndex>>3) == 1) P1 = ~temp; else P1 = 0xff; if((LEDIndex>>3) == 2) P2 = ~temp; else P2 = 0xff; } else { temp = (0x80 >> (LEDIndex & 0x07)); if((LEDIndex>>3) == 2) P0 = ~temp; else P0 = 0xff; if((LEDIndex>>3) == 1) P1 = ~temp; else P1 = 0xff; if((LEDIndex>>3) == 0) P2 = ~temp; else P2 = 0xff; } if(++LEDIndex == 24) { LEDIndex = 0; LEDDirection = !LEDDirection; } } |