求大侠帮我看看程序哪里出问题了?

2019-07-18 13:42发布

调速程序.zip (48.97 KB, 下载次数: 1)
#include <reg52.h>
#include <intrins.h>
#define led1 d1=0;d2=0
#define led2 d1=0;d2=1
#define led3 d1=1;d2=0
#define UCHAR unsigned char
#define UINT unsigned int
#define uchar unsigned char
#define uint unsigned int
/*
button0,button1 是小车的启动停止控制位
*/
sbit button0 = P1^0; //开始 停止
/*
左右循迹传感器
*/
sbit track_l = P1^1; // 循迹传感器1
sbit track_r = P1^2; // 循迹传感器2
/*
左右电机正负极
*/
sbit motorl1 = P1^4; //电机接口
sbit motorl2 = P1^5;
sbit motorr1 = P1^6;
sbit motorr2 = P1^7;
  /*
  数码管位选
  */
sbit d1=P2^6;   //段选1
sbit d2=P2^7; //段选2
sbit K2=P3^0;  //开始  停止
sbit K3=P3^1;  // 复位
uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0};// 带小数点
uchar count,num,knum;
void tracking(void);
/*
小车的行驶状态
*/
void front(void);
void right(void);
void left(void);
void stop(void);
void right_back(void);
void left_back(void);
void delay_us(UINT t);
void pwm(void (*car_move)(void), UCHAR speed);
void delay(uint z) //秒表延时子程序
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=121;y>0;y--);
}
void unit()   //设置定时器
{
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;

}
void keyscan()   //按键子程序
{
  if(K2==0)  //计时开始 停止
    {
   delay(5);
    if(K2==0)
      {
   while(!K2);
   TR0=~TR0;
   }
}
if(K3==0)     //复位键
  {
   delay(5);
    if(K3==0)
   {
     while(!K3);
   knum=0;
   num=0;
   
     
   }
  
  }

}
void display()    //显示时间子程序
{
  uchar shi,ge;
  shi=knum/10;
  ge=knum%10;
  led2;
  P0=table[num];
  delay(3);
  led3;
  P0=table1[ge];
  delay(3);
  led1;
  P0=table[shi];
  delay(5);

}
void tracking(void)
{
track_l = 1;   //左循迹传感器
track_r = 1;   //右循迹传感器
while(1)
{
  if(track_l == 1 && track_r == 1) // 都在黑线外
  {
   front();
   pwm(front, 15); // 前进  
  }
  else if(track_l == 1 && track_r == 0) // 左边在外 右边在里
  {
   right();  // 右转
   pwm(right, 1);
  }
  else if(track_l == 0 && track_r == 1) // 左边在里 右边在外
  {
   left(); // 左转
   pwm(left, 1);
  }
  else if(track_l == 0 && track_r == 0)  //都在黑线内
  {stop();}   
}
}
void front(void)
{
motorl1 = 1;
motorr1 = 1;
motorl2 = 0;
motorr2 = 0;  
}
void right(void)
{
motorl1 = 1;
motorr1 = 0;
motorl2 = 0;
motorr2 = 0;
}
void left(void)
{
motorl1 = 0;
motorr1 = 1;
motorl2 = 0;
motorr2 = 0;
}
void stop(void)
{
motorl1 = 0;
motorr1 = 0;
motorl2 = 0;
motorr2 = 0;
}


void time0() interrupt 1  //定时器中断0方式1中断子函数
{
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  count++;
   if(count==2)
    {
  count=0;
  num++;
   if(num>=9)
       {
     num=0;
  knum++;
   if(knum>=99)
     {
     knum=0;
     }
   
    }
}

}
void delay_us(UINT t)
{
while(--t);
}
void pwm(void (*car_move)(void), UCHAR speed) // pwm调速
{
(*car_move)();
delay_us(speed * 200);
stop();
delay_us(100);
}
void xianshi (void)
{

  
{
unit();
  while(1)
   {
   keyscan();
display(); }   //加秒表显示
            
}
}
void main()
{
tracking();
xianshi();
}




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
584610335@qq.co
1楼-- · 2019-07-18 16:38
循迹调速+计时 主函数里两个子函数哪个位置在前就运行哪一个后面的没效果

一周热门 更多>