找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎么让LED灯发生闪烁,这个单片机程序是哪里错了?

  [复制链接]
跳转到指定楼层
楼主
ID:665608 发表于 2020-1-22 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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)        ;
                }
}

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

使用道具 举报

沙发
ID:213173 发表于 2020-1-23 06:35 | 只看该作者
u8是8位数据类型,最大255,delay(5000);代入的参数溢出后实际只有154,达不到预想的延时时间。
回复

使用道具 举报

板凳
ID:94031 发表于 2020-1-23 10:13 | 只看该作者
注意 u8 i 最大256,你不可能让它等于5000,u8改为u16.
回复

使用道具 举报

地板
ID:665608 发表于 2020-1-23 10:15 | 只看该作者
wulin 发表于 2020-1-23 06:35
u8是8位数据类型,最大255,delay(5000);代入的参数溢出后实际只有154,达不到预想的延时时间。

谢谢
回复

使用道具 举报

5#
ID:687958 发表于 2020-1-23 10:59 | 只看该作者
这样达不到预想的延时时间。u8是8位数据类型;代入的参数溢出后实际只有154,
回复

使用道具 举报

6#
ID:93224 发表于 2020-1-23 11:14 | 只看该作者
建议你把C语言好好学习下
回复

使用道具 举报

7#
ID:665608 发表于 2020-1-23 11:20 | 只看该作者
wulin 发表于 2020-1-23 06:35
u8是8位数据类型,最大255,delay(5000);代入的参数溢出后实际只有154,达不到预想的延时时间。

那应该设多少数值?
回复

使用道具 举报

8#
ID:235200 发表于 2020-1-23 14:17 | 只看该作者
108880802 发表于 2020-1-23 11:20
那应该设多少数值?

60000约0.5秒
回复

使用道具 举报

9#
ID:462827 发表于 2020-1-23 18:11 | 只看该作者
typedef unsigned char  u8;
在这行后面再加一行:
typedef unsigned int  u16;

然后把delay()里的 u8 i 改成 u16 i
回复

使用道具 举报

10#
ID:294296 发表于 2020-1-24 01:17 | 只看该作者
uchar的范围是0~255,uint的范围是0~65535,你的延时数值超了.
回复

使用道具 举报

11#
ID:688045 发表于 2020-1-24 02:34 | 只看该作者
u8不太够吧
回复

使用道具 举报

12#
ID:688145 发表于 2020-1-25 19:20 | 只看该作者
我记得delay函数大部分用的是u8,你的5000超过了。
回复

使用道具 举报

13#
ID:420836 发表于 2020-1-26 07:39 | 只看该作者
u8的范围只是0~255, delay函数用5000超过了u8的范围;
u8改为u16;
回复

使用道具 举报

14#
ID:688258 发表于 2020-1-26 22:40 | 只看该作者
u8没有意义 直接unsigned char 之后延时取反就好
回复

使用道具 举报

15#
ID:688258 发表于 2020-1-26 22:40 | 只看该作者
u8没有意义 直接unsigned char 之后利用for语句延时取反就好
回复

使用道具 举报

16#
ID:665608 发表于 2020-1-28 19:22 | 只看该作者
miss匚you 发表于 2020-1-26 22:40
u8没有意义 直接unsigned char 之后利用for语句延时取反就好

怎么用for语句延时
回复

使用道具 举报

17#
ID:688717 发表于 2020-1-30 09:47 | 只看该作者
改为typedef   unsigned  int  u16
后面改为delay(50000)
回复

使用道具 举报

18#
ID:689654 发表于 2020-2-3 12:51 | 只看该作者
把typedef unsigned char u8中的unsigned char改成unsigned int就行了
回复

使用道具 举报

19#
ID:207589 发表于 2020-2-5 00:10 | 只看该作者
直接把 char  改成 int
回复

使用道具 举报

20#
ID:679425 发表于 2020-2-5 10:55 | 只看该作者
延时数值超
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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