找回密码
 立即注册
查看: 1905|回复: 10

这个延时函数为什么修改循环次数不管用

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-01-17 09:59:46
已绑定手机

3

主题

5

回帖

35

积分

新手上路

积分
35
发表于 2024-12-13 09:46:02 | 显示全部楼层 |阅读模式

STC8F2K6S2,在使用1602液晶延时函数时,定义了下面几个函数,在使用时修改毫秒、50毫秒、秒这3个函数的循环次数,都可以改变延时的结果,但是对于50微秒这个函数中,将i改为100,50,20,最后的延时都没有改变!搞不明白这是为什么?
void delay_50us(uchar us50){ //@12.000MHz
uchar i;
i = 198; //i=198:STC软件中查到的12M时钟数据
while(us50--)while (--i);
}
void delay_ms(unsigned char ms){
while(ms--)delay_50us(20); //100
}
void delay_50ms(uchar i){
while(i--)delay_ms(50);
}
void delay_s(unsigned char s){
while(s--)delay_50ms(20);
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:697
  • 最近打卡:2026-07-04 21:56:03

33

主题

3007

回帖

6880

积分

论坛元老

积分
6880
发表于 2024-12-13 10:08:07 | 显示全部楼层

能说说你是怎么判断 延时改变了呢 xiaojiujie

参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:697
  • 最近打卡:2026-07-04 21:56:03

33

主题

3007

回帖

6880

积分

论坛元老

积分
6880
发表于 2024-12-13 10:12:47 | 显示全部楼层
再者就是你能说明一下 你的第一个50us函数中 i 再每次循环中的数值变化么
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:727
  • 最近打卡:2026-06-26 17:48:25
已绑定手机

95

主题

7373

回帖

1万

积分

超级版主

积分
13944
发表于 2024-12-13 10:45:27 | 显示全部楼层
建议直接使用AI-ISP生成延时函数,优化等级默认
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:944
  • 最近打卡:2026-07-05 10:37:41
已绑定手机

61

主题

2089

回帖

3081

积分

论坛元老

积分
3081
发表于 2024-12-13 10:46:47 | 显示全部楼层

image.png这里不一样,没有定义uchar?

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:622
  • 最近打卡:2026-07-04 10:38:51

22

主题

292

回帖

2085

积分

金牌会员

积分
2085
发表于 2024-12-13 11:12:31 | 显示全部楼层

WHILE嵌套不正确,

代码书写尽量做到规范,好查找问题

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2026-02-14 08:46:29
已绑定手机

15

主题

619

回帖

756

积分

高级会员

积分
756
发表于 2024-12-13 11:28:09 | 显示全部楼层
Debu*** 发表于 2024-12-13 10:45
建议直接使用AI-ISP生成延时函数,优化等级默认

AI-ISP的函数生成很好用的
STC 666 888
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:295
  • 最近打卡:2026-07-03 15:36:22
已绑定手机

22

主题

663

回帖

2480

积分

金牌会员

积分
2480
发表于 2024-12-13 11:36:10 | 显示全部楼层
void delay_50us(uchar us50)
{ //@12.000MHz
        uchar i;
       
        while(us50--)
        {
                i = 198; //i=198:STC软件中查到的12M时钟数据
                while (--i);
        }
}
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:764
  • 最近打卡:2026-07-05 00:30:28

9

主题

673

回帖

4754

积分

论坛元老

积分
4754
发表于 2024-12-13 11:44:52 | 显示全部楼层

i = 198; //i=198:STC软件中查到的12M时钟数据
while(us50--)while (--i);

这种写法确实不太规范,看着别扭.另外,

us延时函数里,后面这个while (i--)多了一个空格,试试看是不是这个空格引起的问题

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:850
  • 最近打卡:2026-07-06 00:18:17
已绑定手机

19

主题

3440

回帖

7460

积分

论坛元老

积分
7460
发表于 2024-12-13 13:07:42 来自手机 | 显示全部楼层
这套娃操作,一般才延时不建议软件延时。还是建议使用ISP软件生成的延时来。
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-6 03:47 , Processed in 0.080540 second(s), 98 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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