//***********for(i=x;i>0;i--);time=(3+5x)/12 Us***************
#include <5410.h>
#include <robot.h>
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit P22=P2^2;
sbit P23=P2^3;
//这里是延时函数
void Delay(unsigned int i) //延时程序,i是形式参数
{
unsigned int j,k;
for(;i>0;i--)//变量i由实际参数传入一个值,因此i不能赋初值
for(k=0;k<8;k++)
for(j=0;j<128;j++)
{;}
}
//这是调速函数
void motorspeed(unsigned char left_speed, unsigned char right_speed) {
CCAP1H=256-left_speed;
CCAP0H=256-right_speed;
}
//这是马达方向函数
void motordir(unsigned char left_dir, unsigned char right_dir) {
P24=left_dir;
P25=!left_dir;
P27=right_dir;
P26=!right_dir;}
//这里是状态灯函数
void statusled(unsigned char color)
{
if (color == OFF) {P22=1;P23=1;}
if (color == GREEN) {P22=0;P23=1;}
if (color == YELLOW) {P22=0;P23=0;}
if (color == RED) {P22=1;P23=0;}
}
void Init (void){ //机器人初始化
// EA=1;//中断总开关开
//****************************//
AUXR=0X9C;
SCON=0X40;//串口方式1
REN=1;//开接收
AUXR=0X9C;
TMOD=0X20;//定时器与波特率
TH1=0XE6;
TL1=0xe6;
TI=1;
TR1=1;
//****************************//
P1M1=0XFF;
P1M0=0XFF;
//*******************
TMOD=TMOD|0X02; //定时器8位重装
TH0=0XE6;
TL0=0XE6;
AUXR=AUXR&0X7F; //12分频定时
TR0=1;
CMOD = 0x04; // //调PCA频率至定时器0
CCAPM2=0x42;//8位pwm2于P2.0脚 //预置红外发送
CR = 1;
CCAP2H=0x80;//占空比0.5
P2M1=P2M1|0X01; //P2.0强上拉
//****************************//
statusled(GREEN);
motordir(FWD,FWD);
motorspeed(0,0); //预置小车
//****************************//
CCAPM0=0x42;//8位pwm0 //预置PWM
CCAPM1=0x42;//8位pwm1
CR = 1; }
//****************************//
void AD_port(unsigned char k){
ADC_CONTR = ADC_CONTR|0xE0; //1110,0000打开A/D转换电源
ADC_CONTR = ADC_CONTR|k;
Delay(1);
ADC_CONTR = ADC_CONTR&0xE0; //1110,0000 清ADC_FLAG,ADC_START位和低3位
Delay(1); //延时使输入电压达到稳定
ADC_DATA = 0; //清A/D转换结果寄存器
}
//****************************//
int AD_sorce(){
unsigned char i;
ADC_CONTR = ADC_CONTR|0x08; //0000,1000ADCS = 1,启动转换
Delay(1);
do { ; }
while((ADC_CONTR & 0x10)==0); //0001,0000等待A/D转换结束
ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG位,停止A/D转换
i=ADC_DATA;
return(i);}