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

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-30 21:33:39
已绑定手机

2

主题

2

回帖

22

积分

新手上路

积分
22
发表于 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);
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:584
  • 最近打卡:2025-12-17 09:47:29

33

主题

2775

回帖

6154

积分

论坛元老

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

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:584
  • 最近打卡:2025-12-17 09:47:29

33

主题

2775

回帖

6154

积分

论坛元老

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

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:647
  • 最近打卡:2025-12-18 07:29:35
已绑定手机

93

主题

6940

回帖

1万

积分

超级版主

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

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:748
  • 最近打卡:2025-12-19 07:59:05
已绑定手机

55

主题

1953

回帖

3887

积分

论坛元老

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

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

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:507
  • 最近打卡:2025-12-18 08:09:57

23

主题

291

回帖

1855

积分

金牌会员

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

WHILE嵌套不正确,

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

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:207
  • 最近打卡:2025-12-18 08:43:57
已绑定手机

15

主题

625

回帖

774

积分

高级会员

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

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:191
  • 最近打卡:2025-12-18 08:26:01
已绑定手机

19

主题

543

回帖

1923

积分

金牌会员

积分
1923
发表于 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);
        }
}
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:588
  • 最近打卡:2025-12-19 00:09:32

9

主题

566

回帖

3817

积分

论坛元老

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

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

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

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

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:652
  • 最近打卡:2025-12-19 00:00:36
已绑定手机

19

主题

3291

回帖

6508

积分

论坛元老

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-12-19 08:11 , Processed in 0.133850 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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