標(biāo)題: 51單片機(jī)程序解答,void delay (u6i)是什么意思? [打印本頁(yè)]

作者: 小草殺    時(shí)間: 2018-8-23 23:57
標(biāo)題: 51單片機(jī)程序解答,void delay (u6i)是什么意思?
/**************************************************************************************
*                              LED閃爍實(shí)驗(yàn)                                                                                                  *
實(shí)現(xiàn)現(xiàn)象:下載程序后D11指示燈閃爍
注意事項(xiàng):無(wú)                                                                                                                                                                  
***************************************************************************************/

#include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器
typedef unsigned int u16;          //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
typedef unsigned char u8;


sbit led=P0^0;                 //將單片機(jī)的P0.0端口定義為led

/*******************************************************************************
* 函 數(shù) 名         : delay
* 函數(shù)功能                   : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
******************************************************************************/
void delay(u16 i)
{
        while(i--);        
}

/*******************************************************************************
* 函 數(shù) 名       : main
* 函數(shù)功能                 : 主函數(shù)
* 輸    入       : 無(wú)
* 輸    出             : 無(wú)
*******************************************************************************/
void main()
{
        while(1)
        {
                led=0;
                delay(100000); //大約延時(shí)450ms
                led=1;
                delay(10000); //大約延時(shí)450ms        
        }               
}
這里的代碼
void delay (u6i)

是什么意思
為什么要設(shè)置這個(gè)
是給delay設(shè)置個(gè)最大值嗎

QQ截圖20180823235527.png (36.67 KB, 下載次數(shù): 98)

QQ截圖20180823235527.png

作者: angmall    時(shí)間: 2018-8-24 06:20
u16是  unsigned int 數(shù)據(jù)是無(wú)符號(hào)整形,最高位不表示符號(hào),所以從 即從0x0000----0xffff。如果化成10進(jìn)制就是0---65535。
其他數(shù)據(jù)的長(zhǎng)度你可以參考一下標(biāo)準(zhǔn)的C語(yǔ)言方面的書(shū)籍,比如一個(gè)char型數(shù)據(jù)一般是8位的。一個(gè)long int型數(shù)據(jù)一般是32位的。

請(qǐng)先弄清楚 char ,short,long的大小再提問(wèn)哦

delay是 阻塞延時(shí)

作者: 文鳳軒    時(shí)間: 2018-8-24 07:15
這個(gè)閃燈案例看著像普中科技的,u16是無(wú)符號(hào)整型的變量名,int類(lèi)占兩個(gè)8位字節(jié)是讓好理解是才用u16這個(gè)名,也可以取其它名代替,我也是初學(xué)者謹(jǐn)供參考。
作者: chengju    時(shí)間: 2018-8-24 08:16
應(yīng)該是unsigned short,而不是signed int
作者: sxhwdz    時(shí)間: 2018-8-24 08:32
首先要糾正一下,不是(u6i), 而是(u16 i), 注意中間是有空格的。程序前面有定義:typedef unsigned int u16;
u16 就是 數(shù)據(jù)類(lèi)型 unsigned int 的縮寫(xiě),因此函數(shù)名void delay(u16 i)表示調(diào)用該函數(shù)時(shí),需要帶一個(gè)16位無(wú)符號(hào)整型數(shù)的參量,不同的參量值決定了不同的延時(shí)時(shí)間。
作者: 輕芯~藍(lán)芯    時(shí)間: 2018-8-24 09:11
就是參數(shù)為16位(無(wú)符號(hào)整形)的延時(shí)函數(shù),放在主函數(shù)前面,可以不用聲明即可調(diào)用
作者: 達(dá)達(dá)達(dá)    時(shí)間: 2018-8-24 09:22
樓主有點(diǎn)萌,還是再補(bǔ)一下C語(yǔ)言知識(shí)吧,加油↖(^ω^)↗
作者: ha7072    時(shí)間: 2018-8-24 09:42
U16是你定義的變量類(lèi)型,i
作者: ha7072    時(shí)間: 2018-8-24 09:43
u16是你定義的變量類(lèi)型,i是你定義的變量名,
作者: jay-zc    時(shí)間: 2018-8-24 13:56
u16 是unsigned int 最大為2的16次方
作者: 自動(dòng)化狗    時(shí)間: 2018-8-25 15:03
u16是無(wú)符號(hào)整型的變量名
作者: zhaoyinlo    時(shí)間: 2018-8-31 16:55
typedef unsigned int u16;          //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
  自己定義了一個(gè)u16的數(shù)據(jù)類(lèi)型 意思相當(dāng)于 unsigned int 類(lèi)型 為了簡(jiǎn)化代碼
void delay(u16 i)  自己寫(xiě)的一個(gè)延時(shí)函數(shù) 為了延時(shí)當(dāng)  i = 1 是延時(shí) 10us  
可以根據(jù)自己需要  輸入i的值達(dá)到自己想要的延時(shí)時(shí)間



作者: 昆明路口賣(mài)提莫    時(shí)間: 2018-8-31 22:35
你把上面的  typedef  unsigned int u16   意思就是    u16 是無(wú)符號(hào)整形的數(shù)   如果你不適應(yīng)就別用 typedef了
作者: 15873002171    時(shí)間: 2018-9-1 10:25
用了typedef unsigned int u16; u16就是unsigned int了,
作者: 賣(mài)蘋(píng)果的喬布斯    時(shí)間: 2018-9-1 11:29
void delay 是一個(gè)無(wú)返回值的函數(shù)括號(hào)里面無(wú)符號(hào)整形變量,來(lái)定義I的變量類(lèi)型
作者: wohahahah    時(shí)間: 2019-2-25 11:37
為什么 u16 與i之間加入逗號(hào)就不能運(yùn)行程序了
作者: wangnan31415926    時(shí)間: 2019-2-25 14:44
u16 的意思是說(shuō)延遲的最大數(shù)用二進(jìn)制表示不能超過(guò)16位(0XFFFF).
作者: 展昭    時(shí)間: 2019-2-25 16:18
因?yàn)橹骱瘮?shù)(就是main()里面),要用到delay(100000),所以要定義void delay()
作者: 展昭    時(shí)間: 2019-2-25 16:22
typedef unsigned int u16 的意思是u16等價(jià)unsigned int(變量類(lèi)型的范圍0~65535),顯然100000已經(jīng)超過(guò)unsigned int的范圍了。我建議你看些C語(yǔ)言書(shū)籍 數(shù)據(jù)類(lèi)型,函數(shù),希望對(duì)你有用,謝謝
作者: 實(shí)勘    時(shí)間: 2019-2-25 17:23
簡(jiǎn)單的來(lái)說(shuō)就是需要重新定義delay延時(shí)函數(shù)
作者: lsh123456789    時(shí)間: 2019-2-25 20:19
重新定義delay()函數(shù)。
作者: shuisheng60    時(shí)間: 2019-2-26 00:27
typedef unsigned int u16;   說(shuō)白是  unsigned int  賦值范圍是0-65535
作者: 2019keil    時(shí)間: 2019-2-26 11:59
C基礎(chǔ)要補(bǔ)補(bǔ)了,unsigned int 無(wú)符號(hào)整型,定義變量i的范圍0-65535.也就是delay()延時(shí)函數(shù)的最大值。
作者: zyx123    時(shí)間: 2019-2-26 14:02
u16 是你需要定義的變量類(lèi)型啊
作者: firstmvp    時(shí)間: 2019-2-26 14:52
兄弟這是個(gè)延時(shí)函數(shù) 經(jīng)過(guò)上邊定義了u16 u16定義的變量就相當(dāng)于unsigned int型 這個(gè)函數(shù)的注釋也說(shuō)明了 i為1的時(shí)候可以延時(shí)10us 也就是說(shuō)根據(jù)需要給i賦值可以最多延時(shí)10乘2的16次方長(zhǎng)度的時(shí)間
作者: 18370095532    時(shí)間: 2019-2-26 14:54
應(yīng)該是unsigned short,而不是signed int
作者: zhan8665    時(shí)間: 2019-2-26 16:40
無(wú)符號(hào)整型的變量名
作者: KYKY    時(shí)間: 2019-3-10 17:14
typedef unsigned char u8 后面也沒(méi)有用到啊
作者: 飛將軍    時(shí)間: 2019-4-3 22:37
void delay(u16 i)
{
        while(i--);        
}
實(shí)際上是定義一個(gè)16位無(wú)符號(hào)數(shù)i,當(dāng)定義了i的值后,執(zhí)行i--操作,直至i--=0,跳出循環(huán)
作者: TIANSHAOPENG123    時(shí)間: 2019-5-4 17:30
void delay(u16 i)
{
        while(i--);       
}這里當(dāng)I=1時(shí),怎么就是延時(shí)10us
作者: 877140465    時(shí)間: 2019-5-5 16:29
不是(u6i), 而是(u16 i), 注意中間是有空格的。程序前面有定義:typedef unsigned int u16;
u16 就是 數(shù)據(jù)類(lèi)型 unsigned int 的縮寫(xiě),因此函數(shù)名void delay(u16 i)表示調(diào)用該函數(shù)時(shí),需要帶一個(gè)16位無(wú)符號(hào)整型數(shù)的參量,不同的參量值決定了不同的延時(shí)時(shí)間。
作者: PBL    時(shí)間: 2019-5-5 17:20
typedef unsigned int u16; 普通的說(shuō)就是給typedef unsigned int取個(gè)小名叫u16,typedef unsigned int你問(wèn)我是什么意思,我不知,我也記不住,我查那才知是16位無(wú)符號(hào)數(shù),如是就用自己理解的無(wú)符號(hào)16位u16代,以后的程序中都用u16,我能記的,不用記不住的那個(gè)typedef unsigned int,我也一樣怕英記。
作者: LlllL12    時(shí)間: 2019-5-5 18:49
應(yīng)該是unsigned short
作者: tigerlyt    時(shí)間: 2019-5-5 20:10
/**************************************************************************************
*                              LED閃爍實(shí)驗(yàn)                                                                                                  *
實(shí)現(xiàn)現(xiàn)象:下載程序后D11指示燈閃爍
注意事項(xiàng):無(wú)                                                                                                                                                                  
***************************************************************************************/

#include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器
#define uint unsigned int;         //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
#define uchar unsigned char ;


sbit led=P0^0;                 //將單片機(jī)的P0.0端口定義為led

/*******************************************************************************
* 函 數(shù) 名         : delay
* 函數(shù)功能                   : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
******************************************************************************/
void delay(uint i)
{
        while(i--);        
}

/*******************************************************************************
* 函 數(shù) 名       : main
* 函數(shù)功能                 : 主函數(shù)
* 輸    入       : 無(wú)
* 輸    出             : 無(wú)
*******************************************************************************/
void main()
{
        while(1)
        {
                led=0;
                delay(10000); //大約延時(shí)450ms
                led=1;
                delay(10000); //大約延時(shí)450ms        
        }               

這樣容易理解了

那個(gè)uchar這里沒(méi)有用到

delay的參數(shù),有一個(gè)寫(xiě)錯(cuò)了,大約延時(shí)450ms,應(yīng)該都是10000吧


作者: 1255230    時(shí)間: 2019-5-5 23:16
這是在定義一個(gè)延時(shí)子函數(shù),void表示無(wú)返回值,delay再單片機(jī)程序中通常代表延時(shí),void開(kāi)頭,如:void delay(),void SEG等,都是在寫(xiě)子函數(shù),U16  i是在定義一個(gè)變量,U16是unsigned int的重定義,代表你定義的變量占16個(gè)字節(jié)
作者: Evanleung    時(shí)間: 2020-4-3 09:15
延時(shí)的作用,。U16 i是定義一個(gè)名為i的16位變量,U16應(yīng)該是unsigned short
作者: 春風(fēng)十里吹    時(shí)間: 2020-4-3 10:29
原代碼沒(méi)有錯(cuò),提問(wèn)的反到把內(nèi)容抄錯(cuò)了,這也間接說(shuō)明樓主的一些問(wèn)題
作者: renxiang123    時(shí)間: 2020-11-9 21:18
菜鳥(niǎo)詢(xún)問(wèn)一下,我吧while(i--)改為了while(i++),然后無(wú)論怎么改delay()中的值,燈的閃爍頻率不變,但是delay()中不能為0,為0,燈就是常亮。寫(xiě)入1和寫(xiě)入100000,LED燈閃爍速度不變。這是為什么?而且編譯時(shí)候還不報(bào)警。

作者: changhz    時(shí)間: 2020-11-10 00:43
u16是  unsigned int 數(shù)據(jù)是無(wú)符號(hào)整形 數(shù)值在0`65536.
i是下面delay(10000)數(shù)值。
意思是主程序執(zhí)行延時(shí)程序時(shí)。
i取delay括號(hào)的數(shù)值進(jìn)行i減1.直到i=0后結(jié)束延時(shí)。
作者: ytchen520    時(shí)間: 2020-11-10 09:39
延時(shí)函數(shù)。u16是無(wú)符號(hào)整型,這樣傳的數(shù)就可以在0-65536范圍內(nèi)
作者: liangweichao    時(shí)間: 2020-11-10 10:39
u16就是數(shù)據(jù)類(lèi)型:unsigned int ,i就是unsigned int 類(lèi)型的變量
作者: 吳剛童    時(shí)間: 2021-4-1 18:27
u16就是無(wú)符號(hào)整型數(shù)據(jù),i就是u16就是無(wú)符號(hào)整型數(shù)據(jù),取值范圍0----65535   在此,i還沒(méi)有賦值
是否可以這樣理解?各位大師




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1