标题: 怎么让LED灯发生闪烁,这个单片机程序是哪里错了? [打印本页]

作者: 108880802    时间: 2020-1-22 20:13
标题: 怎么让LED灯发生闪烁,这个单片机程序是哪里错了?
#include<reg51.h>

sbit led=P2^1;

typedef unsigned char  u8;
void delay( u8 i)
{
        while(i--);
}

void main()
{
        while(1)
                {
                led=0;
                delay(5000);
                led=1;
                delay(5000)        ;
                }
}


作者: wulin    时间: 2020-1-23 06:35
u8是8位数据类型,最大255,delay(5000);代入的参数溢出后实际只有154,达不到预想的延时时间。
作者: xuyaqi    时间: 2020-1-23 10:13
注意 u8 i 最大256,你不可能让它等于5000,u8改为u16.
作者: 108880802    时间: 2020-1-23 10:15
wulin 发表于 2020-1-23 06:35
u8是8位数据类型,最大255,delay(5000);代入的参数溢出后实际只有154,达不到预想的延时时间。

谢谢

作者: 夜华发    时间: 2020-1-23 10:59
这样达不到预想的延时时间。u8是8位数据类型;代入的参数溢出后实际只有154,
作者: lele5211314    时间: 2020-1-23 11:14
建议你把C语言好好学习下
作者: 108880802    时间: 2020-1-23 11:20
wulin 发表于 2020-1-23 06:35
u8是8位数据类型,最大255,delay(5000);代入的参数溢出后实际只有154,达不到预想的延时时间。

那应该设多少数值?

作者: csmyldl    时间: 2020-1-23 14:17
108880802 发表于 2020-1-23 11:20
那应该设多少数值?

60000约0.5秒
作者: hantu    时间: 2020-1-23 18:11
typedef unsigned char  u8;
在这行后面再加一行:
typedef unsigned int  u16;

然后把delay()里的 u8 i 改成 u16 i
作者: 钟志伟    时间: 2020-1-24 01:17
uchar的范围是0~255,uint的范围是0~65535,你的延时数值超了.
作者: fumoumou    时间: 2020-1-24 02:34
u8不太够吧
作者: csh5566    时间: 2020-1-25 19:20
我记得delay函数大部分用的是u8,你的5000超过了。
作者: TTQ001    时间: 2020-1-26 07:39
u8的范围只是0~255, delay函数用5000超过了u8的范围;
u8改为u16;
作者: miss匚you    时间: 2020-1-26 22:40
u8没有意义 直接unsigned char 之后延时取反就好
作者: miss匚you    时间: 2020-1-26 22:40
u8没有意义 直接unsigned char 之后利用for语句延时取反就好
作者: 108880802    时间: 2020-1-28 19:22
miss匚you 发表于 2020-1-26 22:40
u8没有意义 直接unsigned char 之后利用for语句延时取反就好

怎么用for语句延时
作者: 1656280399    时间: 2020-1-30 09:47
改为typedef   unsigned  int  u16
后面改为delay(50000)
作者: 785791359    时间: 2020-2-3 12:51
把typedef unsigned char u8中的unsigned char改成unsigned int就行了
作者: rooe    时间: 2020-2-5 00:10
直接把 char  改成 int
作者: haierzaifei11    时间: 2020-2-5 10:55
延时数值超




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1