找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3010|回复: 19
收起左侧

“新手求教!!” 延时程序 的使用方法。

  [复制链接]
ID:219774 发表于 2017-7-28 16:01 | 显示全部楼层 |阅读模式
详细
一定要详细!
拜托了!!!
回复

使用道具 举报

ID:1 发表于 2017-7-28 16:21 | 显示全部楼层
我7年前发布的单片机延时函数教程:http://www.51hei.com/bbs/dpj-4711-1.html
回复

使用道具 举报

ID:223039 发表于 2017-7-28 16:47 | 显示全部楼层
void delay(int a)
{
      unsigned char i,j;
      for(i=a;i>0;i--)
       for(j=110;j>0;j--);
}
能够延时ams,具体看什么样的单片机了,处理速度越快,a值越大
回复

使用道具 举报

ID:34643 发表于 2017-7-29 07:00 | 显示全部楼层
你到本坛上下载一个"单片机小灵“http://www.51hei.com/bbs/dpj-23766-1.html
这款工具可是很好用的,写中断、写延时程序直接生成,大大减少了编程者的工作量和脑力劳动。
回复

使用道具 举报

ID:219197 发表于 2017-7-29 08:55 | 显示全部楼层
void yanshi(uint xms)
{
   uint i,j;
   for(i=xms;i>0;i--)
  for(j=110;j>0;j--);
}
优先定义延时功能函数,定义形参uint形xms,进入for嵌套循环,达到延时目的
回复

使用道具 举报

ID:210162 发表于 2017-7-29 10:33 | 显示全部楼层
void delay(u16 i)
{
   while(i--);
}
主函数里再写delay();括号里面写时间,为1的时候是10微秒。这是最简单的一个延时。
还有就是主程序里面需要短暂的延时的时候可以直接写个for的空循环。
回复

使用道具 举报

ID:111634 发表于 2017-7-29 11:12 | 显示全部楼层
本帖最后由 zl2168 于 2017-7-29 11:17 编辑

延时可用延时函数,也可用延时语句。
最简单的延时语句


unsigned long  t;                  //定义延时参数t(长整型)


for (t=0; t<=n; t++ );             //n值延时


回复

使用道具 举报

ID:223169 发表于 2017-7-29 11:40 | 显示全部楼层
找本书,书上应该有详细的教程
回复

使用道具 举报

ID:212343 发表于 2017-7-29 14:35 | 显示全部楼层
下载一个单片机小精灵,很好用,输入自己想延时的时间就能出来程序。
回复

使用道具 举报

ID:223214 发表于 2017-7-29 15:59 | 显示全部楼层
用一个51单片机,for循环吧。
回复

使用道具 举报

ID:195298 发表于 2017-7-29 16:32 | 显示全部楼层
找个单片机小精灵
回复

使用道具 举报

ID:223372 发表于 2017-7-30 13:31 | 显示全部楼层
先定义一个
void delayms(uint k)
{
uint i,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
然后后面调用
delayms(5);
里面的数值自己设定
回复

使用道具 举报

ID:219774 发表于 2017-7-30 22:25 | 显示全部楼层
谢谢大家了!!!
回复

使用道具 举报

ID:188030 发表于 2017-7-31 13:07 来自手机 | 显示全部楼层
void delay(int a)
{
      unsigned char i,j;
      for(i=a;i>0;i--)
       for(j=110;j>0;j--);
}
回复

使用道具 举报

ID:223579 发表于 2017-7-31 15:36 | 显示全部楼层
32的程序,有详细的解释
  1. static uint8_t fac_us = 0; /* us延时倍乘数 */
  2. static uint16_t fac_ms = 0; /* ms延时倍乘数 */

  3. /* 初始化延迟函数 */
  4. /* SYSTICK的时钟固定为HCLK时钟的1/8
  5. * SYSCLK:系统时钟 */
  6. void delay_init(void)
  7. {
  8.         SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
  9.         fac_us = SystemCoreClock / 8000000; /* 为系统时钟的1/8 */
  10.         fac_ms = (uint16_t)fac_us * 1000; /* 每个ms需要的systick时钟数 */
  11. }

  12. /* 延时nus */
  13. void delay_us(uint32_t nus)
  14. {
  15.         uint32_t temp;
  16.         SysTick->LOAD = nus * fac_us; /* 时间加载 */
  17.         SysTick->VAL = 0x00; /* 清空计数器 */
  18.         SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* 开始倒数 */
  19.         do {
  20.                 temp = SysTick->CTRL;
  21.         }
  22.         while ((temp & 0x01) && !(temp & (1 << 16))); /* 等待时间到达 */
  23.         SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; /* 关闭计数器 */
  24.         SysTick->VAL =0x00; /* 清空计数器 */
  25. }

  26. /* 延时nms */
  27. /* 注意nms的范围
  28. * SysTick->LOAD为24位寄存器,所以,最大延时为:
  29. * nms<=0xffffff*8*1000/SYSCLK
  30. * SYSCLK单位为Hz,nms单位为ms
  31. * 对72M条件下,nms<=1864 */
  32. void delay_ms(uint16_t nms)
  33. {
  34.         uint32_t temp;
  35.         SysTick->LOAD = (uint32_t)nms * fac_ms; /* 时间加载(SysTick->LOAD为24bit) */
  36.         SysTick->VAL = 0x00; /* 清空计数器 */
  37.         SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* 开始倒数 */
  38.         do {
  39.                 temp = SysTick->CTRL;
  40.         }
  41.         while ((temp & 0x01) && !(temp & (1 << 16))); /* 等待时间到达 */
  42.         SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; /* 关闭计数器 */
  43.         SysTick->VAL = 0x00; /* 清空计数器 */
  44. }
复制代码
回复

使用道具 举报

ID:219126 发表于 2017-7-31 18:11 | 显示全部楼层
是不清楚它怎么计算延时时间的还是不清楚什么   先找些资料把基本的原理  理论性东西弄懂  延时函数就起了延时de作用啊
回复

使用道具 举报

ID:223214 发表于 2017-8-12 00:57 | 显示全部楼层
用个for循环就行了。
回复

使用道具 举报

ID:227217 发表于 2017-8-12 11:48 | 显示全部楼层
用单片机精灵就得了
回复

使用道具 举报

ID:218870 发表于 2017-8-13 06:02 | 显示全部楼层
void delay_1ms(unsigned int mas)   //延时1ms
{
        uint i,j;
        for(i=0;i<mas;i++)
        for(j=0;j<110;j++);
}
回复

使用道具 举报

ID:227454 发表于 2017-8-13 21:38 来自手机 | 显示全部楼层
吕聪聪 发表于 2017-7-29 10:33
void delay(u16 i)
{
   while(i--);

哪里抄的?我问问你u16是什么你知道吗?你的重定义语句呢?自己一知半解就不要来教别人了好吧?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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