先給出led的電路圖
每個(gè)led燈連著VCC,默認(rèn)為高電平
可以看到led燈對(duì)應(yīng)連著P20到P27共8個(gè)燈
(相關(guān)資料圖)
所以只要將P20到P27對(duì)應(yīng)的引腳置為低電平即可
具體來說就是
P2_0 = 0//頭文件里面定義了相關(guān)的文件等價(jià)于P2的第0位
想實(shí)現(xiàn)流水燈的話
首先是延時(shí)函數(shù)
一個(gè)基本語句的執(zhí)行時(shí)間為10us
然后1s = 1000ms = 1000000us
所以要延時(shí)1s的話就必須執(zhí)行100000個(gè)基本語句
所以可以寫個(gè)函數(shù)
void deley(int x) { while (x--) {}}
然后需要多少秒就乘1e5,然后填入?yún)?shù)即可
然后為了代碼簡潔,肯定要用for循環(huán)
所以要換種形式來讓led燈亮
就是直接操作P2來達(dá)到這個(gè)效果(而不是具體到某一位)
那么初始狀態(tài)是左邊的第一個(gè)燈亮著,其余都暗著
對(duì)應(yīng)的二進(jìn)制數(shù)為11111110
十六進(jìn)制為0xFE
然后就一直往右移即可
想要燈的顯示效果一直右移
那么可以先左移,然后再加一即可達(dá)到這個(gè)效果
那么如果想要燈光效果左移捏
同理,一直右移,然后加一即可,但是注意這個(gè)加一加的是第8位上的1,所以加的是0x80
代碼如下:
#include sbit led = P2 ^ 7;void delay(int x){while (x)x--;}void main(){int i;P2 = 0xFE;delay(50000);while (1){for (i = 1; i <= 7; i++){P2 <<= 1;P2 += 1;delay(50000);}// for (i = 1; i <= 7; i++)// {// P2 >>= 1;// P2 += 0x80;// delay(50000);// }}}
關(guān)鍵詞: