⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pccommunicate.c

📁 飞思卡尔智能车用的决策程序,这是由参加过的研究生提供的例子
💻 C
字号:
#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

#define uch unsigned char

extern void set_motor(uch,uch);
extern void set_DJ(unsigned short);
extern void get_pic(void);
extern uch pic[40][40],mdelay,tline,tpoint;

// Function put_char:put a char to SCI0
void put_char(uch c) {
  while((SCI0SR1&0x80)==0);
  SCI0DRL=c;
}

// Function get_char:wait for a char from SCI0
uch get_char(void) {
  while((SCI0SR1&0x20)==0);
  return(SCI0DRL);
}

// Funciton get_DEC:wait for a DEC number and change char to int
uch get_DEC(void) {
  uch d;
  do {
    d=get_char();
  }
  while(d<'0'||d>'9');
  put_char(d);
  return(d-0x30);
}

// Funciton get_HEX:wait for a HEX number and change char to int
uch get_HEX(void) {
  uch h;
  do {
    h=get_char();
  }
  while((h<'0'||h>'9')&&(h<'a'||h>'f')&&(h<'A'||h>'F'));
  if(h>='0'&&h<='9') {
    put_char(h);
    return(h-0x30);
  } else if(h>='a'&&h<='f') {
    put_char(h-32);
    return(h-0x57);
  } else if(h>='A'&&h<='F') {
    put_char(h);
    return(h-0x37);
  }
}

// Function put_HEX:change a int number to char and put
void put_HEX(uch c) {
  if(c<10)
    put_char(c+0x30);
  else
    put_char(c+0x37);
}

// Fuction print:print a string which ended by '#' or '$'
void print(signed char * c) {
  uch i;
  i=0;
  while(c[i]!='#'&&c[i]!='$')
    { put_char(c[i]);
	  i++;
	}
  if(c[i]=='#')
    { put_char(0x0D);
      put_char(0x0A);
	}
}

// Function print_help:print help text
void print_help(void) {
  put_char('H');
  put_char(0x0D);
  put_char(0x0A);
  print(" 按'Q'键退出通信模式#");
  put_char(0x0D);
  put_char(0x0A);
  print("        A -- 控制电机转动#");
  print("        D -- 查看指定存储空间数据#");
  print("        F -- 上传一幅图像#");
  print("        G -- 采集一幅图像#");
  print("        S -- 停止电机转动#");
  print("        W -- 设置采集参数#");
  print("        Z -- 控制舵机转动#");
}

// Function stop_running:stop the car from running
void stop_running(void) {
  put_char('S');
  put_char(0x0D);
  put_char(0x0A);
  put_char(0x0D);
  put_char(0x0A);
  set_motor(0,0);
}

// Function controlDuoJi:set the direction
void control_DuoJi(void) {
  uch z3,z2,z1,z0;
  unsigned short z;
  print("Z    请输入舵机控制值(3800-5200):$");
  z3=get_DEC();
  z2=get_DEC();
  z1=get_DEC();
  z0=get_DEC();
  z=z3*1000+z2*100+z1*10+z0;
  put_char(0x0D);
  put_char(0x0A);
  if(z<5201&&z>3799)
    set_DJ(z);
  else
    print(" 输入范围错误!$");
  put_char(0x0D);
  put_char(0x0A);
}

// Function control_Motor:set the speed
void control_Motor(void) {
  uch speed,s1,s0,fb;
  print("A    请设定速度:(0-99) $");
  s1=get_DEC();
  s0=get_DEC();
  speed=s1*10+s0;
  put_char(0x0D);
  put_char(0x0A);
  print("      请选择方向:F--前进  B--后退 $");
  do {
    fb=get_char();
  }
  while(fb!='f'&&fb!='F'&&fb!='b'&&fb!='B');
  if(fb=='f'||fb=='F') {
    put_char('F');
    set_motor(speed,0);
  } else{
    put_char('B');
    set_motor(0,speed);
  }
  put_char(0x0D);
  put_char(0x0A);
}

// Function diplay:Display the memery
void display(void) {
  uch i,a3,a2,a1,a0,b3,b2,b1,b0;
  unsigned int mhead,mtail;
  uch *p;
  put_char('D');
  put_char(' ');
  a3=get_HEX();
  a2=get_HEX();
  a1=get_HEX();
  a0=get_HEX();
  put_char('-');
  b3=get_HEX();
  b2=get_HEX();
  b1=get_HEX();
  b0=get_HEX();
  put_char(13);
  put_char(10);
  put_char(13);
  put_char(10);
  mhead=a3*4096+a2*256+a1*16;
  mtail=b3*4096+b2*256+b1*16+16;
  while(mhead<mtail){
    print("    -$");
    a3=(uch)(mhead/4096);
    a2=(uch)((mhead-a3*4096)/256);
    a1=(uch)((mhead-a3*4096-a2*256)/16);
    a0=mhead-a3*4096-a2*256-a1*16;
    put_HEX(a3);
    put_HEX(a2);
    put_HEX(a1);
    put_HEX(a0);
    print("    $");
    p=(uch *)mhead;
    for(i=0;i<16;i++) {
      b3=*p;
      b1=(uch)(b3/16);
      b0=b3-b1*16;
      put_HEX(b1);
      put_HEX(b0);
      put_char(' ');
      p++;
    }
    mhead+=16;
    put_char(13);
    put_char(10);
  }
    
}

//
void send_pic(void) {
  uch i,j,c2,c1,c0,a;
  put_char('F');
  put_char(13);
  put_char(10);
  for(i=0;i<40;i++) {
    for(j=0;j<40;j++) {
      a=pic[i][j];
      /*if(a<=60)
        a=0;
      else if(a<145)
        a=(a-60)*3;
      else
        a=255;*/
      c2=(uch)(a/100);
      c1=(uch)((a-c2*100)/10);
      c0=a-c2*100-c1*10;
      put_char(c2+48);
      put_char(c1+48);
      put_char(c0+48);
      put_char(' ');
    }
    put_char(13);
    put_char(10);
  }
}

//
void set_delay(void) {
  uch b1,b0;
  print("W    现在延时为$");
  b1=(uch)(mdelay/10);
  b0=mdelay-b1*10;
  put_char(b1+48);
  put_char(b0+48);
  print("     设定延时(0-99):$");
  b1=get_DEC();
  b0=get_DEC();
  mdelay=b1*10+b0;
  put_char(13);
  put_char(10);
}
  

// Function PC:Control every command
void PCCommunicate(void) {
  uch op;
  put_char(0x0D);
  put_char(0x0A);
  print("****************************************************************#");
  print("*                    智能车调试程序  版本:1.0                 *#");
  print("*                    作者:张国超                              *#");
  print("*                    创建时间:2007.7.28                       *#");
  print("****************************************************************#");
  do{
    put_char('>');
    op=get_char();
    if(op==0x0D){
      put_char(0x0D);
      put_char(0x0A);
    }
    else if(op=='h'||op=='H')
      print_help();
    else if(op=='q'||op=='Q') {
      put_char('Q');
      put_char(0x0D);
      put_char(0x0A);
    } 
    else if(op=='s'||op=='S')
      stop_running();
    else if(op=='z'||op=='Z')
      control_DuoJi();
    else if(op=='a'||op=='A')
      control_Motor();
    else if(op=='d'||op=='D')
      display();
    else if(op=='g'||op=='G') {
      put_char('G');
      put_char(13);
      put_char(10);
      get_pic();
      print("    采集完毕#");
    } 
    else if(op=='f'||op=='F')
      send_pic();
    else if(op=='w'||op=='W')
      set_delay();
    else{
      put_char(op);
      put_char(0x0D);
      put_char(0x0A);
      print(" 错误命令,看帮助请按'H'键#");
    }
  }
  while(op!='q'&&op!='Q');
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -