找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5964|回复: 13
收起左侧

C语言如何设定某个程序执行一定的时间后再执行其他命令?

[复制链接]
ID:424741 发表于 2018-12-11 09:32 | 显示全部楼层 |阅读模式
我在写寻迹小车的程序,想让小车直行一段时间后执行其他程序,那用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();
         }

回复

使用道具 举报

ID:410399 发表于 2018-12-11 10:57 | 显示全部楼层
if的话加delay就好
回复

使用道具 举报

ID:443937 发表于 2018-12-11 11:37 | 显示全部楼层
中断 和 循环都可以满足你的要求

循环 , 比如 for(i=0; i<100; i++);  如果嫌时间短, 多嵌套几层
回复

使用道具 举报

ID:443927 发表于 2018-12-11 11:39 | 显示全部楼层
一般可以采用延时函数进行处理。当然若要实现精确的定时,还可以采用定时器实现
回复

使用道具 举报

ID:387733 发表于 2018-12-11 12:26 | 显示全部楼层
if只是条件判断语句,不是循环语句,你要用while(直行条件)语句,  这样只要满足直行条件,就一直循环。
回复

使用道具 举报

ID:123289 发表于 2018-12-11 12:44 | 显示全部楼层
做一个标记,如G。用定时器将你会要运行的时间做个定时,到时间就将G置1,平时G=0(开起初化也=0)。
在你运行的程序结束的地方,加一个G识别,G=1就结束,G0就再回去重复。
回复

使用道具 举报

ID:424741 发表于 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();
回复

使用道具 举报

ID:424741 发表于 2018-12-11 15:21 | 显示全部楼层
sxhwdz 发表于 2018-12-11 12:26
if只是条件判断语句,不是循环语句,你要用while(直行条件)语句,  这样只要满足直行条件,就一直循环。

我只直行一段时间,直行完之后就按判断的结果来执行其他命令。
除了用delay,有没有其他的方式呢?
回复

使用道具 举报

ID:410399 发表于 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
回复

使用道具 举报

ID:410399 发表于 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
            }                 
        }
}
回复

使用道具 举报

ID:444221 发表于 2018-12-11 16:51 | 显示全部楼层
使用定时中断
回复

使用道具 举报

ID:424741 发表于 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要怎样写?代码小白,求大神讲解
回复

使用道具 举报

ID:424741 发表于 2018-12-11 19:45 | 显示全部楼层
天下为家129 发表于 2018-12-11 19:20
请问TH0是什么意思呢?还有如果我要定时2秒,TL0要怎样写?代码小白,求大神讲解

我用的是89C51单片机,晶振是11.0592Hz的
回复

使用道具 举报

ID:410399 发表于 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://www.51hei.com/bbs/dpj-19016-1.html
我也是个小白,噶油。51黑还有教程区的,可以去看一下,我也在看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表