標(biāo)題: “新手求教!” 延時(shí)程序 的使用方法。 [打印本頁(yè)]
作者: 627431363 時(shí)間: 2017-7-28 16:01
標(biāo)題: “新手求教!” 延時(shí)程序 的使用方法。
詳細(xì)
一定要詳細(xì)!
拜托了。!

作者: admin 時(shí)間: 2017-7-28 16:21
我7年前發(fā)布的單片機(jī)延時(shí)函數(shù)教程:http://m.raoushi.com/bbs/dpj-4711-1.html
作者: vadzbchva 時(shí)間: 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--);
}
能夠延時(shí)ams,具體看什么樣的單片機(jī)了,處理速度越快,a值越大
作者: 51mcu 時(shí)間: 2017-7-29 07:00
你到本壇上下載一個(gè)"單片機(jī)小靈“http://m.raoushi.com/bbs/dpj-23766-1.html
這款工具可是很好用的,寫中斷、寫延時(shí)程序直接生成,大大減少了編程者的工作量和腦力勞動(dòng)。
作者: 諾炎 時(shí)間: 2017-7-29 08:55
void yanshi(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
優(yōu)先定義延時(shí)功能函數(shù),定義形參uint形xms,進(jìn)入for嵌套循環(huán),達(dá)到延時(shí)目的
作者: 呂聰聰 時(shí)間: 2017-7-29 10:33
void delay(u16 i)
{
while(i--);
}
主函數(shù)里再寫delay();括號(hào)里面寫時(shí)間,為1的時(shí)候是10微秒。這是最簡(jiǎn)單的一個(gè)延時(shí)。
還有就是主程序里面需要短暫的延時(shí)的時(shí)候可以直接寫個(gè)for的空循環(huán)。
作者: zl2168 時(shí)間: 2017-7-29 11:12
本帖最后由 zl2168 于 2017-7-29 11:17 編輯
延時(shí)可用延時(shí)函數(shù),也可用延時(shí)語句。
最簡(jiǎn)單的延時(shí)語句
unsigned long t; //定義延時(shí)參數(shù)t(長(zhǎng)整型)
for (t=0; t<=n; t++ ); //按n值延時(shí)
作者: ljffjl 時(shí)間: 2017-7-29 11:40
找本書,書上應(yīng)該有詳細(xì)的教程
作者: 564654654 時(shí)間: 2017-7-29 14:35
下載一個(gè)單片機(jī)小精靈,很好用,輸入自己想延時(shí)的時(shí)間就能出來程序。
作者: 寶哥哥 時(shí)間: 2017-7-29 15:59
用一個(gè)51單片機(jī),for循環(huán)吧。
作者: 7890. 時(shí)間: 2017-7-29 16:32
找個(gè)單片機(jī)小精靈
作者: white1 時(shí)間: 2017-7-30 13:31
先定義一個(gè)
void delayms(uint k)
{
uint i,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
然后后面調(diào)用
delayms(5);
里面的數(shù)值自己設(shè)定
作者: 627431363 時(shí)間: 2017-7-30 22:25
謝謝大家了。。
作者: Timbo 時(shí)間: 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 時(shí)間: 2017-7-31 15:36
32的程序,有詳細(xì)的解釋
- static uint8_t fac_us = 0; /* us延時(shí)倍乘數(shù) */
- static uint16_t fac_ms = 0; /* ms延時(shí)倍乘數(shù) */
- /* 初始化延遲函數(shù) */
- /* SYSTICK的時(shí)鐘固定為HCLK時(shí)鐘的1/8
- * SYSCLK:系統(tǒng)時(shí)鐘 */
- void delay_init(void)
- {
- SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
- fac_us = SystemCoreClock / 8000000; /* 為系統(tǒng)時(shí)鐘的1/8 */
- fac_ms = (uint16_t)fac_us * 1000; /* 每個(gè)ms需要的systick時(shí)鐘數(shù) */
- }
- /* 延時(shí)nus */
- void delay_us(uint32_t nus)
- {
- uint32_t temp;
- SysTick->LOAD = nus * fac_us; /* 時(shí)間加載 */
- SysTick->VAL = 0x00; /* 清空計(jì)數(shù)器 */
- SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* 開始倒數(shù) */
- do {
- temp = SysTick->CTRL;
- }
- while ((temp & 0x01) && !(temp & (1 << 16))); /* 等待時(shí)間到達(dá) */
- SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; /* 關(guān)閉計(jì)數(shù)器 */
- SysTick->VAL =0x00; /* 清空計(jì)數(shù)器 */
- }
- /* 延時(shí)nms */
- /* 注意nms的范圍
- * SysTick->LOAD為24位寄存器,所以,最大延時(shí)為:
- * nms<=0xffffff*8*1000/SYSCLK
- * SYSCLK單位為Hz,nms單位為ms
- * 對(duì)72M條件下,nms<=1864 */
- void delay_ms(uint16_t nms)
- {
- uint32_t temp;
- SysTick->LOAD = (uint32_t)nms * fac_ms; /* 時(shí)間加載(SysTick->LOAD為24bit) */
- SysTick->VAL = 0x00; /* 清空計(jì)數(shù)器 */
- SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* 開始倒數(shù) */
- do {
- temp = SysTick->CTRL;
- }
- while ((temp & 0x01) && !(temp & (1 << 16))); /* 等待時(shí)間到達(dá) */
- SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; /* 關(guān)閉計(jì)數(shù)器 */
- SysTick->VAL = 0x00; /* 清空計(jì)數(shù)器 */
- }
復(fù)制代碼
作者: 單單單片機(jī)就好 時(shí)間: 2017-7-31 18:11
是不清楚它怎么計(jì)算延時(shí)時(shí)間的還是不清楚什么 先找些資料把基本的原理 理論性東西弄懂 延時(shí)函數(shù)就起了延時(shí)de作用啊
作者: 寶哥哥 時(shí)間: 2017-8-12 00:57
用個(gè)for循環(huán)就行了。
作者: huang520 時(shí)間: 2017-8-12 11:48
用單片機(jī)精靈就得了
作者: 驅(qū)蚊燈 時(shí)間: 2017-8-13 06:02
void delay_1ms(unsigned int mas) //延時(shí)1ms
{
uint i,j;
for(i=0;i<mas;i++)
for(j=0;j<110;j++);
}
作者: scad4 時(shí)間: 2017-8-13 21:38
呂聰聰 發(fā)表于 2017-7-29 10:33
void delay(u16 i)
{
while(i--);
哪里抄的?我問問你u16是什么你知道嗎?你的重定義語句呢?自己一知半解就不要來教別人了好吧?
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |