include #defineucharunsigned char#defineuintunsignedintuchar a,i,time_count=0, count =0,Dutycycle0=50,Dutycycle1 =50,flag;uchar state;/*** 定义电机控制位 ***/sbit INT11=P0^0;// 电机控制位,左电机左,芯片中的总开关sbit INT22=P0^1;//右电机控制位,高电平有效sbit INT33=P0^2;//控制左电机,从而控制其中的车轮sbit INT44=P0^3;sbit funpwm0 =P1^3;///两个控制 PWM的端口sbit funpwm1 =P1^4;sbit IO4=P2^0;//ST188 输出端口sbit IO1=P2^1;sbit IO2=P2^2;sbit IO3=P2^3;sbit IO5=P0^7;sfrCCON= 0xD8;// PCA 控制寄存器sbitCCF0= CCON^0;// PCA 模块 0中断标志sbitCCF1= CCON^1;// PCA 模块 0中断标志sbitCR= CCON^6;// PCA 计数器阵列溢出标志位sbitCF= CCON^7;// PCA 计数器阵列运行控制位sfrCMOD= 0xD9;// PCA 工作模式寄存器sfrCL= 0xE9;// PCA 的16位计数器 ----低 8位sfrCH= 0xF9;// PCA 的16位计数器 ----高 8位sfrCCAPM0= 0xDA;// PCA 模块 0的输出脉冲频率sfrCCAP0L= 0xEA;// PCA 捕获、比较寄存器 —— 低位字节sfrCCAP0H= 0xFA;// PCA 捕获、比较寄存器 —— 高位字节sfrCCAPM1= 0xDB;// PCA 模块 1的输出脉冲频率sfrCCAP1L= 0xEB;//同上sfrCCAP1H= 0xFB;//同上sfrPCAPWM0= 0xf2;// PCA 模块 0的PWM寄存器sfrPCAPWM1= 0xf3;// PCA 模块 1的PWM寄存器/*------------------------------------------------uS 延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振 12M,精确延时请使用汇编 , 大致延时长度如下T=tx2+5 uS------------------------------------------------*/void DelayUs2x( unsigned char t){while ( -- t);}/*------------------------------------------------mS延时函数,含有输入参数unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振 12M,精确延时请使用汇编------------------------------------------------*/void DelayMs( unsigned char t){while (t -- ){// 大致延时 1mS DelayUs2x(245);DelayUs2x(245);}}/****************************速度设定: 通过改变参数a,b来来改变两路pwm的占空比数值越大占空比越小 *******************************************/void pwm0(unsigned int a){CCAP0L=a;CCAP0H=a;}void pwm1(unsigned int b){CCAP1L=b;CCAP1H=b;}void pwm_Init(){CL=0;CH=0;CMOD=0x00;CCAP0H=CCAP0L=0x00;CCAPM0=0x42;CCAP1H=CCAP1L=0x00;CCAPM1=0x42;CR=1;}delay(i){int k,j;for (j =1000;j >0;j -- )for (k =200;k >0;k -- )i -- ;}former(){INT11 =1;INT22 =0;INT33 =1;INT44 =0;pwm0(45);pwm1(40);DelayMs(1000);}turnleft0(){pwm0(130);pwm1(30);DelayMs(1000);}turnright0(){pwm0(30);pwm1(130);DelayMs(1000);}turnleft1(){pwm0(0Xff);pwm1(0);DelayMs(1000);}turnright1(){pwm0(0);pwm1(0Xff);DelayMs(1000);}stop(){INT11 =1;INT22 =1;INT33 =1;INT44 =1;}void turnleft2(){INT11 =1;INT22 =0;INT33 =0;INT44 =1;pwm0(0);pwm1(30);}void turnright2(){INT11 =0;INT22 =1;INT33 =1;INT44 =0;pwm0(30);pwm1(0);}/*************************main(){while (1){pwm_Init();DelayMs(20);主函数 ***********************************/while (1){if (IO5 ==1)else{turnright2();INT11 =1;INT22 =1;INT33 =1;INT44 =1;}/*if(IO3==0&&IO2==0&&IO1==0&&IO4==0) former(); if(IO3==0&&IO2==0&&IO1==0&&IO4==1) turnright1(); if(IO3==0&&IO2==0&&IO1==1&&IO4==0) turnright0(); if(IO3==0&&IO2==0&&IO1==1&&IO4==1) turnleft2(); if(IO3==0&&IO2==1&&IO1==0&&IO4==0) turnleft0(); if(IO3==0&&IO2==1&&IO1==0&&IO4==1) turnright1(); if(IO3==0&&IO2==1&&IO1==1&&IO4==0) former(); if(IO3==0&&IO2==1&&IO1==1&&IO4==1) turnleft2(); if(IO3==1&&IO2==0&&IO1==0&&IO4==0) turnleft1(); if(IO3==1&&IO2==0&&IO1==1&&IO4==0) turnleft0(); if(IO3==1&&IO2==0&&IO1==0&&IO4==1) former(); if(IO3==1&&IO2==0&&IO1==1&&IO4==1) turnright1(); if(IO3==1&&IO2==1&&IO1==0&&IO4==0) turnright2(); if(IO3==1&&IO2==1&&IO1==0&&IO4==1) turnleft1(); if(IO3==1&&IO2==1&&IO1==1&&IO4==0) turnright2(); if(IO3==1&&IO2==1&&IO1==1&&IO4==1) former;*/}} }。