找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 33693|回復: 41
打印 上一主題 下一主題
收起左側(cè)

51單片機程序解答,void delay (u6i)是什么意思?

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:389467 發(fā)表于 2018-8-23 23:57 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
/**************************************************************************************
*                              LED閃爍實驗                                                                                                  *
實現(xiàn)現(xiàn)象:下載程序后D11指示燈閃爍
注意事項:無                                                                                                                                                                  
***************************************************************************************/

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


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

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

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

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

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

QQ截圖20180823235527.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:155507 發(fā)表于 2018-8-24 06:20 | 只看該作者
u16是  unsigned int 數(shù)據(jù)是無符號整形,最高位不表示符號,所以從 即從0x0000----0xffff。如果化成10進制就是0---65535。
其他數(shù)據(jù)的長度你可以參考一下標準的C語言方面的書籍,比如一個char型數(shù)據(jù)一般是8位的。一個long int型數(shù)據(jù)一般是32位的。

請先弄清楚 char ,short,long的大小再提問哦

delay是 阻塞延時

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:386381 發(fā)表于 2018-8-24 07:15 來自觸屏版 | 只看該作者
這個閃燈案例看著像普中科技的,u16是無符號整型的變量名,int類占兩個8位字節(jié)是讓好理解是才用u16這個名,也可以取其它名代替,我也是初學者謹供參考。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:389489 發(fā)表于 2018-8-24 08:16 | 只看該作者
應該是unsigned short,而不是signed int

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:387733 發(fā)表于 2018-8-24 08:32 | 只看該作者
首先要糾正一下,不是(u6i), 而是(u16 i), 注意中間是有空格的。程序前面有定義:typedef unsigned int u16;
u16 就是 數(shù)據(jù)類型 unsigned int 的縮寫,因此函數(shù)名void delay(u16 i)表示調(diào)用該函數(shù)時,需要帶一個16位無符號整型數(shù)的參量,不同的參量值決定了不同的延時時間。

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:389507 發(fā)表于 2018-8-24 09:11 | 只看該作者
就是參數(shù)為16位(無符號整形)的延時函數(shù),放在主函數(shù)前面,可以不用聲明即可調(diào)用

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:381818 發(fā)表于 2018-8-24 09:22 | 只看該作者
樓主有點萌,還是再補一下C語言知識吧,加油↖(^ω^)↗
回復

使用道具 舉報

8#
ID:380444 發(fā)表于 2018-8-24 09:42 來自觸屏版 | 只看該作者
U16是你定義的變量類型,i
回復

使用道具 舉報

9#
ID:380444 發(fā)表于 2018-8-24 09:43 來自觸屏版 | 只看該作者
u16是你定義的變量類型,i是你定義的變量名,

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

10#
ID:389626 發(fā)表于 2018-8-24 13:56 | 只看該作者
u16 是unsigned int 最大為2的16次方
回復

使用道具 舉報

11#
ID:389943 發(fā)表于 2018-8-25 15:03 | 只看該作者
u16是無符號整型的變量名
回復

使用道具 舉報

12#
ID:390775 發(fā)表于 2018-8-31 16:55 | 只看該作者
typedef unsigned int u16;          //對數(shù)據(jù)類型進行聲明定義
  自己定義了一個u16的數(shù)據(jù)類型 意思相當于 unsigned int 類型 為了簡化代碼
void delay(u16 i)  自己寫的一個延時函數(shù) 為了延時當  i = 1 是延時 10us  
可以根據(jù)自己需要  輸入i的值達到自己想要的延時時間


回復

使用道具 舉報

13#
ID:367460 發(fā)表于 2018-8-31 22:35 | 只看該作者
你把上面的  typedef  unsigned int u16   意思就是    u16 是無符號整形的數(shù)   如果你不適應就別用 typedef了
回復

使用道具 舉報

14#
ID:363376 發(fā)表于 2018-9-1 10:25 | 只看該作者
用了typedef unsigned int u16; u16就是unsigned int了,
回復

使用道具 舉報

15#
ID:303240 發(fā)表于 2018-9-1 11:29 | 只看該作者
void delay 是一個無返回值的函數(shù)括號里面無符號整形變量,來定義I的變量類型
回復

使用道具 舉報

16#
ID:480306 發(fā)表于 2019-2-25 11:37 | 只看該作者
為什么 u16 與i之間加入逗號就不能運行程序了
回復

使用道具 舉報

17#
ID:480361 發(fā)表于 2019-2-25 14:44 | 只看該作者
u16 的意思是說延遲的最大數(shù)用二進制表示不能超過16位(0XFFFF).
回復

使用道具 舉報

18#
ID:410972 發(fā)表于 2019-2-25 16:18 | 只看該作者
因為主函數(shù)(就是main()里面),要用到delay(100000),所以要定義void delay()
回復

使用道具 舉報

19#
ID:410972 發(fā)表于 2019-2-25 16:22 | 只看該作者
typedef unsigned int u16 的意思是u16等價unsigned int(變量類型的范圍0~65535),顯然100000已經(jīng)超過unsigned int的范圍了。我建議你看些C語言書籍 數(shù)據(jù)類型,函數(shù),希望對你有用,謝謝
回復

使用道具 舉報

20#
ID:480511 發(fā)表于 2019-2-25 17:23 | 只看該作者
簡單的來說就是需要重新定義delay延時函數(shù)
回復

使用道具 舉報

21#
ID:479925 發(fā)表于 2019-2-25 20:19 | 只看該作者
重新定義delay()函數(shù)。
回復

使用道具 舉報

22#
ID:472242 發(fā)表于 2019-2-26 00:27 | 只看該作者
typedef unsigned int u16;   說白是  unsigned int  賦值范圍是0-65535
回復

使用道具 舉報

23#
ID:461889 發(fā)表于 2019-2-26 11:59 | 只看該作者
C基礎(chǔ)要補補了,unsigned int 無符號整型,定義變量i的范圍0-65535.也就是delay()延時函數(shù)的最大值。
回復

使用道具 舉報

24#
ID:318489 發(fā)表于 2019-2-26 14:02 | 只看該作者
u16 是你需要定義的變量類型啊
回復

使用道具 舉報

25#
ID:480816 發(fā)表于 2019-2-26 14:52 來自觸屏版 | 只看該作者
兄弟這是個延時函數(shù) 經(jīng)過上邊定義了u16 u16定義的變量就相當于unsigned int型 這個函數(shù)的注釋也說明了 i為1的時候可以延時10us 也就是說根據(jù)需要給i賦值可以最多延時10乘2的16次方長度的時間
回復

使用道具 舉報

26#
ID:480849 發(fā)表于 2019-2-26 14:54 | 只看該作者
應該是unsigned short,而不是signed int
回復

使用道具 舉報

27#
ID:434820 發(fā)表于 2019-2-26 16:40 | 只看該作者
無符號整型的變量名
回復

使用道具 舉報

28#
ID:474418 發(fā)表于 2019-3-10 17:14 | 只看該作者
typedef unsigned char u8 后面也沒有用到啊
回復

使用道具 舉報

29#
ID:89835 發(fā)表于 2019-4-3 22:37 | 只看該作者
void delay(u16 i)
{
        while(i--);        
}
實際上是定義一個16位無符號數(shù)i,當定義了i的值后,執(zhí)行i--操作,直至i--=0,跳出循環(huán)
回復

使用道具 舉報

30#
ID:439215 發(fā)表于 2019-5-4 17:30 | 只看該作者
void delay(u16 i)
{
        while(i--);       
}這里當I=1時,怎么就是延時10us
回復

使用道具 舉報

31#
ID:260597 發(fā)表于 2019-5-5 16:29 | 只看該作者
不是(u6i), 而是(u16 i), 注意中間是有空格的。程序前面有定義:typedef unsigned int u16;
u16 就是 數(shù)據(jù)類型 unsigned int 的縮寫,因此函數(shù)名void delay(u16 i)表示調(diào)用該函數(shù)時,需要帶一個16位無符號整型數(shù)的參量,不同的參量值決定了不同的延時時間。
回復

使用道具 舉報

32#
ID:345562 發(fā)表于 2019-5-5 17:20 | 只看該作者
typedef unsigned int u16; 普通的說就是給typedef unsigned int取個小名叫u16,typedef unsigned int你問我是什么意思,我不知,我也記不住,我查那才知是16位無符號數(shù),如是就用自己理解的無符號16位u16代,以后的程序中都用u16,我能記的,不用記不住的那個typedef unsigned int,我也一樣怕英記。
回復

使用道具 舉報

33#
ID:527881 發(fā)表于 2019-5-5 18:49 | 只看該作者
應該是unsigned short
回復

使用道具 舉報

34#
ID:522450 發(fā)表于 2019-5-5 20:10 | 只看該作者
/**************************************************************************************
*                              LED閃爍實驗                                                                                                  *
實現(xiàn)現(xiàn)象:下載程序后D11指示燈閃爍
注意事項:無                                                                                                                                                                  
***************************************************************************************/

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


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

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

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

這樣容易理解了

那個uchar這里沒有用到

delay的參數(shù),有一個寫錯了,大約延時450ms,應該都是10000吧

回復

使用道具 舉報

35#
ID:525068 發(fā)表于 2019-5-5 23:16 | 只看該作者
這是在定義一個延時子函數(shù),void表示無返回值,delay再單片機程序中通常代表延時,void開頭,如:void delay(),void SEG等,都是在寫子函數(shù),U16  i是在定義一個變量,U16是unsigned int的重定義,代表你定義的變量占16個字節(jié)
回復

使用道具 舉報

36#
ID:718749 發(fā)表于 2020-4-3 09:15 | 只看該作者
延時的作用,。U16 i是定義一個名為i的16位變量,U16應該是unsigned short
回復

使用道具 舉報

37#
ID:478073 發(fā)表于 2020-4-3 10:29 | 只看該作者
原代碼沒有錯,提問的反到把內(nèi)容抄錯了,這也間接說明樓主的一些問題
回復

使用道具 舉報

38#
ID:841242 發(fā)表于 2020-11-9 21:18 | 只看該作者
菜鳥詢問一下,我吧while(i--)改為了while(i++),然后無論怎么改delay()中的值,燈的閃爍頻率不變,但是delay()中不能為0,為0,燈就是常亮。寫入1和寫入100000,LED燈閃爍速度不變。這是為什么?而且編譯時候還不報警。
回復

使用道具 舉報

39#
ID:180919 發(fā)表于 2020-11-10 00:43 | 只看該作者
u16是  unsigned int 數(shù)據(jù)是無符號整形 數(shù)值在0`65536.
i是下面delay(10000)數(shù)值。
意思是主程序執(zhí)行延時程序時。
i取delay括號的數(shù)值進行i減1.直到i=0后結(jié)束延時。
回復

使用道具 舉報

40#
ID:169141 發(fā)表于 2020-11-10 09:39 | 只看該作者
延時函數(shù)。u16是無符號整型,這樣傳的數(shù)就可以在0-65536范圍內(nèi)
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表