|
suiwinder 发表于 2025-10-29 22:12 想要很快的解决问题,把你高傲的proteus 8.17 sp5工程文件和程序文件打包发上来吧。 |
lkc8210 发表于 2025-10-27 10:26 谢谢你的热心回复。 生成了hex文档的,proteus引用也是正确的。就是没有按预想的仿真结果出现。 |
wannenggong 发表于 2025-10-27 21:37 谢谢你的回复。 加入for循环是必要的。但是你这个代码和楼下的是一样的。 |
|
谢谢网友的回复。 这个代码在proteus 8.17 sp5上运行的时候,一个灯都不亮。 |
|
1.楼主的程序问题不大,跑马灯可以跑起来,只是高位灯不亮,只循环点亮7个灯,原因是程序行for( i = 7; i > 0; i -- )有问题,应改为for( i = 8; i > 0; i -- )。 2.程序可以化简,既然用了_crol_()函数,可以不用for循环,也不用定义循环边界,因为_crol_()函数已经内含循环机制,它跟左移运算符<<的运行结果是有区别的。主程序可简化为: void main(void) { P2=0xfe; while( 1 ) { P2=_crol_(P2,1); delay1s(1); } } |
|
用实验板测试验证以下代码可以实现流水显示,代码如下: **** void main(void) { P6=0xfe; while(1) { delay_ms(250); P6 = _crol_(P6, 1); } } 加入for循环效果不变,如果只是验证单向流水加for循环显然是没必要的,实现双向流水时各自加for循环就必要了。 |
| 定义一个变量,这个变量进行移位,然后再把变量赋值给P2口 |
suiwinder 发表于 2025-10-27 13:31 先给端口直接赋值,看看那些指示灯能不能有对应的变化 |
WL0123 发表于 2025-10-27 08:28 你有好的办法吗? |
WL0123 发表于 2025-10-27 08:28 为啥不是反复循环? 楼主的意思是为啥输出的口没有按照代码改变吧,只有P2.7有变化,其他的脚没有。 |
|
请检查有没有生成Hex档 Proteus引用的Hex档是不是正确的 |
suiwinder 发表于 2025-10-26 23:05 如果用的是沙发代码在楼主截图电路仿真,结果不是由左至右反复循环。只能是楼主太自信且不仔细。 |
man1234567 发表于 2025-10-26 11:42 问题照样没解决。 |
WL0123 发表于 2025-10-24 19:53 这个运行结果一样。 |
undyme 发表于 2025-10-25 11:25 不用for循环,就只会左移一次。 |
undyme 发表于 2025-10-25 11:25 运行后显示的结果有什么不同么 |
| 你在while(1)里面的P2 = _crol_( P2, 1 );已经做成了循环左移了,不用再在外面套一个for循环 |
|
#include <reg51.h> #include <intrins.h> #define u8 unsigned char void delay1s( u8 x ) { u8 i, j, k; i = x; j = 120; k = 169; while( i ) { while( j ) { while( k ) { ; k --; } k = 169; j --; } j = 120; i --; } } void main( void ) { // u8 i; P2 = 0xfe; while( 1 ) { // for( i = 7; i > 0; i -- ) // { delay1s( 1 ); // P2 = _crol_( P2, 1 ); P2 = _cror_( P2, 1 ); // } } } |