📄 pccommunicate.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 + -