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

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

[复制链接]
已绑定手机

2

主题

1

回帖

14

积分

新手上路

积分
14
发表于 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
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

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

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

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

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

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:337
  • 最近打卡:2025-04-28 12:55:00

23

主题

296

回帖

1160

积分

金牌会员

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

WHILE嵌套不正确,

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

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:154
  • 最近打卡:2025-04-30 08:40:57
已绑定手机

15

主题

630

回帖

730

积分

高级会员

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 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);
        }
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:365
  • 最近打卡:2025-05-02 00:20:03

6

主题

319

回帖

2206

积分

金牌会员

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

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

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

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

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 01:43 , Processed in 0.146750 second(s), 120 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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