标题:
“新手求教!!” 延时程序 的使用方法。
[打印本页]
作者:
627431363
时间:
2017-7-28 16:01
标题:
“新手求教!!” 延时程序 的使用方法。
详细
一定要详细!
拜托了!!!
作者:
admin
时间:
2017-7-28 16:21
我7年前发布的单片机延时函数教程:
http://www.51hei.com/bbs/dpj-4711-1.html
作者:
vadzbchva
时间:
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值越大
作者:
51mcu
时间:
2017-7-29 07:00
你到本坛上下载一个"单片机小灵“
http://www.51hei.com/bbs/dpj-23766-1.html
这款工具可是很好用的,写中断、写延时程序直接生成,大大减少了编程者的工作量和脑力劳动。
作者:
诺炎
时间:
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嵌套循环,达到延时目的
作者:
吕聪聪
时间:
2017-7-29 10:33
void delay(u16 i)
{
while(i--);
}
主函数里再写delay();括号里面写时间,为1的时候是10微秒。这是最简单的一个延时。
还有就是主程序里面需要短暂的延时的时候可以直接写个for的空循环。
作者:
zl2168
时间:
2017-7-29 11:12
本帖最后由 zl2168 于 2017-7-29 11:17 编辑
延时可用延时函数,也可用延时语句。
最简单的延时语句
un
signed long
t;
//
定义延时参数
t
(长整型)
for (t=0; t<=n; t++ ); //
按
n
值延时
作者:
ljffjl
时间:
2017-7-29 11:40
找本书,书上应该有详细的教程
作者:
564654654
时间:
2017-7-29 14:35
下载一个单片机小精灵,很好用,输入自己想延时的时间就能出来程序。
作者:
宝哥哥
时间:
2017-7-29 15:59
用一个51单片机,for循环吧。
作者:
7890.
时间:
2017-7-29 16:32
找个单片机小精灵
作者:
white1
时间:
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);
里面的数值自己设定
作者:
627431363
时间:
2017-7-30 22:25
谢谢大家了!!!
作者:
Timbo
时间:
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--);
}
作者:
lxj3648227
时间:
2017-7-31 15:36
32的程序,有详细的解释
static uint8_t fac_us = 0; /* us延时倍乘数 */
static uint16_t fac_ms = 0; /* ms延时倍乘数 */
/* 初始化延迟函数 */
/* SYSTICK的时钟固定为HCLK时钟的1/8
* SYSCLK:系统时钟 */
void delay_init(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
fac_us = SystemCoreClock / 8000000; /* 为系统时钟的1/8 */
fac_ms = (uint16_t)fac_us * 1000; /* 每个ms需要的systick时钟数 */
}
/* 延时nus */
void delay_us(uint32_t nus)
{
uint32_t temp;
SysTick->LOAD = nus * fac_us; /* 时间加载 */
SysTick->VAL = 0x00; /* 清空计数器 */
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* 开始倒数 */
do {
temp = SysTick->CTRL;
}
while ((temp & 0x01) && !(temp & (1 << 16))); /* 等待时间到达 */
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; /* 关闭计数器 */
SysTick->VAL =0x00; /* 清空计数器 */
}
/* 延时nms */
/* 注意nms的范围
* SysTick->LOAD为24位寄存器,所以,最大延时为:
* nms<=0xffffff*8*1000/SYSCLK
* SYSCLK单位为Hz,nms单位为ms
* 对72M条件下,nms<=1864 */
void delay_ms(uint16_t nms)
{
uint32_t temp;
SysTick->LOAD = (uint32_t)nms * fac_ms; /* 时间加载(SysTick->LOAD为24bit) */
SysTick->VAL = 0x00; /* 清空计数器 */
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* 开始倒数 */
do {
temp = SysTick->CTRL;
}
while ((temp & 0x01) && !(temp & (1 << 16))); /* 等待时间到达 */
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; /* 关闭计数器 */
SysTick->VAL = 0x00; /* 清空计数器 */
}
复制代码
作者:
单单单片机就好
时间:
2017-7-31 18:11
是不清楚它怎么计算延时时间的还是不清楚什么 先找些资料把基本的原理 理论性东西弄懂 延时函数就起了延时de作用啊
作者:
宝哥哥
时间:
2017-8-12 00:57
用个for循环就行了。
作者:
huang520
时间:
2017-8-12 11:48
用单片机精灵就得了
作者:
驱蚊灯
时间:
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++);
}
作者:
scad4
时间:
2017-8-13 21:38
吕聪聪 发表于 2017-7-29 10:33
void delay(u16 i)
{
while(i--);
哪里抄的?我问问你u16是什么你知道吗?你的重定义语句呢?自己一知半解就不要来教别人了好吧?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1