<<:左移符號
.>>:右移符號
~:取反符號
思路: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流水燈...