找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 33500|回复: 41
打印 上一主题 下一主题
收起左侧

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

  [复制链接]
跳转到指定楼层
楼主
/**************************************************************************************
*                              LED闪烁实验                                                                                                  *
实现现象:下载程序后D11指示灯闪烁
注意事项:无                                                                                                                                                                  
***************************************************************************************/

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;


sbit led=P0^0;                 //将单片机的P0.0端口定义为led

/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
******************************************************************************/
void delay(u16 i)
{
        while(i--);        
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{
        while(1)
        {
                led=0;
                delay(100000); //大约延时450ms
                led=1;
                delay(10000); //大约延时450ms        
        }               
}
这里的代码
void delay (u6i)

是什么意思
为什么要设置这个
是给delay设置个最大值吗

QQ截图20180823235527.png (36.67 KB, 下载次数: 98)

QQ截图20180823235527.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2018-8-24 06:20 | 只看该作者
u16是  unsigned int 数据是无符号整形,最高位不表示符号,所以从 即从0x0000----0xffff。如果化成10进制就是0---65535。
其他数据的长度你可以参考一下标准的C语言方面的书籍,比如一个char型数据一般是8位的。一个long int型数据一般是32位的。

请先弄清楚 char ,short,long的大小再提问哦

delay是 阻塞延时

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:386381 发表于 2018-8-24 07:15 来自手机 | 只看该作者
这个闪灯案例看着像普中科技的,u16是无符号整型的变量名,int类占两个8位字节是让好理解是才用u16这个名,也可以取其它名代替,我也是初学者谨供参考。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:389489 发表于 2018-8-24 08:16 | 只看该作者
应该是unsigned short,而不是signed int

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:387733 发表于 2018-8-24 08:32 | 只看该作者
首先要纠正一下,不是(u6i), 而是(u16 i), 注意中间是有空格的。程序前面有定义:typedef unsigned int u16;
u16 就是 数据类型 unsigned int 的缩写,因此函数名void delay(u16 i)表示调用该函数时,需要带一个16位无符号整型数的参量,不同的参量值决定了不同的延时时间。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:389507 发表于 2018-8-24 09:11 | 只看该作者
就是参数为16位(无符号整形)的延时函数,放在主函数前面,可以不用声明即可调用

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:381818 发表于 2018-8-24 09:22 | 只看该作者
楼主有点萌,还是再补一下C语言知识吧,加油↖(^ω^)↗
回复

使用道具 举报

8#
ID:380444 发表于 2018-8-24 09:42 来自手机 | 只看该作者
U16是你定义的变量类型,i
回复

使用道具 举报

9#
ID:380444 发表于 2018-8-24 09:43 来自手机 | 只看该作者
u16是你定义的变量类型,i是你定义的变量名,

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

10#
ID:389626 发表于 2018-8-24 13:56 | 只看该作者
u16 是unsigned int 最大为2的16次方
回复

使用道具 举报

11#
ID:389943 发表于 2018-8-25 15:03 | 只看该作者
u16是无符号整型的变量名
回复

使用道具 举报

12#
ID:390775 发表于 2018-8-31 16:55 | 只看该作者
typedef unsigned int u16;          //对数据类型进行声明定义
  自己定义了一个u16的数据类型 意思相当于 unsigned int 类型 为了简化代码
void delay(u16 i)  自己写的一个延时函数 为了延时当  i = 1 是延时 10us  
可以根据自己需要  输入i的值达到自己想要的延时时间


回复

使用道具 举报

13#
ID:367460 发表于 2018-8-31 22:35 | 只看该作者
你把上面的  typedef  unsigned int u16   意思就是    u16 是无符号整形的数   如果你不适应就别用 typedef了
回复

使用道具 举报

14#
ID:363376 发表于 2018-9-1 10:25 | 只看该作者
用了typedef unsigned int u16; u16就是unsigned int了,
回复

使用道具 举报

15#
ID:303240 发表于 2018-9-1 11:29 | 只看该作者
void delay 是一个无返回值的函数括号里面无符号整形变量,来定义I的变量类型
回复

使用道具 举报

16#
ID:480306 发表于 2019-2-25 11:37 | 只看该作者
为什么 u16 与i之间加入逗号就不能运行程序了
回复

使用道具 举报

17#
ID:480361 发表于 2019-2-25 14:44 | 只看该作者
u16 的意思是说延迟的最大数用二进制表示不能超过16位(0XFFFF).
回复

使用道具 举报

18#
ID:410972 发表于 2019-2-25 16:18 | 只看该作者
因为主函数(就是main()里面),要用到delay(100000),所以要定义void delay()
回复

使用道具 举报

19#
ID:410972 发表于 2019-2-25 16:22 | 只看该作者
typedef unsigned int u16 的意思是u16等价unsigned int(变量类型的范围0~65535),显然100000已经超过unsigned int的范围了。我建议你看些C语言书籍 数据类型,函数,希望对你有用,谢谢
回复

使用道具 举报

20#
ID:480511 发表于 2019-2-25 17:23 | 只看该作者
简单的来说就是需要重新定义delay延时函数
回复

使用道具 举报

21#
ID:479925 发表于 2019-2-25 20:19 | 只看该作者
重新定义delay()函数。
回复

使用道具 举报

22#
ID:472242 发表于 2019-2-26 00:27 | 只看该作者
typedef unsigned int u16;   说白是  unsigned int  赋值范围是0-65535
回复

使用道具 举报

23#
ID:461889 发表于 2019-2-26 11:59 | 只看该作者
C基础要补补了,unsigned int 无符号整型,定义变量i的范围0-65535.也就是delay()延时函数的最大值。
回复

使用道具 举报

24#
ID:318489 发表于 2019-2-26 14:02 | 只看该作者
u16 是你需要定义的变量类型啊
回复

使用道具 举报

25#
ID:480816 发表于 2019-2-26 14:52 来自手机 | 只看该作者
兄弟这是个延时函数 经过上边定义了u16 u16定义的变量就相当于unsigned int型 这个函数的注释也说明了 i为1的时候可以延时10us 也就是说根据需要给i赋值可以最多延时10乘2的16次方长度的时间
回复

使用道具 举报

26#
ID:480849 发表于 2019-2-26 14:54 | 只看该作者
应该是unsigned short,而不是signed int
回复

使用道具 举报

27#
ID:434820 发表于 2019-2-26 16:40 | 只看该作者
无符号整型的变量名
回复

使用道具 举报

28#
ID:474418 发表于 2019-3-10 17:14 | 只看该作者
typedef unsigned char u8 后面也没有用到啊
回复

使用道具 举报

29#
ID:89835 发表于 2019-4-3 22:37 | 只看该作者
void delay(u16 i)
{
        while(i--);        
}
实际上是定义一个16位无符号数i,当定义了i的值后,执行i--操作,直至i--=0,跳出循环
回复

使用道具 举报

30#
ID:439215 发表于 2019-5-4 17:30 | 只看该作者
void delay(u16 i)
{
        while(i--);       
}这里当I=1时,怎么就是延时10us
回复

使用道具 举报

31#
ID:260597 发表于 2019-5-5 16:29 | 只看该作者
不是(u6i), 而是(u16 i), 注意中间是有空格的。程序前面有定义:typedef unsigned int u16;
u16 就是 数据类型 unsigned int 的缩写,因此函数名void delay(u16 i)表示调用该函数时,需要带一个16位无符号整型数的参量,不同的参量值决定了不同的延时时间。
回复

使用道具 举报

32#
ID:345562 发表于 2019-5-5 17:20 | 只看该作者
typedef unsigned int u16; 普通的说就是给typedef unsigned int取个小名叫u16,typedef unsigned int你问我是什么意思,我不知,我也记不住,我查那才知是16位无符号数,如是就用自己理解的无符号16位u16代,以后的程序中都用u16,我能记的,不用记不住的那个typedef unsigned int,我也一样怕英记。
回复

使用道具 举报

33#
ID:527881 发表于 2019-5-5 18:49 | 只看该作者
应该是unsigned short
回复

使用道具 举报

34#
ID:522450 发表于 2019-5-5 20:10 | 只看该作者
/**************************************************************************************
*                              LED闪烁实验                                                                                                  *
实现现象:下载程序后D11指示灯闪烁
注意事项:无                                                                                                                                                                  
***************************************************************************************/

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#define uint unsigned int;         //对数据类型进行声明定义
#define uchar unsigned char ;


sbit led=P0^0;                 //将单片机的P0.0端口定义为led

/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
******************************************************************************/
void delay(uint i)
{
        while(i--);        
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{
        while(1)
        {
                led=0;
                delay(10000); //大约延时450ms
                led=1;
                delay(10000); //大约延时450ms        
        }               

这样容易理解了

那个uchar这里没有用到

delay的参数,有一个写错了,大约延时450ms,应该都是10000吧

回复

使用道具 举报

35#
ID:525068 发表于 2019-5-5 23:16 | 只看该作者
这是在定义一个延时子函数,void表示无返回值,delay再单片机程序中通常代表延时,void开头,如:void delay(),void SEG等,都是在写子函数,U16  i是在定义一个变量,U16是unsigned int的重定义,代表你定义的变量占16个字节
回复

使用道具 举报

36#
ID:718749 发表于 2020-4-3 09:15 | 只看该作者
延时的作用,。U16 i是定义一个名为i的16位变量,U16应该是unsigned short
回复

使用道具 举报

37#
ID:478073 发表于 2020-4-3 10:29 | 只看该作者
原代码没有错,提问的反到把内容抄错了,这也间接说明楼主的一些问题
回复

使用道具 举报

38#
ID:841242 发表于 2020-11-9 21:18 | 只看该作者
菜鸟询问一下,我吧while(i--)改为了while(i++),然后无论怎么改delay()中的值,灯的闪烁频率不变,但是delay()中不能为0,为0,灯就是常亮。写入1和写入100000,LED灯闪烁速度不变。这是为什么?而且编译时候还不报警。
回复

使用道具 举报

39#
ID:180919 发表于 2020-11-10 00:43 | 只看该作者
u16是  unsigned int 数据是无符号整形 数值在0`65536.
i是下面delay(10000)数值。
意思是主程序执行延时程序时。
i取delay括号的数值进行i减1.直到i=0后结束延时。
回复

使用道具 举报

40#
ID:169141 发表于 2020-11-10 09:39 | 只看该作者
延时函数。u16是无符号整型,这样传的数就可以在0-65536范围内
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表