两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

在串口章節(jié)和液晶屏章節(jié)的部分代碼中總是看到“  *str!='\0'  ”和“  *str++  ”卻一時(shí)難以理解意思,本節(jié)我們將簡(jiǎn)要講解這兩部分代碼的含義,但前提需要大家有對(duì)指針方面的知識(shí)基礎(chǔ),建議先了解《手把手教你學(xué)51單片機(jī)》文檔12.1節(jié)知識(shí)內(nèi)容先。


1.代碼解析

我們先定義一個(gè)數(shù)組“u8 LEDSET[4]={0x7E,0xBD,0xDB,0xE7};”

假設(shè)這四個(gè)元素的內(nèi)存排布如下,5,6,7,8代表的是指向元素的指針。

每個(gè)數(shù)組初始化之后都會(huì)在最后那個(gè)元素內(nèi)存的下一個(gè)內(nèi)存分配有一個(gè)結(jié)束符的數(shù)據(jù),“‘\0’”的ASCII碼值就是0。

數(shù)組指針

接著我們先把下面代碼下載進(jìn)開發(fā)板中觀察現(xiàn)象

#include <reg52.h> 
#include <function.h>//詳見第六章第8講 
 
void LED_task(u8 *str)
{ 
    while(*str != '\0')//連續(xù)發(fā)送字符串?dāng)?shù)據(jù),直到檢測(cè)到結(jié)束符
    {
        P0=*str++;
        delay_ms(1000);
    }  
}
 
void main()
{  
    u8 LEDSET[4]={0x7E,0xBD,0xDB,0xE7};
    LED_Init();//初始化LED硬件模塊
 
    LED_task(LEDSET);
    while(1);
}

主函數(shù)里我們只需關(guān)注“LED_task(LEDSET);”,傳入的參數(shù)是指針類型,LEDSET就是指向數(shù)組第一個(gè)元素的指針,也就是指向的是0x7E,指針是5。

在“while(*str != '\0')”里,由于傳入的指針里面的值不是結(jié)束符,所以可以進(jìn)入循環(huán)體,此時(shí)執(zhí)行“P0=*str++;”。

“*str++;”的意思是,先把0x7E這個(gè)值賦給P0先,然后指針加1,此時(shí)的指針就是6了。

那么就有“P0=0x7E;”延時(shí)一秒之后,重新判斷“while(*str != '\0')”,顯然指針為6的內(nèi)存里也不是結(jié)束符,而是0xBD,所以執(zhí)行“P0=0xBD;”延時(shí)一秒。

后面再執(zhí)行兩次賦值給P0為0xDB,0xE7之后,由于此時(shí)指針加1之后指向了0x00,也就是結(jié)束符,不滿足了“while(*str != '\0')”,該函數(shù)就執(zhí)行完了。于是就到執(zhí)行主函數(shù)里的“while(1);”,后面我們看到開發(fā)板的實(shí)驗(yàn)現(xiàn)象就是中間兩盞燈一直保持常亮,因?yàn)橐呀?jīng)執(zhí)行完“LED_task(LEDSET);”了。

點(diǎn)贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:

一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程

從零到寫出一個(gè)爬蟲的Python編程課程

只會(huì)語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運(yùn)行等待時(shí)間)