本帖最后由 zxcscm 于 2011-8-8 09:24 编辑
附件怎么传不上来呢?老是说:请求来路不正确,无法提交! 这是肿么了???
#include <SH88F2051.H>
#define uchar unsigned char
#define uint unsigned int
/* L293D控制口定义 */
sbit MA=P4^0;
sbit MB=P4^1;
sbit MC=P4^2;
sbit MD=P3^7;
sbit EN12=P3^5;
sbit EN34=P3^2;
#define LMotor_Forward {MA = 1;MB = 0;EN12 = 1;} //左电机前进
#define RMotor_Forward {MC = 1;MD = 0;EN34 = 1;} //右电机前进
#define LMotor_Backward {MA = 0;MB = 1;EN12 = 1;} //左电机后退
#define RMotor_Backward {MC = 0;MD = 1;EN34 = 1;} //右电机后退
#define LMotor_Stop {MA = 0;MB = 0;EN12 = 0;} //左电机1停
#define RMotor_Stop {MC = 0;MD = 0;EN34 = 0;} //右电机2停
/*******变量定义*******/
unsigned char tmp1,tmp2; //PWM控制变量
unsigned char m1,m2,t; //m1,m2控制占空比,t控制周期。
unsigned char key_value; //按键值
unsigned char temp;
void delay10ms(void) //延时10ms子程序
{
unsigned char i,j,z;
for(z=5;z>0;z--)
for(i=4;i>0;i--)
for(j=248;j>0;j--);
}
void delay(unsigned int n)
{
unsigned char i,j;
while(n --)
for(i = 200;i > 0;i --)
for(j = 200;j > 0;j --);
}
void Accelerate(unsigned char speed1) //加速
{
m2=0;
for(m1=0;m1<=speed1;m1++)
{
delay10ms();
delay10ms();
m2++;
}
}
void Decelerate(unsigned char speed1) //减速
{
for(m1;(m1>speed1)||(m2>speed1);m1--)
{
delay10ms();
delay10ms();
m2--;
}
}
void KeyScan()
{
static unsigned char press_time;
unsigned char key_temp;
key_temp=P1&0xf8;
if(key_temp!=0xf8)
{
press_time++;
if(press_time==30)
{
key_value=P1&0xf8;
}
else if(press_time>30)
press_time=40;
}
else
{
press_time=0;
}
}
void Scan()
{
;
}
main()
{
TMOD=0x02; /* 设定T0的工作模式为2 */
TH0=0x9B; /* 装入定时器的初值 */
TL0=0x9B; //用于产生100hz的pwm波,这个定时值是按12M晶振12系统分频写的
EA=1; /* 开中断 */
ET0=1; /* 定时器0允许中断 */
//TR0=1; /* 启动定时器0 */
m1=50;
m2=50;
Scan();
KeyScan();
while(1)
{
temp=P3&0x03; //红外接在P1.0和P1.1
switch(temp)
{
case 0x03: LMotor_Forward;RMotor_Forward; break; //前进
case 0x01: LMotor_Forward;RMotor_Backward;TR0=1;delay(6);break; //右转
case 0x02: RMotor_Forward;LMotor_Backward;TR0=1;delay(6); break; //左转
case 0x00: LMotor_Backward;RMotor_Backward;delay(6); break; //后退
default: break;
}
LMotor_Forward;RMotor_Forward;key_value=0;TR0=1; //前进;
//delay(10);
}
}
void timer0() interrupt 1 /* T0中断服务程序 */
{
if(t==0) /* 1个PWM周期完成后才会接受新数值 */
{
tmp1=m1;
tmp2=m2;
}
if(t<tmp1) EN12=1; else EN12=0; /* 产生电机1的PWM信号 */
if(t<tmp2) EN34=1; else EN34=0; /* 产生电机2的PWM信号 */
t++;
if(t>=100) t=0; /* 1个PWM信号由100次中断产生 */
}
终于贴上了,看来发帖也是门学问呐~~~
|