?? step.c
字號:
#include<reg52.h>
#include<absacc.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
//--------------------------------------------------------------------------------------------------------
//左輪方向 右輪方向 左輪速度 右輪速度
uint speed_1, speed_2;
uchar ii = 0,jj = 0;
uchar dir_1,dir_2;
uchar pai_1 = 0,quan_1 = 0,pai_2 = 0;quan_2 = 0;
uint pwm_1 = 0,pwm_2 = 0;
uint cmd = 0,cmd_temp=0;
uint aa=200,bb=100;
uint ww;
int c=0;
float long_data = 0;
float long_ctrl = 0;
//-----------------
char cmd_table[4];
//--------------------------------------------------------------------------------------------
uchar table[ 16 ] = { 0x09, 0x08, 0x0a, 0x02, 0x06, 0x04, 0x05, 0x01,
0x01, 0x05, 0x04, 0x06, 0x02, 0x0a, 0x08, 0x09};
//--------------------------------------------------------------------------------------------------------
void run( uchar su_1,uchar su_2,bit zz,bit yy );//小車運行程序
void start( void ); //初始化程序
void ctrl( void ); // 控制小車行進路程
void get_long(void);// 測量路程
void stop(void); // 停止小車
void turn_right( uchar jiao_du_1 );//右轉
void turn_left( uchar jiao_du_2 ); //左轉
void turn_yuan(uchar zhou_chang); //圓
//--------------------------------------------------------------------------------------------------------
void start( void )
{
EA = 1; ET0 = 1; TMOD=0x02;TH0 = 0xe0; TL0 = 0xe0;
EX0=1; IT0=1;
}
//--------------------------------------------------------------------------------------------------------
void run( uint su_1,uint su_2,bit zz,bit yy )
{
dir_1 = zz;
dir_2 = yy;
speed_1 = su_1;
speed_2 = su_2;
TR0 = 1;
}
//---------------------------------------------------------------------------------------------------------
void get_long(void)
{
long_data =( quan_1 + quan_2 ) * 10.75 + ( pai_1 + pai_2 ) * 0.217;
}
//----------------------------------------------------------------------------------------------
void stop(void)
{
if(long_data>long_ctrl)
{
TR0 = 0; quan_1 = quan_2 = pai_1 = pai_2 = 0;
}
}
void turn_yuan(uchar zhi_jing)
{
if(zhi_jing==30)
{
run (zhi_jing*2-1,zhi_jing*2+16,1,1);
long_ctrl=zhi_jing*6.70+5;
}
if(zhi_jing==50)
{
run (zhi_jing*2-1,zhi_jing*2+16,1,1);
long_ctrl=zhi_jing*6.62;
}
}
//--------------------------------------------------------------------------------------------------------
void turn_right( float jiao_du_1 )
{
run( 100, 100, 1, 0);
long_ctrl = jiao_du_1 / 12;
}
//--------------------------------------------------------------------------------------------------------------------
void turn_left( float jiao_du_2 )
{
run( 100, 100, 0, 1);
long_ctrl = jiao_du_2 / 13;
}
//---------------------------------------------------------------------------------------------------------
void ctrl( void )
{
if(cmd)
{
switch(cmd)
{
case 0x10: long_ctrl=100; run( 100, 100, 1, 1);ww=150; break; //前進1米
case 0x20: long_ctrl=200; run( 100, 100, 1, 1);ww=150; break; //前進2米
case 0x40: turn_yuan(30); ww=150; break; //30 圓
case 0x80: turn_yuan(50); ww=150; break; //50 圓
case 0x90: turn_left(40); ww=150; break; //左轉 //
case 0x30: run(0,0,1,1);long_ctrl=1000; ww=150; break; //前進
case 0x50: run(0,0,0,0);long_ctrl=1000; ww=150; break; //后退
case 0x60: turn_right(40); ww=150; break; //右轉
case 0xa0: long_ctrl=0; break; //停止
case 0xc0: turn_left(90); ww=150; break; //左轉(90)
case 0x70: turn_right(90); ww=150; break; //右轉(90)
case 0xb0: turn_left(60); ww=150; break; //左轉(60)
case 0xe0: turn_right(60); ww=150; break; //右轉(60)
}
cmd=0x00;
}
get_long( );
stop();
}
//---------------------------------------------------------------------------------------------
void main(void)
{
start();
// run (50,100,1,1); long_ctrl=1000;
while( 1 )
{
ctrl();
// play();
}
}
//---------------------------------------------------------------------------------------------------
void steep( void ) interrupt 1 using 1
{
pwm_1 ++;
pwm_2 ++;
//----------------------------------
if( pwm_1 > speed_1+ww )
{
if(ww > 0) ww--;
pwm_1 = 0;
ii ++;
if(ii >= 8)
{
ii = 0; pai_1 ++;
if( pai_1 >= 50 )
{
pai_1 = 0; quan_1 ++;
}
}
}
//----------------------------------
if( pwm_2 > speed_2 + ww )
{
pwm_2 = 0;
jj ++;
if(jj >= 8)
{
jj = 0; pai_2 ++;
if( pai_2 >= 50 )
{
pai_2 = 0; quan_2 ++;
}
}
}
P1 = ( table[ ii + dir_1 * 8 ] << 4) | table[ jj + ( dir_2 * 8 ) ];
}
//---------------------------------------------------------------------------------------------------
void get_cmd( void ) interrupt 0 using 0
{
cmd = P3 & 0xf0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -