51微控制器實現流水燈左移 右移 先左移後右移程式

2021-10-25 12:46:47 字數 1769 閱讀 8974

<<:左移符號

.>>:右移符號

~:取反符號

思路:a = 0x01<<1;就是a的結果等於0x01左移一位。需要注意的是,左移是指二進位制移位,移位後低位(或高位)是要補0的。舉個左移流水燈的例子,要使流水燈向左依次流動,則有**:

下面展示一些內聯**片

// 左移時流水燈p0口設定,cnt為從0開始逐漸遞增的左移的位數,

//等下會貼一整段**p0=

~(0x01

<< cnt)

;

我們來解析一下這個**的意思,先從括號裡面看,0x01是十六位進製的數,化成二進位制為:0000 0001,。當cnt = 1時,即左移一位後,變為000 0 0010,然後取反符號後其變為111 1 1101。根據低電平有效,等於0那個小燈亮了,及第二個小燈亮了。同理可得第三個小燈為:11 11 1011,後面以此類推。

//左移

while(1

)}

//右移

while(1

)}

注:首先要先在前面定義flag: unsigned int flag = 0;

用除餘的方法來先左後右。第一遍時flag = 0,除以2餘等於0則進入左移的條件。第二遍時flag自加後等於1,除以2餘不等於0,則進入右移條件。

while(1

)else

for(i=

0; i<

30000

;i++);

//閃爍

cnt++

;//燈進行左(右)移

if(cnt >=8)

}

首先要先在前面開啟定時器:

tmod=0

;th0

=0xb8

;tl0

=0x00

;tr0=1

;

執行的程式**為:

//用定時器來實現左右流水燈迴圈

while(1

)else

cnt++

;//左(右)移幾個單位數

if(cnt >=8)

}}}}

注:因上面只能看到某部分**,某些定義沒有給出,故放出整體**,方便易於理解:

#include

sbit enled=p1

^4;//使能74hc138

sbit addr3=p1

^3; sbit addr2=p1

^2; sbit addr1=p1

^1; sbit addr0=p1

^0;void

main()

}//右移流水燈

while(1

)}//先左移,後右移。左移時第一遍為0,除餘後為0,則執行左移,第二遍時為1,除餘後不是零則執行右移。同理可以繼續下去

while(1

)else

for(i=

0; i<

30000

;i++);

//閃爍

cnt++

;//左(右)移

if(cnt >=8)

}//用定時器來實現左右流水燈迴圈

while(1

)else

cnt++;if

(cnt >=8)

}}}}

51微控制器流水燈教程。

延時函式 delay 的用法是 在這裡無法用程式的格式寫出來,就給大家截圖吧 在這裡插入描述 for和while是迴圈函式,這個高中就會接觸到一點,不做過多的解釋了,第二行的unsigned int x,y 是給x和y定義的,兩個for中,第二個for是第乙個for的,意思就是,第乙個for中的條件...

微控制器 流水燈

基礎知識 1.c語言預處理命令 define a p0 注意後邊不用加分號 在 中使用p0口時,可以直接用a代替,防止修改埠時大面積修改 2.迴圈左移和右移函式 crol a,b 迴圈左移函式,a是左移的值,b是左移的位數。包含在intrins.h庫函式裡面。cror a,b 迴圈右移函式,原理同上...

微控制器流水燈

上篇給大家分享了單個led的點亮與閃爍,這次給大家分享一下怎樣用微控制器控制led實現流水燈效果。所需元器件如下 stc89c52rc晶元 1 10k電阻 1 330 電阻 8 10uf 電解電容 1 22pf 瓷片電容 2 12mhz晶振 1 按鍵 1 led燈 8 電路圖如下 如下 led流水燈...