|
接上一篇帖子,繼續(xù)來(lái)看,既然我們會(huì)點(diǎn)亮一個(gè)小燈,并可以讓其閃爍了,那么我們就嘗試著點(diǎn)亮流水燈好了,讓8個(gè)小燈,從左到右,從右往左來(lái)回流動(dòng),還是在上一個(gè)程序的基礎(chǔ)上來(lái)修改,很簡(jiǎn)單依次賦值即可實(shí)現(xiàn)。- while(1)
- {
- P2 = 0XFE;//1111_1110;
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- P2 = 0XFD;//1111_1101;
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- P2 = 0XFB;//1111_1011;
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- P2 = 0XF7;//1111_0111;
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- P2 = 0XEF;//1110_1110;
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- P2 = 0XDF;//1101_1111;
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- P2 = 0XBF; //1011_1110;
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- P2 = 0X7F; //0111_1111;
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- P2 = 0XBF; //1011_1110;
- Delay500ms(); //500ms延時(shí) 11.0592MHZ
- P2 = 0XDF; //1101_1111;
- Delay500ms(); //500ms延時(shí) 11.0592MHZ
- P2 = 0XEF; //1110_1110;
- Delay500ms(); //500ms延時(shí) 11.0592MHZ
- P2 = 0XF7; //1111_0111;
- Delay500ms(); //500ms延時(shí) 11.0592MHZ
- P2 = 0XFB; //1111_0111;
- Delay500ms(); //500ms延時(shí) 11.0592MHZ
- P2 = 0XFD; //1111_1101;
- Delay500ms(); //500ms延時(shí) 11.0592MHZ
- }
復(fù)制代碼
這樣弄,雖然很好理解,但是代碼顯得太冗長(zhǎng)了,我們接觸下for循環(huán)語(yǔ)句,先用for語(yǔ)句來(lái)實(shí)現(xiàn)我們想要的功能。代碼修改如下:- for(i = 0; i < 8;i++)
- {
- P2 = ~(0X01 << i);
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- }
- for(i = 0; i < 6;i++)
- {
- P2 = ~(0X40 >> i);
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- }
復(fù)制代碼
用了for循環(huán)左移和右移的辦法,配合取反實(shí)現(xiàn)的,還有一種辦法,更簡(jiǎn)單可以實(shí)現(xiàn)來(lái)回循環(huán),這便是循環(huán)左移和循環(huán)右移指令- /*******************************************************************
- * 文件名 main函數(shù)入口
- * 描述:
- * 功 能
- * 作者:大核桃
- * 版本號(hào):V1.00(2018.09.17)
- ********************************************************************/
- void main(void)
- {
- uint8 i = 0;
- uint8 temp;
- MCU_Port_Init();//端口模式初始化函數(shù)
- //上電IO默認(rèn)是0
- LED0 = 1;//輸出1
- LED1 = 0;
- LED2 = 0;
- LED3 = 0;
- LED4 = 0;
- LED5 = 0;
- LED6 = 0;
- LED7 = 0;//
- temp = 0XFE;
- while(1)
- {
- for(i = 0; i < 7;i++)
- {
- P2 = temp;
- temp = _crol_(temp,1);
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- }
- for(i = 0; i < 7;i++)
- {
- P2 = temp;
- temp = _cror_(temp,1);
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- }
- }
復(fù)制代碼
這一節(jié),用到了for循環(huán)這個(gè)知識(shí)點(diǎn),for語(yǔ)句的用法在C語(yǔ)言課本的第120頁(yè),詳細(xì)的了解可以看C語(yǔ)言這本書,我們只列舉一個(gè)實(shí)際例子來(lái)說(shuō)明C語(yǔ)言的流程,就拿下面的代碼來(lái)說(shuō)吧。- for(i = 0; i < 8;i++)
- {
- P2 = ~(0X01 << i);
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- }
復(fù)制代碼
首先i = 0;是給變量賦初值,i<8是循環(huán)條件,i++是變量累加,先來(lái)看看i = 0;的時(shí)候,這個(gè)時(shí)候判斷下語(yǔ)句P2 = 0XFE,然后0 < 8條件成立,i++;- // i = 0;的時(shí)候
- for(i = 0; i < 8;i++)
- {
- P2 = ~(0X01 << 0);
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- }
- // i = 1;的時(shí)候
- for(i = 0; i < 8;i++)
- {
- P2 = ~(0X01 << 1);
- Delay500ms();//500ms延時(shí) 11.0592MHZ
- }
復(fù)制代碼
當(dāng) i= 1;的時(shí)候,P2 = 0XFD,依然1<8成立,然后i++;
當(dāng) i= 2;的時(shí)候,P2 = 0XFB,依然2<8成立,然后i++;
當(dāng) i= 3;的時(shí)候,P2 = 0XF7,依然3<8成立,然后i++;
當(dāng) i= 4;的時(shí)候,P2 = 0XEF,依然4<8成立,然后i++;
當(dāng) i= 5;的時(shí)候,P2 = 0XDF,依然5<8成立,然后i++;
當(dāng) i= 6;的時(shí)候,P2 = 0XBF,依然6<8成立,然后i++;
當(dāng) i= 7;的時(shí)候,P2 = 0X7F,依然7<8成立,然后i++;
當(dāng) i= 8;的時(shí)候,8<8不成立,跳出循環(huán)執(zhí)行下面的語(yǔ)句;
這樣我們就把for循環(huán)的流程給分解了,首先就是賦初值,然后執(zhí)行循環(huán),循環(huán)完之后變量累加,回過頭看條件是否成立,如果條件繼續(xù)成立,則繼續(xù)循環(huán),累加變量,直到條件不滿足為止。
關(guān)于取反符號(hào)
~這個(gè)符號(hào),可以讀作取反,注意這不是。ǚ牵瑪(shù)字電路中的 &(按位與) , | (按位或),!(非)和 &&(邏輯與),||(邏輯或),和~(取反)是不一樣的,按位與顧名思義,是位和位之間運(yùn)算,他們運(yùn)算是能夠得出一個(gè)具體的結(jié)果的,而邏輯與是對(duì)左右兩個(gè)表達(dá)式的真假進(jìn)行判斷,得出的結(jié)果不是真就是假。
關(guān)于與或非的真值表
與或非是數(shù)字電路最基本的知識(shí)點(diǎn),必須要掌握這個(gè)知識(shí)點(diǎn)。
&, 就好比乘法一樣,如果A和B都為1,那么結(jié)果就是1,如果有一個(gè)為0,則輸出都是0,。
|, 就好比加法運(yùn)算,如果A或者B有一個(gè)是1,那么結(jié)果就是1,否則就是0;
!, 輸入為0時(shí),輸出為1,輸入為1時(shí),輸出為0;
!|,或非門,只有A和B輸入全部位0時(shí),輸出才為1,否則全為0;
!&,與非門,只有A和B全部輸入為1時(shí),輸出才為0,否則全為1;
異或門,如果A和B相等時(shí),輸出都是0,否則輸出都是1。
好了,今天就到這里吧,明天繼續(xù)。。。代碼奉獻(xiàn)上。。。
001 LED點(diǎn)亮.rar
(25.11 KB, 下載次數(shù): 59)
2018-10-13 08:39 上傳
點(diǎn)擊文件名下載附件
002 LED閃爍.rar
(27.56 KB, 下載次數(shù): 51)
2018-10-13 08:39 上傳
點(diǎn)擊文件名下載附件
|
|