📄 cd_dir.c
字号:
#include"Display.H"
extern uint SPI_Data;
extern int K_A,K_B;
uint data_Temp[2];
uint Scan_Key(int a);
uint Scan_Keya(int a);
//****************************************************************************************************
// BCD转BIN程序
// 设计者: 牟联树
// 描 述: BCD转BIN程序
// 日 期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
uint BCD_BIN(uint a)
{
uint Temp = 0,Temp1;
uint i;
for(i=0;i<16;i++)
{
Temp = Temp>>1;
if(a&0x0001) Temp+= 0x8000;
a = a>>1;
if(a&0x8000) a+=0xd000;
if(a&0x0800) a+=0xfd00;
Temp1 = a;
if(a&0x0080) Temp1+=0x00d0;
if(a&0x0008) Temp1+=0x00fd;
a = (a&0xff00)|(Temp1&0x00ff);
}
return(Temp);
}
//****************************************************************************************************
// 人机交互界面驱动(机器人运行参数设置界面) uint Robot_LCD(int a,int c,struct Robot_xx *b)
// 设计者: 牟联树
// 描 述: 人机交互界
// 日 期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
uint Robot_LCD(int a,int c,struct Robot_xx *b)
{
LCD_Init(0); //清屏
W_ASII_s(0,0,0,(void *)"Work mode"); //显示菜单选项
W_Data_s(72,0,(*b).Work_Mode,0); //显示当前参数
W_ASII_s(0,1,0,(void *)"V_max");
W_Data_s(72,1,(*b).V_max,0); //显示当前参数
W_ASII_s(0,2,0,(void *)"Run setup");
W_Data_s(72,2,(*b).Top_S,0); //显示当前参数
W_ASII_s(0,3,0,(void *)"Time Err");
W_Data_s(72,3,(*b).Time_Err,0); //显示当前参数
W_ASII_s(0,4,0,(void *)"Nexit");
W_ASII_s(0,5,0,(void *)"Back");
W_ASII(120,a,'~'+1,0); //显示游标
W_Data_s(72,6,c,1); //显示设置的标志号
return(0);
}
//****************************************************************************************************
// 人机交互界面驱动(机器人运行参数组选择界面) uint Robot_LCD_a(int a)
// 设计者: 牟联树
// 描 述: 人机交互界
// 日 期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
uint Robot_LCD_a(int a)
{
LCD_Init(0);
W_ASII_s(0,0,0,(void *)"Work Mode 1");
W_ASII_s(0,1,0,(void *)"Work Mode 2");
W_ASII_s(0,2,0,(void *)"Work Mode 3");
W_ASII_s(0,3,0,(void *)"Work Mode 4");
W_ASII_s(0,4,0,(void *)"Work Mode 5");
W_ASII_s(0,5,0,(void *)"Work Mode 6");
W_ASII_s(0,6,0,(void *)"Work Mode 7");
W_ASII_s(0,7,0,(void *)"Work Mode 8");
W_ASII(120,a,'~'+1,0);
return(0);
}
//****************************************************************************************************
// 人机交互界面驱动(参数设置界面) uint Data_setup(void)
// 设计者: 牟联树
// 描 述: 人机交互界
// 日 期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
int Data_setup(void)
{
uint Temp;
uint Temp1 = 0;
LCD_Init(0); //清屏
W_ASII_s(0,0,1,(void *)" Please input ");
W_ASII_s(0,3,1,(void *)"Number:");
W_Data_s1(64,3,Temp1,1);
while((Temp = Scan_Keya(0)) != Exit)
{
if(Temp < 10) Temp1 = (Temp1<<4)+Temp;
W_Data_s1(64,3,Temp1,1);
}
return(BCD_BIN(Temp1));
}
//****************************************************************************************************
// 人机交互界面驱动(机器人运行参数选择界面) uint Robot_setup_a(int a)
// 设计者: 牟联树
// 描 述: 人机交互界
// 日 期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
void Robot_setup_a(int a)
{
uint Data_Temp[256];
int CD_js,Ye_js = 0;
uint Temp,Flash_bz;
struct Robot_xx *P;
Flash_bz = 0;
switch(a)
{
case 0: P = Robot_Data_Head;
break;
case 1: P = Robot_Data_Head1;
break;
case 2: P = Robot_Data_Head2;
break;
case 3: P = Robot_Data_Head3;
break;
case 4: P = Robot_Data_Head4;
break;
case 5: P = Robot_Data_Head5;
break;
case 6: P = Robot_Data_Head6;
break;
case 7: P = Robot_Data_Head7;
break;
default: break;
}
CD_js = 0;
Data_copy(Data_Temp,P);
P = (struct Robot_xx *)Data_Temp;
Temp = Robot_LCD(CD_js,Ye_js,P); //参数设置选择菜单显示程序,里面有清屏操作
while((Temp = Scan_Key(0))!= Exit)
{
if(Temp == CD_up)
{
CD_js--;
if(CD_js<0) CD_js = 5;
}
if(Temp == CD_down)
{
CD_js++; //菜单计数器
if(CD_js>5) CD_js = 0;
}
if(Temp == Enter)
{
if(CD_js == 4)
{
if(Ye_js<63)
{
Ye_js ++;
P ++;
}
}
if(CD_js == 5)
{
if(Ye_js>0)
{
Ye_js --;
P --;
}
}
if(CD_js <4)
{
Temp = Data_setup(); //数据设置
if(Temp < 0xffff)
{
switch(CD_js)
{
case 0: (*P).Work_Mode = Temp;
break;
case 1: (*P).V_max = Temp;
break;
case 2: (*P).Top_S = Temp;
break;
case 3: (*P).Time_Err = Temp;
break;
default: break;
}
Flash_bz = 1;
}
}
}
Temp = Robot_LCD(CD_js,Ye_js,P);
}
if(Flash_bz > 0) Data_copy1(Data_Temp,a);
}
//****************************************************************************************************
// 机器人各动作调试程序
// 设计者: 牟联树
// 描 述: 人机交互界
// 日 期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
void MOT_Setup(void)
{
uint Temp=0x10;
int CG_x;
LCD_Init(0);
W_ASII_s(0,0,1,(void *)"Robot Run Test");
W_ASII_s(0,2,1,(void *)"Please Enter Run");
while((Temp = Scan_Key(0))!=Exit)
{
if(Temp == Enter)
Line_b(Robot_Data_Head,0);
if(Temp == 0x000b)
Line_c(Robot_Data_Head,0);
if(Temp == 0x0009)
Line_c(Robot_Data_Head,1);
if(Temp == 0x0007)
Line_b(Robot_Data_Head,1);
if(Temp == 0x000a)
{
LCD_Init(0);
while((Temp = Scan_Keya(0))!=Exit)
{
if(Read_CG(0)<1)
{
W_Data_s(40,0,data_Temp[0],1);
W_Data_s(40,2,data_Temp[1],1);
if((data_Temp[0] != 100)&&(data_Temp[1] != 100))
{
CG_x = (int)data_Temp[0] - (int)data_Temp[1];
CG_x+= ((int)((data_Temp[0] + data_Temp[1])>>1))-16;
}
if(CG_x > 0)
W_Data_s(40,4,CG_x,1);
else
{
W_Data_s(40,4,-CG_x,1);
W_ASII(48,4,'-',1);
}
}
else
{
W_ASII_s(40,0,1,(void *)"CG_Err");
W_ASII_s(40,2,1,(void *)"CG_Err");
}
Work_daly(10);
}
}
}
}
//****************************************************************************************************
// 机器人行走电机测试程序
// 设计者: 牟联树
// 描 述: 机器人行走电机测试程序
// 问 题:
// 日 期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
void MOT_Test1(void)
{
int Tempa;
uint Temp;
LCD_Init(0);
W_ASII_s(0,0,1,(void *)"MOTO Test Please");
W_ASII_s(0,2,1,(void *)"Exit!!!!!!!!!!!!");
Tempa = 350;
W_Data_s(48,5,Tempa,1);
TXD_MOT_V(-Tempa,Tempa);
while((Temp = Scan_Keya(0))!=Exit)
{
if((Temp == CD_up)&&(Tempa < 4400))
{
Tempa += 100;
TXD_MOT_V(-Tempa,Tempa);
}
if((Temp == CD_down)&&(Tempa >450))
{
Tempa -= 100;
TXD_MOT_V(-Tempa,Tempa);
}
W_Data_s(48,5,Tempa,1);
}
TXD_MOT_V(0,0);
}
//****************************************************************************************************
// 机器人上升电机测试程序
// 设计者: 牟联树
// 描 述: 机器人上升电机测试程序,测试上升电机的功能
// 问 题:
// 日 期: 2003.11.22
// 版本号: 1.0
//****************************************************************************************************
void MOT_Test2(void)
{
int Temp;
SPI_Data = SPI_Data&(~0x0002);
TX_Data(SPI_Data); //夹块
TX_MOT_S(350);
Temp = 350;
while(Temp<3000)
{
Temp+=80;
Work_daly(30);
TX_MOT_S(Temp);
}
while((RX_Data(0)&0x0800)!=0); //上升电机向上,直到5号霍尔有信号
TX_MOT_S(0);
TX_MOT_S(-350);
Temp = 350;
while(Temp<3000)
{
Temp+=80;
Work_daly(30);
TX_MOT_S(-Temp);
}
while((RX_Data(0)&0x8000)!=0); //上升电机向下,直到1号霍尔有信号
TX_MOT_S(0);
TX_MOT_S(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -