欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 怎么只是最左邊的LED閃爍?附單片機程序 [打印本頁]

作者: suiwinder    時間: 2025-10-24 16:31
標題: 怎么只是最左邊的LED閃爍?附單片機程序
各位論壇的大佬,又碰到問題了。電路圖如下,就是想實現從左邊開始的流水燈。代碼也附上了,可是運行的時候就是只有最左邊的LED閃爍,運行環境是proteus8.17sp4,麻煩大家看看原因出在哪里?
#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;
    while( 1 )
    {
        P2 = 0xfe;
        for( i = 7; i > 0; i -- )
        {
            delay1s( 1 );
            P2 = _crol_( P2, 1 );
        }
    }
}




作者: WL0123    時間: 2025-10-24 19:53
#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 );
//                }
        }
}
作者: undyme    時間: 2025-10-25 11:25
你在while(1)里面的P2 = _crol_( P2, 1 );已經做成了循環左移了,不用再在外面套一個for循環
作者: man1234567    時間: 2025-10-26 11:42
undyme 發表于 2025-10-25 11:25
你在while(1)里面的P2 = _crol_( P2, 1 );已經做成了循環左移了,不用再在外面套一個for循環

運行后顯示的結果有什么不同么
作者: suiwinder    時間: 2025-10-26 23:04
undyme 發表于 2025-10-25 11:25
你在while(1)里面的P2 = _crol_( P2, 1 );已經做成了循環左移了,不用再在外面套一個for循環

不用for循環,就只會左移一次。

作者: suiwinder    時間: 2025-10-26 23:05
WL0123 發表于 2025-10-24 19:53
#include
#include
#define u8 unsigned char

這個運行結果一樣。
作者: suiwinder    時間: 2025-10-26 23:05
man1234567 發表于 2025-10-26 11:42
運行后顯示的結果有什么不同么

問題照樣沒解決。
作者: WL0123    時間: 2025-10-27 08:28
suiwinder 發表于 2025-10-26 23:05
這個運行結果一樣。

如果用的是沙發代碼在樓主截圖電路仿真,結果不是由左至右反復循環。只能是樓主太自信且不仔細。
作者: lkc8210    時間: 2025-10-27 10:26
請檢查有沒有生成Hex檔
Proteus引用的Hex檔是不是正確的
作者: xiaobendan001    時間: 2025-10-27 11:55
WL0123 發表于 2025-10-27 08:28
如果用的是沙發代碼在樓主截圖電路仿真,結果不是由左至右反復循環。只能是樓主太自信且不仔細。

為啥不是反復循環?
樓主的意思是為啥輸出的口沒有按照代碼改變吧,只有P2.7有變化,其他的腳沒有。
作者: suiwinder    時間: 2025-10-27 13:31
WL0123 發表于 2025-10-27 08:28
如果用的是沙發代碼在樓主截圖電路仿真,結果不是由左至右反復循環。只能是樓主太自信且不仔細。

你有好的辦法嗎?
作者: xiaobendan001    時間: 2025-10-27 17:45
suiwinder 發表于 2025-10-27 13:31
你有好的辦法嗎?

先給端口直接賦值,看看那些指示燈能不能有對應的變化
作者: 人中狼    時間: 2025-10-27 21:08
定義一個變量,這個變量進行移位,然后再把變量賦值給P2口
作者: wannenggong    時間: 2025-10-27 21:37
用實驗板測試驗證以下代碼可以實現流水顯示,代碼如下:

****
void main(void)


P6=0xfe;
    while(1)
    {
            delay_ms(250);
            P6 = _crol_(P6, 1);
    }

加入for循環效果不變,如果只是驗證單向流水加for循環顯然是沒必要的,實現雙向流水時各自加for循環就必要了。


作者: cy009    時間: 2025-10-28 10:55
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);
    }
}
作者: suiwinder    時間: 2025-10-29 22:12
謝謝網友的回復。
這個代碼在proteus 8.17 sp5上運行的時候,一個燈都不亮。
作者: suiwinder    時間: 2025-10-29 22:13
wannenggong 發表于 2025-10-27 21:37
用實驗板測試驗證以下代碼可以實現流水顯示,代碼如下:

****

謝謝你的回復。
加入for循環是必要的。但是你這個代碼和樓下的是一樣的。
作者: suiwinder    時間: 2025-10-29 22:14
lkc8210 發表于 2025-10-27 10:26
請檢查有沒有生成Hex檔
Proteus引用的Hex檔是不是正確的

謝謝你的熱心回復。
生成了hex文檔的,proteus引用也是正確的。就是沒有按預想的仿真結果出現。
作者: cy009    時間: 2025-10-29 23:42
suiwinder 發表于 2025-10-29 22:12
謝謝網友的回復。
這個代碼在proteus 8.17 sp5上運行的時候,一個燈都不亮。

想要很快的解決問題,把你高傲的proteus 8.17 sp5工程文件和程序文件打包發上來吧。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1