首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

跪求小汽车走矩形程序

2013-01-21 
跪求小车走矩形程序#include reg51.h sbit J14 P1^1//右轮 sbit J15 P1^2//右轮 sbit J16 P1^3

跪求小车走矩形程序
#include "reg51.h"

 sbit J14 = P1^1;//右轮
 sbit J15 = P1^2;//右轮
 sbit J16 = P1^3; //左轮
 sbit J17 = P1^4; //左轮
 
                                                                                                                                
 sbit k4 = P3^4;
 sbit J6 = P2^1;//产生38.5khz
 //sbit k3 = P3^3;
 unsigned char  led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//控制显示的数字
 unsigned char  P2data[]={0xef,0xdf,0xbf,0x7f};//控制显示的数字出现的位置

 
  
 void forward(char v,unsigned int m);
 void back();
 void left(unsigned char d);
 void right();
 void stop();
 void delaynms(int t);
 void show(unsigned int k);

 unsigned int n = 0,n_left=0,n_right=0;//n_left=0记脉冲
 // unsigned int msec = 0,sec = 0 ;
 /*定时器T0的中断服务函数*/
 /*void timer_t0()interrupt 1
 {
 TH0 = 0xb1; //1ms,周期是2ms,高电平1ms,低电平1ms
 TL0 = 0xe0;
// msec++;  
 sound = !sound;
 }
  */
 void timer_t1()interrupt 3//定时器T1
 {
  EA=0;
  J6=!J6;//产生38.5khz的信号,
  EA=1; 
 }

 void int_0()interrupt 0 
 {
  n_left++; //光栅盘次数.
 }
 void int_1()interrupt 2 
 {
  n_right++;
 }

/*************主函数************/
void main()
 {
  TMOD = 0x21;
  TH0 = 0xb1;//延时1次10ms ,周期是20ms
  TL0 = 0xe0;
  TH1=TL1=0xe6;//初始值为230
  ET1 = 1;
  IT0=1;
  IT1=1; 
  EX0=1;
  EX1=1;
  EA = 1;
  TR1 = 1;
  
 
 

 while(1)
 {

   if(k4==0) 
     show(n_left/10);//除以40得到真实的转速
   else 
     show(n_right/10);

  
   forward(10,10);
 }


 }
 /*************前进函数************/
 void forward(char v,unsigned int m) //1:100变速箱,转1圈,电机转100次,光栅盘挡400次,m为距离参数.
 {
  /*J14 = 0;J15 = 1; //右电机,
 
  J16 = 0;J17 = 1; //左电机
  delaynms(10);

  J16 = 1,J17 = 1; //关闭左电机, 让右电机先启动
  delaynms(44);//delayms(43);时向右偏,而delayms(44); 却又向左偏,
  J14 = 0;
  //delaynms(100);


  J15 = 1;
  delaynms(3);
  J16 = 0;J17 = 1;
  delaynms(70);
  
 }*/        
   n_left = n_right = 0;//计数器清零
   while(n_left<(m*43))//m*43不能大于65536,走m的距离光栅实际被挡的次数(转成长整形  2的32次方   4 294 967 296)
   {
      J14 = 0;J15 = 1;//右电机
      J16 = 0;J17 = 1;//左电机
      delaynms(v);
      J14 = 1;J15 = 1;//右电机,1停止0前进
      delaynms(n);//前面定义n的值,全局变量,调节n修正小车走直线
      J16 = 1;J17 = 1;//左电机
      delaynms(20-v);
   }
}
  /*************后退函数************/
 void back()
 {
  J14 = 1;J15 = 0;//右电机
  J16 = 1;J17 = 0; //左电机
 

 }
  /*************左转函数************/
 void left(unsigned char d)//角度 (0-180)
 {
  n_left = n_right = 0;
  while(n_right<(10*d))//可加修正值  1两边同乘10,2在d后面加参数
  {
    J14 = 1;J15 = 1;
    J16 = 0;J17 = 1;
  }
    J14 = 1;J15 = 1;
    J16 = 1;J17 = 1;//停止 
 }  
  /*************右转函数************/  
 void right()
 {
  J14 = 0;J15 = 1;
  J16 = 1;J17 = 0;
 }
 /*************停止函数************/
 void stop()
 {
  J14 = 1; J15 = 1;
  J16 = 1; J17 = 1;
 }
 /*************延时函数************/
 void delaynms( int t)
 {
    int i;
    for(i=0;i<t;i++)
{
TH0 = 0xfc;
    TL0 = 0x18;//24mhz晶振,产生1ms
TR0 = 1; //启动T0
while(TF0==0);// (!TF1)
TF0=0;
}
 }
 /*************显示函数************/
 void show(unsigned int k)
 {
   int i = 0;
   for(i = 0;i < 4;i++)
   {
     P2=P2data[i];
     P0=led[k%10];
     delaynms(1);
     P0=0xff;
     k=k/10;
   }
 这些是我目前的函数,请大神指教
[解决办法]
咦?C51的啊?

出什么问题了呢?

热点排行