找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6813|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

C語言如何設(shè)定某個程序執(zhí)行一定的時間后再執(zhí)行其他命令?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:424741 發(fā)表于 2018-12-11 09:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我在寫尋跡小車的程序,想讓小車直行一段時間后執(zhí)行其他程序,那用keil如何設(shè)定小車的直行時間,讓它執(zhí)行完這個命令后再執(zhí)行其他命令,且在執(zhí)行直行命令時不管遇到其他任何條件都忽視,例如滿足左轉(zhuǎn),滿足右轉(zhuǎn)的條件都忽視,直到直行的時間結(jié)束后再考慮其他執(zhí)行條件。我用的是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)  //左轉(zhuǎn)聲明
         {
         TurnLeft();
         }         
if(LED0==1&&LED1==1&&LED2==1&&LED3==1&&LED4==1&&LED5==0&&LED6==0) //右轉(zhuǎn)聲明
           {
         TurnRight();
         }

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:410399 發(fā)表于 2018-12-11 10:57 | 只看該作者
if的話加delay就好
回復(fù)

使用道具 舉報

板凳
ID:443937 發(fā)表于 2018-12-11 11:37 | 只看該作者
中斷 和 循環(huán)都可以滿足你的要求

循環(huán) , 比如 for(i=0; i<100; i++);  如果嫌時間短, 多嵌套幾層
回復(fù)

使用道具 舉報

地板
ID:443927 發(fā)表于 2018-12-11 11:39 | 只看該作者
一般可以采用延時函數(shù)進(jìn)行處理。當(dāng)然若要實現(xiàn)精確的定時,還可以采用定時器實現(xiàn)
回復(fù)

使用道具 舉報

5#
ID:387733 發(fā)表于 2018-12-11 12:26 | 只看該作者
if只是條件判斷語句,不是循環(huán)語句,你要用while(直行條件)語句,  這樣只要滿足直行條件,就一直循環(huán)。
回復(fù)

使用道具 舉報

6#
ID:123289 發(fā)表于 2018-12-11 12:44 | 只看該作者
做一個標(biāo)記,如G。用定時器將你會要運行的時間做個定時,到時間就將G置1,平時G=0(開起初化也=0)。
在你運行的程序結(jié)束的地方,加一個G識別,G=1就結(jié)束,G0就再回去重復(fù)。
回復(fù)

使用道具 舉報

7#
ID:424741 發(fā)表于 2018-12-11 15:20 | 只看該作者

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

使用道具 舉報

8#
ID:424741 發(fā)表于 2018-12-11 15:21 | 只看該作者
sxhwdz 發(fā)表于 2018-12-11 12:26
if只是條件判斷語句,不是循環(huán)語句,你要用while(直行條件)語句,  這樣只要滿足直行條件,就一直循環(huán)。

我只直行一段時間,直行完之后就按判斷的結(jié)果來執(zhí)行其他命令。
除了用delay,有沒有其他的方式呢?
回復(fù)

使用道具 舉報

9#
ID:410399 發(fā)表于 2018-12-11 16:18 | 只看該作者
天下為家129 發(fā)表于 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;   //設(shè)置定時器0為模式1
    TH0  = 0xB8;
    TL0  = 0x00;   //定時值初值
    TR0  = 1;      //打開定時器0
回復(fù)

使用道具 舉報

10#
ID:410399 發(fā)表于 2018-12-11 16:25 | 只看該作者
天下為家129 發(fā)表于 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;   //設(shè)置定時器0為模式1
    TH0  = 0xB8;
    TL0  = 0x00;   //定時值初值
    TR0  = 1;      //打開定時器0
    if(1 == TF0)            //判斷定時器0是否溢出
        {
            TF0 = 0;
            TH0 = 0xB8;        //一旦溢出后,重新賦值
            TL0 = 0x00;
            counter++;
            if(50 == counter) //判斷定時器0溢出是否達(dá)到50次
            {
                 counter = 0;  //counter清0,重新計數(shù)
                 Xiaoying();
                 TR0  = 0;      //關(guān)閉定時器0
            }                 
        }
}
回復(fù)

使用道具 舉報

11#
ID:444221 發(fā)表于 2018-12-11 16:51 | 只看該作者
使用定時中斷
回復(fù)

使用道具 舉報

12#
ID:424741 發(fā)表于 2018-12-11 19:20 | 只看該作者
mosqu 發(fā)表于 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要怎樣寫?代碼小白,求大神講解
回復(fù)

使用道具 舉報

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

我用的是89C51單片機,晶振是11.0592Hz的
回復(fù)

使用道具 舉報

14#
ID:410399 發(fā)表于 2018-12-12 08:28 | 只看該作者
天下為家129 發(fā)表于 2018-12-11 19:20
請問TH0是什么意思呢?還有如果我要定時2秒,TL0要怎樣寫?代碼小白,求大神講解

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表