欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: C語言如何設定某個程序執行一定的時間后再執行其他命令? [打印本頁]

作者: 天下為家129    時間: 2018-12-11 09:32
標題: C語言如何設定某個程序執行一定的時間后再執行其他命令?
我在寫尋跡小車的程序,想讓小車直行一段時間后執行其他程序,那用keil如何設定小車的直行時間,讓它執行完這個命令后再執行其他命令,且在執行直行命令時不管遇到其他任何條件都忽視,例如滿足左轉,滿足右轉的條件都忽視,直到直行的時間結束后再考慮其他執行條件。我用的是if語句

if(LED0==1&&LED1==1&&LED2==1&&LED3==0&&LED4==0&&LED5==1&&LED6==1)  //直走
     {
      RUN();
     }

if(LED0==0&&LED1==0&&LED2==0&&LED3==1&&LED4==1&&LED5==1&&LED6==1)  //左轉聲明
         {
         TurnLeft();
         }         
if(LED0==1&&LED1==1&&LED2==1&&LED3==1&&LED4==1&&LED5==0&&LED6==0) //右轉聲明
           {
         TurnRight();
         }


作者: mosqu    時間: 2018-12-11 10:57
if的話加delay就好
作者: 測試用戶    時間: 2018-12-11 11:37
中斷 和 循環都可以滿足你的要求

循環 , 比如 for(i=0; i<100; i++);  如果嫌時間短, 多嵌套幾層

作者: tanxg    時間: 2018-12-11 11:39
一般可以采用延時函數進行處理。當然若要實現精確的定時,還可以采用定時器實現
作者: sxhwdz    時間: 2018-12-11 12:26
if只是條件判斷語句,不是循環語句,你要用while(直行條件)語句,  這樣只要滿足直行條件,就一直循環。
作者: yzwzfyz    時間: 2018-12-11 12:44
做一個標記,如G。用定時器將你會要運行的時間做個定時,到時間就將G置1,平時G=0(開起初化也=0)。
在你運行的程序結束的地方,加一個G識別,G=1就結束,G0就再回去重復。
作者: 天下為家129    時間: 2018-12-11 15:20
mosqu 發表于 2018-12-11 10:57
if的話加delay就好

delay我試過,小車的速度會慢下來,要怎樣寫才能既延時有不影響小車的速度?
if(LED0==1&&LED1==1&&LED2==1&&LED3==0&&LED4==0&&LED5==1&&LED6==1)  //直走
     {
      RUN();  delay(50);Xiaoying();

作者: 天下為家129    時間: 2018-12-11 15:21
sxhwdz 發表于 2018-12-11 12:26
if只是條件判斷語句,不是循環語句,你要用while(直行條件)語句,  這樣只要滿足直行條件,就一直循環。

我只直行一段時間,直行完之后就按判斷的結果來執行其他命令。
除了用delay,有沒有其他的方式呢?
作者: mosqu    時間: 2018-12-11 16:18
天下為家129 發表于 2018-12-11 15:20
delay我試過,小車的速度會慢下來,要怎樣寫才能既延時有不影響小車的速度?
if(LED0==1&&LED1==1&&LED ...

f(LED0==1&&LED1==1&&LED2==1&&LED3==0&&LED4==0&&LED5==1&&LED6==1)  //直走
{
      RUN();  delay(50);Xiaoying();
TMOD = 0x01;   //設置定時器0為模式1
    TH0  = 0xB8;
    TL0  = 0x00;   //定時值初值
    TR0  = 1;      //打開定時器0
作者: mosqu    時間: 2018-12-11 16:25
天下為家129 發表于 2018-12-11 15:20
delay我試過,小車的速度會慢下來,要怎樣寫才能既延時有不影響小車的速度?
if(LED0==1&&LED1==1&&LED ...

那用定時器吧,大概流程是這樣子
if(LED0==1&&LED1==1&&LED2==1&&LED3==0&&LED4==0&&LED5==1&&LED6==1)  //直走
{
      RUN();
     TMOD = 0x01;   //設置定時器0為模式1
    TH0  = 0xB8;
    TL0  = 0x00;   //定時值初值
    TR0  = 1;      //打開定時器0
    if(1 == TF0)            //判斷定時器0是否溢出
        {
            TF0 = 0;
            TH0 = 0xB8;        //一旦溢出后,重新賦值
            TL0 = 0x00;
            counter++;
            if(50 == counter) //判斷定時器0溢出是否達到50次
            {
                 counter = 0;  //counter清0,重新計數
                 Xiaoying();
                 TR0  = 0;      //關閉定時器0
            }                 
        }
}

作者: fl6026    時間: 2018-12-11 16:51
使用定時中斷
作者: 天下為家129    時間: 2018-12-11 19:20
mosqu 發表于 2018-12-11 16:18
f(LED0==1&&LED1==1&&LED2==1&&LED3==0&&LED4==0&&LED5==1&&LED6==1)  //直走
{
      RUN();  delay(5 ...

請問TH0是什么意思呢?還有如果我要定時2秒,TL0要怎樣寫?代碼小白,求大神講解
作者: 天下為家129    時間: 2018-12-11 19:45
天下為家129 發表于 2018-12-11 19:20
請問TH0是什么意思呢?還有如果我要定時2秒,TL0要怎樣寫?代碼小白,求大神講解

我用的是89C51單片機,晶振是11.0592Hz的
作者: mosqu    時間: 2018-12-12 08:28
天下為家129 發表于 2018-12-11 19:20
請問TH0是什么意思呢?還有如果我要定時2秒,TL0要怎樣寫?代碼小白,求大神講解

TH0是定時器高8位
TL0是定時器低8位
都是設置定時初值的
2秒大概 if(50 == counter) 改為 if(100 == counter)
定時啊中斷啊用的挺多的,最好花時間學好,下面這個介紹定時器的可以看一下
http://m.raoushi.com/bbs/dpj-19016-1.html
我也是個小白,噶油。51黑還有教程區的,可以去看一下,我也在看。




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