標(biāo)題: 單片機(jī)延時(shí)10秒 具體表現(xiàn)在哪?只知道5秒 [打印本頁(yè)]

作者: szxyp    時(shí)間: 2017-12-10 14:20
標(biāo)題: 單片機(jī)延時(shí)10秒 具體表現(xiàn)在哪?只知道5秒
#include "reg52.h"                        
#include<intrins.h>               

typedef unsigned int u16;         
typedef unsigned char u8;

sbit beep=P1^5;         
sbit a=P2^0 ;        
sbit LSA=P2^2;        
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[10]={
        0x3f,   //0
        0x06,          //1
        0x5b,        //2
        0x4f,        //3
        0x66,        //4
        0x6d,          //5
        0x7d,        //6
        0x07,        //7
        0x7f,        //8
        0x6f,        //9

        };           

void delay(u16 i)
{
        while(i--);                  //延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
}
void main()
{        
   u16 L0=0,L1=0,L2=0,L3=0,d,n=0,w=0;
        
        TMOD|=0X01;                //  01定時(shí)  04計(jì)數(shù)  選擇為定時(shí)器0模式,工作方式1,僅用TR0打開啟動(dòng)。

        TH0=0X3C;                //給定時(shí)器賦初值,定時(shí)1ms   
        TL0=0XB0;                                                     
        
        TR0=1;                        //打開定時(shí)器

         if(w==0)
        {        
                delay(100);
                if(a==1)
                {
              L0++;
                 while(1)
       {
           if(L0==10)
                {
                        L0=0;
                        L1++;
                }
                if(L1==10)                                                         
                {
                        L1=0;
                        L2++;
                }
                if(L2==10)
                {
                        L2=0;
                        L3++;
                }
                if(L3==10)
                {
                    L3=0;
                        L0=0;L1=0;L2=0;
                }
                for(d=0;d<4;d++)
                {
                        switch(d)         
                        {
                                case(0):
                                        LSA=0;LSB=0;LSC=0;P0=smgduan[L0]; break;//顯示第0位
                                case(1):
                                        LSA=1;LSB=0;LSC=0;P0=smgduan[L1]; break;//顯示第1位
                                case(2):
                                        LSA=0;LSB=1;LSC=0;P0=smgduan[L2]; break;//顯示第2位
                                case(3):
                                        LSA=1;LSB=1;LSC=0;P0=smgduan[L3]; break;//顯示第3位
                        }
                        delay(100);
                        P0=0x00;           //消隱
                }
                if(a==1)
                delay(1000);                                                                       
                L0++;
        
        
                if(TF0==1)
        {
            TF0=0;        
                TH0=0X3C;              //重置定時(shí)常數(shù)
                TL0=0XB0;
                n++;
                if(n>200)
                {
                  n=0;
                  w=1;
                }
                if(w==1)
                a=0;
    }
               
        }
        }               
        }
                }  



作者: qzqwood    時(shí)間: 2017-12-10 15:23
有一個(gè)delay(1000),即10ms
作者: sunbtob    時(shí)間: 2017-12-10 15:58
delay(1000);           代表1秒,類推
作者: szxyp    時(shí)間: 2017-12-10 16:15
qzqwood 發(fā)表于 2017-12-10 15:23
有一個(gè)delay(1000),即10ms

delay(100)循環(huán)的是那些程序,delay(1000)循環(huán)的是那些?

作者: 鵝城不再35    時(shí)間: 2017-12-10 17:20
可以采用單片機(jī)內(nèi)部 nop();函數(shù)延時(shí) 比較精確
作者: 750674316    時(shí)間: 2017-12-11 00:13
delay(1000),即10ms
作者: szxyp    時(shí)間: 2017-12-11 14:25
鵝城不再35 發(fā)表于 2017-12-10 17:20
可以采用單片機(jī)內(nèi)部 nop();函數(shù)延時(shí) 比較精確

一個(gè)_nop()是幾秒?
作者: zl2168    時(shí)間: 2017-12-11 22:22
先學(xué)理論,打基礎(chǔ),否則,問(wèn)題多多,事倍功半。
作者: tekoken    時(shí)間: 2017-12-12 12:46
太快看不到閃爍的過(guò)程
作者: 1597538246    時(shí)間: 2017-12-12 14:13
void delay(u16 i)
{
        while(i--);                  //延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
}
delay(1000)和delay(100);調(diào)用的就是上面的函數(shù) 循環(huán)的是while(i--)當(dāng)你給的數(shù)不為0,就自減1,直到為零;期間每減一次就是10us,1000us=1ms 1000ms=1s,
作者: xinyonghu    時(shí)間: 2017-12-12 14:15
delay()就是延時(shí)函數(shù)
作者: lxhxz99996666    時(shí)間: 2017-12-12 21:42
學(xué)匯編版編程可以了解更多單片機(jī)的原理
作者: lxhxz99996666    時(shí)間: 2017-12-12 21:43
用keil仿真一下就知道
作者: szxyp    時(shí)間: 2017-12-13 08:33
1597538246 發(fā)表于 2017-12-12 14:13
void delay(u16 i)
{
        while(i--);                  //延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us

謝謝  懂了
作者: ktlktlk    時(shí)間: 2017-12-14 08:12
看看匯編吧,直接用定時(shí)器,很容易實(shí)現(xiàn)

作者: 真滴有點(diǎn)帥哦    時(shí)間: 2017-12-15 23:16
樓上的樓上解釋的很明白了,執(zhí)行while進(jìn)行--,delay(1000),大約就是10ms,這個(gè)在時(shí)間你可以通過(guò)keil調(diào)試出來(lái),編譯后,設(shè)置在delay前后設(shè)置斷點(diǎn),首先復(fù)位,運(yùn)行,delay前停了,看下sec中的時(shí)間,在運(yùn)行,delay后停了,在看下sec中的時(shí)間,相減,就是delay(1000)的延時(shí)時(shí)間了,




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1