標(biāo)題: 單片機(jī)LED發(fā)光二極管流動(dòng)點(diǎn)亮程序問題 [打印本頁]

作者: 86爆缸    時(shí)間: 2022-10-19 21:39
標(biāo)題: 單片機(jī)LED發(fā)光二極管流動(dòng)點(diǎn)亮程序問題
圖片是我單獨(dú)把流水燈部分去掉后做的分析,求大神解答下
********************************
間隔300ms第一次一個(gè)管亮流動(dòng)一次,
第二次兩個(gè)管亮流動(dòng),依次到8個(gè)管亮,
然后重復(fù)整個(gè)過程。

單片機(jī)源程序如下:
#include<reg52.h>  //52單片機(jī)頭文件
#include <intrins.h> //包含有左右循環(huán)移位子函數(shù)的庫(kù)
#define uint unsigned int    //宏定義
#define uchar unsigned char  //宏定義
void delay(uint z)  //延時(shí)函數(shù),z的取值為這個(gè)函數(shù)的延時(shí)ms數(shù),如delay(200);大約延時(shí)200ms.
{                                        //delay(500);大約延時(shí)500ms.
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);        
}
void main()                    //主函數(shù)
{
        uchar a,i,j;
        while(1)        //大循環(huán)
        {
                        a=0xfe;     //賦初值
                        for(j=0;j<8;j++)
                        {
                                for(i=0;i<8-j;i++)   //左移
                                {
                                        P1=a;       //點(diǎn)亮小燈
                                        delay(200); //延時(shí)200毫秒
                                        a=_crol_(a,1); //將a變量循環(huán)左移一位
                                }
                                a=_crol_(a,j);   //補(bǔ)齊,方便下面的左移一位
                                P1=0xff;                 //全部關(guān)閉
                                a=a<<1;                        //左移一位讓多一個(gè)燈點(diǎn)亮
                        }
        }
}


51hei圖片_20221019213514.jpg (665.51 KB, 下載次數(shù): 54)

51hei圖片_20221019213514.jpg

作者: xxxevery    時(shí)間: 2022-10-20 10:50
語法上沒啥錯(cuò)誤,主要應(yīng)該是邏輯上的混亂,最好還是把想要達(dá)成的圖形畫出來再分析邏輯上應(yīng)該怎么表述
作者: 藍(lán)魄    時(shí)間: 2022-10-21 08:19
第一次內(nèi)循環(huán)的時(shí)候是把1111 1110左移8次;0111 1111結(jié)束第一次內(nèi)循環(huán);此時(shí)j是1;a=_crol_(a,j);后a=1111 1110;a<<1后a不循環(huán)左移低位補(bǔ)0就是1111 1100;開始第二次內(nèi)循環(huán);變成0011 1111結(jié)束;此時(shí)j==2;a=_crol_(a,j)后a是1111 1100;再經(jīng)過a<<1左移后就是1111 1000;下次循環(huán)亦是如此規(guī)律;
作者: 人中狼    時(shí)間: 2022-10-21 08:54
每流動(dòng)一次后重新賦值就行了,移位操作并不一定是補(bǔ)1的
作者: 86爆缸    時(shí)間: 2022-10-21 10:39
藍(lán)魄 發(fā)表于 2022-10-21 08:19
第一次內(nèi)循環(huán)的時(shí)候是把1111 1110左移8次;0111 1111結(jié)束第一次內(nèi)循環(huán);此時(shí)j是1;a=_crol_(a,j);后a=1111  ...

所以我單獨(dú)把P1拿出來賦值,難怪結(jié)果不對(duì)了,代入內(nèi)循環(huán)就是你的這個(gè)解釋;
謝謝大佬




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