最简单的c语言小车寻迹程序
循迹小车程序(三路循迹)

#include "reg51.h"typedef unsigned int uint;typedef unsigned char uchar;sbit p2_0 = P2^0; //开关sbit p2_1 = P2^1; //红外检测sbit p2_2 = P2^2;sbit p2_3 = P2^3;sbit p1_0 = P1^0; //电机驱动sbit p1_1 = P1^1;sbit p1_2 = P1^2;sbit p1_3 = P1^3;sbit pwm1 = P1^4; //pwm调速sbit pwm2 = P1^5;unsigned char timer1;/******************************************************************** ************ 函数名 : Time1Config* 函数功能 : 设置定时器* 输入 : 无* 输出 : 无********************************************************************* **********/void Time1Config(){TMOD|= 0x10; //设置定时计数器工作方式1为定时器//--定时器赋初始值,12MHZ下定时0.5ms--//TH1 = 0xFE;TL1 = 0x0C;ET1 = 1; //开启定时器1中断EA = 1;TR1 = 1; //开启定时器}/************************************************ 延时函数总共延时1ms乘以count************************************************/ void DelayX1ms(uint count){uint j;while(count--!=0){for(j=0;j<72;j++);}}/************************************************ 电机转动函数定义************************************************/ void ZhiXing( ){p1_0=0;p1_1=0;p1_2=0;p1_3=0;DelayX1ms(10);p1_0=0;p1_1=1;p1_2=0;p1_3=1;DelayX1ms(15);}void ZuoZhuan( ){pwm1=0;pwm2=0;DelayX1ms(10); p1_0=0;p1_1=1;p1_2=1;p1_3=0;DelayX1ms(20); }void YouZhuan( ){pwm1=0;pwm2=0;DelayX1ms(10);p1_0=1;p1_1=0;p1_2=0;p1_3=1;DelayX1ms(20); }void HouTui( ){p1_0=0;p1_1=0;p1_2=0;p1_3=0;DelayX1ms(6); p1_0=1;p1_1=0;p1_2=1;p1_3=0;DelayX1ms(20);}/************************************************ 主函数************************************************/ void main( ){Time1Config();while(1){if( p2_1==0 && p2_2==0 && p2_3==1){YouZhuan( );}else if(p2_1==1 && p2_2==0 && p2_3==0){ZuoZhuan( );}else{ZhiXing( );}}}/******************************************************************** ************ 函数名 : Time1* 函数功能 : 定时器1的中断函数* 输入 : 无* 输出 : 无********************************************************************* **********/void Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断{timer1++;if(timer1>100) //PWM周期为100*0.5ms{timer1=0;}if(timer1 < 85) //改变30这个值可以改变直流电机的速度{pwm1=1;pwm2=1;}else{pwm1=0;pwm2=0;}TH1 = 0xFE; //重新赋初值TL1 = 0x0C;}。
循迹小车程序

#include<STC12C5A60S2.H>#include<intrins.h>#define uint unsigned int#define uchar unsigned char#define zhong0XF7//中间11110111#define zzhong0XE3//中间11100011#define zuo10XEF//从中间向左第一个11101111#define zuo20XDF//从中间向左第一个11011111#define zuo30XBF//从中间向左第一个10111111#define zuo010XE7//从中间向左第1、0个11100111 #define zuo020XD7//从中间向左第二个11010111#define zuo030XB7//从中间向左第二个10110111#define zuo120XCF//从中间向左第1、0个11001111 #define zuo130XAF//从中间向左第1、0个10101111 #define zuo230X9F//从中间向左第1、0个10011111 #define zuo0120XC7//从中间向左第二个11000111#define zuo01230X87//从中间向左第二个10000111#define zuo10120XE1//从中间向左第1、0个11100001 #define zuo101230XE0//从中间向左第1、0个11100000#define zuo2101230XC0//从中间向左第1、0个11000000#define you10XFB//从中间向右第一个11111011#define you20XFD//从中间向右第一个11111101#define you30XFE//从中间向右第一个11111110#define you010XF3//从中间向右第1、0个11110011 #define you020XF5//从中间向右第二个11110101#define you030XF6//从中间向右第二个11110110#define you120XF9//从中间向左第二个11111001#define you130XFA//从中间向左第二个11111010#define you230XFC//从中间向左第二个11111100#define you0120XF1//从中间向右第二个11110001#define you01230XF0//从中间向右第二个11110000 #define you10120XC3//从中间向右第二个11000011 #define you101230X83//从中间向右第二个10000011 #define you2101230X81//从中间向右第二个10000001#define quanbu0X80//全部检测到10000000#define wu0xff//刚开始什么都没检测不走sbit IN3=P0^6;//右轮sbit IN4=P0^5;sbit IN1=P0^4;//电机控制口sbit IN2=P0^3;sbit open=P1^0;//非手动启动sbit duojipwm=P2^7;//舵机控制口sbit LED=P1^5;//灯光指示sbit jiguang=P1^6;//激光uint duoji_num;//char t=34;uchar a,zsu,ysu,flag,t;uint num=0;void duoji_init(void){TMOD=0X11;//定时器的工作方式为0AUXR=0X00;//12分频TL0=(65536-364)%256;//装初值为20msTH0=(65536-364)/256;//TL1=(65536-50000)%256;//TH1=(65536-50000)/256;EA=1;//开总中断ET0=0;//关定时器0中断TR0=1;//启动定时器0PT0=1;TR1=0;}void Pwm_Init(){CMOD=0X88;//PCA在空闲模式下停止计数;PCA时钟源为机器周期的1/4;不允许PCA中断CL=0x00;CH=0x00;CCAP0L=0x00;//占空比调节占空比=1-(CCAP0L/255)当前占空比是百分之25,5%=F2,3F时占空比为百分之75CCAP0H=0x00;CCAP1L=0x00;//占空比调节占空比=1-(CCAP0L/255)当前占空比是百分之25,3F时占空比为百分之75CCAP1H=0x00;CCAPM1=0x42;CCAPM0=0x42;CR=1;//计数器清零}void delay1ms(uint delay1ms)//STC11F60XE,22.1184M,延时1ms{for(;delay1ms>0;delay1ms--)for(i=0;i<7;i++)for(j=0;j<210;j++);}void pwm_set(uchar zsu,uchar ysu){int z,y;z=(65536*zsu)/100;y=(65536*ysu)/100;CCAP0L=(65536-z)%256;CCAP0H=(65536-z)/256;CCAP1L=(65536-y)%256;CCAP1H=(65536-y)/256;}/*void kz_duoji(){ET0=1;t=5;delay1ms(100);//260ET0=0;delay1ms(2000);//中间延时LED=0;delay1ms(50);LED=~LED;delay1ms(20);//delay1ms(1000);//中间延时ET0=1;t=11;delay1ms(200);//400ET0=0;//转45delay1ms(1000);//中间延时LED=0;delay1ms(50);LED=~LED;delay1ms(20);ET0=1;t=4;delay1ms(100);//260delay1ms(1000);//中间延时LED=0;delay1ms(50);LED=~LED;delay1ms(20);ET0=1;t=3;delay1ms(100);//260ET0=0;delay1ms(1000);//中间延时LED=0;delay1ms(5);LED=~LED;delay1ms(20);//ET0=1;//90//t=7;//delay1ms(50);//ET0=0;//delay1ms(200);//中间延时//pwm_set(60,98);//车转180°//IN1=1;IN2=0;IN3=0;IN4=1;//delay1ms(400);////ET0=1;//回转45°//t=8;//delay1ms(260);//ET0=0;////delay1ms(200);//中间延时////LED=~LED;//delay1ms(10);//LED=~LED;//delay1ms(10);////ET0=1;//回转45°//t=12;//delay1ms(400);//400//ET0=0;}//void kz_beep()//{//uchar i;//for(i=0;i<3;i++)//{//beep=~beep;//delay1ms(150);//}//beep=1;//}*/void xunhuan(void){a=P2;_nop_();_nop_();_nop_();//11100000111000011111100011111010111100101111010011100101 11101001111100001110001111100111111011001110110111110001 1111010111111100if((a==0X80)||(a==0X81)||(a==0X82)||(a==0X83)||(a==0X84)||(a==0X85)||(a==0X86)||(a==0X87)||( a==0X88)||(a==0X89)||(a==0X8A)||(a==0X8B)||(a==0X8C)||(a==0X8D)||(a==0X8E)||(a==0X8F)||(a==0X90)||(a==0X91)||(a==0X92)||(a==0X93)||(a==0X94)||(a==0X95)||(a==0X96)||(a==0X97)||( a==0X98)||(a==0X99)||(a==0X9A)||(a==0X9B)||(a==0X9C)||(a==0X9D)||(a==0X9E)||(a==0XA0)||(a==0XA1)||(a==0XA2)||(a==0XA3)||(a==0XA4)||(a==0XA5)||(a==0XA6)||(a==0XA 7)||(a==0XA8)||(a==0XA9)||(a==0XAA)||(a==0XAB)||(a==0XAC)||(a==0XAD)||(a==0XAE)||(a= =0XAF)||(a==0XB0)||(a==0XB1)||(a==0XB2)||(a==0XB3)||(a==0XB4)||(a==0XB5)||(a==0XB6)||(a==0XB7) ||(a==0XB8)||(a==0XB9)||(a==0XBA)||(a==0XBB)||(a==0XBC)||(a==0XBD)||(a==0XBE)||(a==0XC0)||(a==0XC1)||(a==0XC2)||(a==0XC3)||(a==0XC4)||(a==0XC5)||(a==0XC6) ||(a==0XC8)||(a==0XC9)||(a==0XCA)||(a==0XCB)||(a==0XCC)||(a==0XCD)||(a==0XCE)||(a==0XD0)||(a==0XD1)||(a==0XD2)||(a==0XD3)||(a==0XD4)||(a==0XD5)||(a==0XD6)||(a==0XD 7)||(a==0XD8)||(a==0XD9)||(a==0XDA)||(a==0XDB)||(a==0XDC)||(a==0XDD)||(a==0XDE)||(a==0XE0)||(a==0XE1)||(a==0XE2)||(a==0XE4)||(a==0XE5)||(a==0XE6) ||(a==0XE8)||(a==0XE9)||(a==0XEA)||(a==0XEB)||(a==0XEC)||(a==0XED)||(a==0XEE)||(a==0XF0)||(a==0XF1)||(a==0XF2)||(a==0XF4)||(a==0XF5)||(a==0XF6) ||(a==0XF8)||(a==0XFA)){delay1ms(25);if((a==0X80)||(a==0X81)||(a==0X82)||(a==0X83)||(a==0X84)||(a==0X85)||(a==0X86)||(a==0X87)||( a==0X88)||(a==0X89)||(a==0X8A)||(a==0X8B)||(a==0X8C)||(a==0X8D)||(a==0X8E)||(a==0X8F)||(a==0X90)||(a==0X91)||(a==0X92)||(a==0X93)||(a==0X94)||(a==0X95)||(a==0X96)||(a==0X97)||( a==0X98)||(a==0X99)||(a==0X9A)||(a==0X9B)||(a==0X9C)||(a==0X9D)||(a==0X9E)||(a==0XA0)||(a==0XA1)||(a==0XA2)||(a==0XA3)||(a==0XA4)||(a==0XA5)||(a==0XA6)||(a==0XA 7)||(a==0XA8)||(a==0XA9)||(a==0XAA)||(a==0XAB)||(a==0XAC)||(a==0XAD)||(a==0XAE)||(a= =0XAF)||(a==0XB0)||(a==0XB1)||(a==0XB2)||(a==0XB3)||(a==0XB4)||(a==0XB5)||(a==0XB6)||(a==0XB7) ||(a==0XB8)||(a==0XB9)||(a==0XBA)||(a==0XBB)||(a==0XBC)||(a==0XBD)||(a==0XBE)||(a==0XC0)||(a==0XC1)||(a==0XC2)||(a==0XC3)||(a==0XC4)||(a==0XC5)||(a==0XC6)||(a==0XC8)||(a==0XC9)||(a==0XCA)||(a==0XCB)||(a==0XCC)||(a==0XCD)||(a==0XCE)||(a==0XD0)||(a==0XD1)||(a==0XD2)||(a==0XD3)||(a==0XD4)||(a==0XD5)||(a==0XD6)||(a==0XD 7)||(a==0XD8)||(a==0XD9)||(a==0XDA)||(a==0XDB)||(a==0XDC)||(a==0XDD)||(a==0XDE)||(a==0XE0)||(a==0XE1)||(a==0XE2) ||(a==0XE4)||(a==0XE5)||(a==0XE6)||(a==0XE8)||(a==0XE9)||(a==0XEA)||(a==0XEB)||(a==0XEC)||(a==0XED)||(a==0XEE)||(a==0XF0)||(a==0XF1)||(a==0XF2) ||(a==0XF4)||(a==0XF5)||(a==0XF6)||(a==0XF8)||(a==0XFA) ){num=num+1;if(num==1)//装球{delay1ms(5);pwm_set(25,30);IN1=0;IN2=1;IN3=0;IN4=1;delay1ms(50);pwm_set(1,1);IN1=0;IN2=0;IN3=0;IN4=0;jiguang=0;//打开激光,灯闪烁LED=~LED;delay1ms(10);LED=~LED;delay1ms(10);delay1ms(2000);pwm_set(70,70);IN1=0;IN2=1;IN3=0;IN4=1;}if(num==2)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==3)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);TR1=1;if(flag==1){pwm_set(0,0);//停止IN1=0;IN2=0;IN3=0;IN4=0;LED=~LED;delay1ms(10);LED=~LED;delay1ms(10);kz_duoji();}elsepwm_set(50,55);//直走IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(500);}if(num==4)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==5)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==6)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==7)//右直角{pwm_set(60,65);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(150);pwm_set(94,53);IN1=0;IN2=1;IN3=1;IN4=0;delay1ms(580);}if(num==8)//右直角{pwm_set(60,65);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(150);pwm_set(94,53);IN1=0;IN2=1;IN3=1;IN4=0;delay1ms(580);}if(num==9)//右直角{pwm_set(60,65);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(150);pwm_set(94,53);IN1=0;IN2=1;IN3=1;IN4=0;delay1ms(580);}if(num==10)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==11)//右直角{pwm_set(60,65);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(150);pwm_set(94,53);IN1=0;IN2=1;IN3=1;IN4=0;delay1ms(580);}if(num==12)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==13)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==14)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==15)//右直角{}if(num==16)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==17)//右直角{}if(num==18)//右直角{}if(num==19)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==20)//右直角{}if(num==21)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==22)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);pwm_set(60,98);IN1=1;IN2=0;IN3=0;IN4=1;delay1ms(500);}if(num==23)//左直角{pwm_set(50,55);IN1=1;IN2=0;IN3=1;IN4=0;delay1ms(280);}}}}void jiance(void){a=P2;switch(a){//z//ycase zhong:pwm_set(77,82);IN1=0;IN2=1;IN3=0;IN4=1;break;//直走case zzhong:pwm_set(77,82);IN1=0;IN2=1;IN3=0;IN4=1;break;case zuo1:pwm_set(0,80);IN1=0;IN2=0;IN3=0;IN4=1;break;//偏右10走时case zuo2:pwm_set(0,88);IN1=0;IN2=0;IN3=0;IN4=1;break;//偏右20走时case zuo3:pwm_set(0,93);IN1=0;IN2=0;IN3=0;IN4=1;break;//偏右走时case zuo01:pwm_set(0,81);//偏右5走时IN1=0;IN2=0;IN3=0;IN4=1;break;case zuo12:pwm_set(0,86);//偏右15走时IN1=0;IN2=0;IN3=0;IN4=1;break;case zuo23:pwm_set(0,91);//偏右15走时IN1=0;IN2=0;IN3=0;IN4=1;break;//case zuo012:pwm_set(20,60);//偏右15走时//IN1=0;IN2=1;IN3=0;IN4=1;break;case you1:pwm_set(78,0);IN1=0;IN2=1;IN3=0;IN4=0;break;//偏左10走时case you2:pwm_set(83,0);IN1=0;IN2=1;IN3=0;IN4=0;break;//偏左20走时case you3:pwm_set(90,0);IN1=0;IN2=1;IN3=0;IN4=0;break;//偏左走时case you01:pwm_set(78,0);//偏左5走时IN1=0;IN2=1;IN3=0;IN4=0;break;case you12:pwm_set(81,0);//偏左15走时IN1=0;IN2=1;IN3=0;IN4=0;break;case you23:pwm_set(86,0);//偏左15走时IN1=0;IN2=1;IN3=0;IN4=0;break;case wu:pwm_set(50,55);//什么都检测不到IN1=0;IN2=1;IN3=0;IN4=1;break;default:xunhuan();break;}}void main(){Pwm_Init();duoji_init();P2=0xff;LED=1;while(1){if(open==0){jiance();}elseP2=0xff;}}//void tm0_isr(void)interrupt1//{//TL0=(65536-364)%256;//TH0=(65536-364)/256;//duoji_num++;//if(t==duoji_num)//{//duojipwm=0;//低电平//}//if(duoji_num==100)//{//duojipwm=1;//高电平//duoji_num=0;//}//}void Time1(void)interrupt3//3为定时器1的中断号1定时器0的中断号0外部中断12外部中断24串口中断{uchar timer1;TL1=(65536-50000)%256;TH1=(65536-50000)/256;timer1++;if(timer1==20)//1s{timer1=0;flag=1;}}。
pwm调速控制小车循迹壁障c程序

pwm调速控制小车循迹壁障c程序#include< reg51.h >#define uchar unsigned char#define uint unsigned int#define MOTOR_C P1 //P1口作为电机的控制口。
//#define SIGNAL P3 //P3口的低两位为循迹传感器输入口。
#define SHELVES 10 //速度总档数。
#define BACK 0xfa //后退。
#define FORWARD 0xf5 //前进。
sbit senserr = P3^2; //(右)循迹。
sbit senserl = P3^3; //(左)循迹。
sbit hwf = P3^0; //(前)红外壁障传感器入口。
sbit hwb = P3^1; //(后)红外壁障传感器入口。
sbit PWM_R = P1^0; //右电机PWM输入口。
sbit PWM_L = P1^2; //左电机PWM输入口。
sbit PWM_HR = P1^1; //(后退)右电机。
sbit PWM_HL = P1^3; //(后退)左电机。
void timer0_init( void ); //定时器0初始化函数。
void timer1_init( void ); //定时器1初始化函数。
void right( void ); //前进右转弯函数。
void left( void ); //前进左转弯函数。
void forward( void ); //前进函数。
void hright(void); //后退右转函数。
void hleft(void); //后退左转函数。
void back(void); //后退函数。
uchar percent_l = 0; //(前进)左轮占空比。
uchar percent_r = 0; //(前进)右轮占空比。
uchar percent_hl = 0; //(后退)左轮占空比。
寻迹小车控制程序

//名称:寻迹小车控制程序//功能:控制小车绕黑线行驶//头文件包含#include "reg51.h"//定义存放P1口状态的全局变量unsigned char P1_State=0xff;//定义存放红外遥控状态的全局变量unsigned char IrDA_State=0xff;//////////////////////////1.电机控制端口分配///////////////////////////// 左轮运转状态右轮运转状态// P2.0 P2.1 P2.2 P2.3// 0 1 正转0 1 正转// 1 0 反转 1 0 反转// 1 1 停止 1 1 停止// 0 0 非允许状态0 0 非允许状态//左轮控制端口sbit Left_Motor_Goahead = P2^0; //该端口为低电平时,小车左轮正转(前进)sbit Left_Motor_Back = P2^1; //该端口为低电平时,小车左轮反转(后退)//右轮控制端口sbit Right_Motor_Goahead = P2^2; //该端口为低电平时,小车右轮反转(后退)sbit Right_Motor_Back = P2^3; //该端口为低电平时,小车右轮反转(前进)///////////////////////2.小车运行状态控制子程序//////////////////////////2.1 前进子程序//功能:左轮正转、右轮正转,从而控制小车前进//入口参数:无//出口参数:无//调用示例:Car_Goahead();void Car_Goahead(){Left_Motor_Goahead = 0; //左轮正转Left_Motor_Back = 1;Right_Motor_Goahead = 0; //右轮正转Right_Motor_Back = 1;}//2.2 后退子程序//功能:左轮反转、右轮反转,从而控制小车后退//入口参数:无//出口参数:无//调用示例:Car_Back();void Car_Back()Left_Motor_Goahead = 1; //左轮反转Left_Motor_Back = 0;Right_Motor_Goahead = 1; //右轮反转Right_Motor_Back = 0;}//2.3 左转弯子程序//功能:左轮停转,右轮正转,从而控制小车左转弯//入口参数:无//出口参数:无//调用示例:Car_Turn_Left();void Car_Turn_Left(){Left_Motor_Goahead = 1; //左轮停转Left_Motor_Back = 1;Right_Motor_Goahead = 0; //右轮正转Right_Motor_Back = 1;}//2.4 右转弯子程序//功能:左轮正转,右轮停转,从而控制小车右转弯//入口参数:无//出口参数:无//调用示例:Car_Turn_Right();void Car_Turn_Right(){Left_Motor_Goahead = 0; //左轮正转Left_Motor_Back = 1;Right_Motor_Goahead = 1; //右轮停转Right_Motor_Back = 1;}//2.5 停车子程序//功能:左轮停转,右轮停转,控制小车停车//入口参数:无//出口参数:无//调用示例:Car_Stop();void Car_Stop(){Left_Motor_Goahead = 1; //左轮停转Left_Motor_Back = 1;Right_Motor_Goahead = 1; //右轮停转Right_Motor_Back = 1;}////////////////////////////3.延时子程序//////////////////////////////3.1 延时50ms子程序//功能:延时50ms//入口参数:无//出口参数:无//调用示例:delay_50ms();void delay_50ms(){TMOD=0x01; //T0,方式1,12MHz晶振TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;while(!TF0);TF0=0;TR0=0;}//3.2 延时1s子程序//功能:延时1s//入口参数:无//出口参数:无//调用示例:delay_1s();void delay_1s(){unsigned char Count1;for(Count1=0;Count1<20;Count1++)delay_50ms();}//3.3 延时5s子程序//功能:延时5s//入口参数:无//出口参数:无//调用示例:delay_5s();void delay_5s(){unsigned char Count2;for(Count2=0;Count2<100;Count2++)delay_50ms();}//3.4 延时10s子程序//功能:延时10s//入口参数:无//出口参数:无//调用示例:delay_10s();void delay_10s(){unsigned char Count3;for(Count3=0;Count3<200;Count3++)delay_50ms();}///////////////////////4.传感器信号采集与处理子程序///////////////////////4.1 3路传感器信号采集与处理子程序//功能:根据连接传感器电路的I/O口的8种状态,调用// 小车控制子程序,实现小车运行状态的调整,// 由于3路传感器不能有效识别“左T”、“右T”标志物,// 因此,若想识别“T”字标志物,需在比赛时申请传感器板,// 并调用5路传感器信号采集与处理子程序。
智能小车寻迹入库程序+C

“旋风”入库的程序,在安装路面传感器安装于距离地面1CM的位 置。对于不同的地面环境可以适当修改程序中电机的速度*/ #include <reg51f.h> #include <math.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define _Nop() _nop_(),_nop_(),_nop_(),_nop_() /*定义空指令*/ sbit LeftW_F = P1^7; /*控制左轮前进,低有效*/ sbit LeftW_B = P1^6; /*控制左轮后退,低有效*/ sbit RightW_F= P1^5; /*控制右轮前进,低有效*/ sbit RightW_B= P1^4; /*控制右轮后退,低有效*/ sbit ir_send_forword_left = P1^3; /*前端左边红外发射二极管控制信号,低电平发射*/ sbit ir_send_forword_right = P1^2; /*前端右边红外发射二极管控制信号,低电平发射*/ sbit ir_receive_forword = P2^4; /*前端红外信号接收端,低电平则有红外信号反射*/ sbit road_left= P3^2; /*左边路面状态*/ sbit road_right= P3^3; /*右边路面状态*/ sbit smg1 = P3^4; /*LED1 位选信号*/ sbit smg2= P3^5; /*LED2 位选信号*/ uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e}; uint count=0; uchar idata ir_data_0=0x00; /*当前路面传感器状态存储单元*/ uchar idata ir_data_1=0x00; /*上一次路面传感器状态存储单元*/ /*标准的 160uS 延时时间*/ delay160us() { uint i,j; for(i=0;i<6;i++) {for(j=0;j<5;j++) /*160us*/ {;} } } /*标准的 80mS 延时时间*/ delay() { uint i,j; for(i=0;i<200;i++) {for(j=0;j<100;j++) {;} } } /*---------------------------------------------------------------------------------return value means the barrier's location.return value: 0,0,0,0,R,L,FR,FL. 1:has barrier;0: no
循迹小车的C语言程序(带注释)

/************ ******** *
第二部分 电机控制子函数 ************* ******** ******* /
void forward1()// { IN1=0; IN2=1; }
电机
1
前进
void forward2()// { IN3=0; IN4=1; }
电机
2
前进
void back1()// { IN1=1; IN2=0; }
当第一、二个 LED 检测到黑线时,小车左转
if(RP1==0&&RP2==0&&RP3==0&&RP4==1) turn(count1,0,coun t2,200); // 0001
当第一、二、三个 LED 检测到黑线时, 小车
左大转
/************ ******** ***
小车右转*******************************/
当最右边的 LED 检测到黑线时,小车左转
if(RP1==1&&RP2==0&&RP3==1&&RP4==1)
turn(count1,80,coun t2,150); // 1011
当第二个 LED 检测到黑线时,小车偏左转
if(RP1==0&&RP2==0&&RP3==1&&RP4==1) turn(count1,0,coun t2,100); // 0011
void time0()interrupt 1 { TH0=(65536-1000)/256;// TL0=(65536-1000)%256; count1++; count2++; if(count1>=500)// count1=0; if(count2>=500)// count2=0; }
智能小车寻迹入库程序 C概要
“旋风”智能小车–巡线入库演示程序 } break; case 0x0c: { //左边和右边都有反射信号,小车应该前进 turn_left(; } break; default : break; } } TL1=-20000%256; TH1=-20000/256; //T0 基准 50mS } void main( { uchar bar=0x00; smg2=0; TMOD=0x12; /*定时器初始化*/ TL0=0x20; TH0=0x20; TL1=-20000%256; /*T1 基准 20mS*/ TH1=-20000/256; TR0=1; TR1=1; EA=1; ET1=1; CMOD=0x04; /*选择 PCA 的时钟源*/go_forward(; while(1 { bar=test_ir_io(; P0=table[bar]; switch(bar /*判断寻线是否已经结束*/ { case 0x00: { ; } break; case 0x01: { ; } break; case 0x02: 作者:雷刚编写日期:2006.3.25 6“旋风”智能小车–巡线入库演示程序 { ; } break; case 0x03: /*寻线已经结束,开始穿越障碍*/ { ET1=0; TR1=0; do{ /*小车右转,转到前边没有障碍为止*/turn_right_90(; bar=test_ir_io(; P0=table[bar]; }while(bar!=0x00; delay(; while(1{ if((road_left==1||(road_right==1 /*判断是否进入车库*/ { stop(; /*小车进入车库,小车停车*/ while(1 { smg1=0; /*利用 LED 发出停车提示信息*/ smg2=0; P0=0xbf; delay(; delay(; P0=0xff; smg1=1; smg2=1; delay(; delay(; } } bar=test_ir_io(;P0=table[bar]; switch(bar /*小车在巷道中避障前进*/ { case 0x00: { go_forward_90(; } break; case 0x01: { 作者:雷刚编写日期:2006.3.25 7“旋风”智能小车–巡线入库演示程序 turn_right_90(; } break; case 0x02:{ turn_left_90(; } break; case 0x03: { ; } break; } } }break; default:break; } } } 作者:雷刚编写日期:2006.3.25 8。
循迹小车程序 C语言
#define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向前走
#define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两个电机向后转
#define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转
bit Right_moto_stop=1;
bit Left_moto_stop =1;
/************************************************************************/
//延时函数
void delay(unsigned int k)
P1_4 P1_5 接IN5 IN6 当 P1_4=0,P1_5=1; 时右上电机反转
P1_4 P1_5 接IN5 IN6 当 P1_4=0,P1_5=0; 时右上电机停转
P1_6 P1_7 接IN7 IN8 当 P1_6=1,P1_7=0; 时右下电机正转 右下电机接驱动板子输出端(蓝色端子OUT7 OUT8)
P1_2 P1_3 接IN3 IN4 当 P1_2=0,P1_3=1; 时左下电机反转
P1_2 P1_3 接IN3 IN4 当 P1_2=0,P1_3=0; 时左下电机停转
P1_4 P1_5 接IN5 IN6 当 P1_4=1,P1_5=0; 时右上电机正转 右上电机接驱动板子输出端(蓝色端子OUT5 OUT6)
P1_0 P1_1 接IN1 IN2 当 P1_0=0,P1_1=1; 时左上电机反转
P1_0 P1_1 接IN1 IN2 当 P1_0=0,P1_1=0; 时左上电机停转
智能小车循迹、避障、红外遥控C语言代码
//智能小车避障、循迹、红外遥控 C 语言代码// 实现功能有超声波避障, 红外遥控智能小车, 红外传感器实现小车自动循迹, 1602 显示小 车的工作状态,另有三个独立按键分别控制三种状态的转换 // 注:每个小车的引脚配置都不一样,要注意引脚的配置,但是我的代码注释比较多,看起 来比较容易一点 #include <> #include <> #include"" #include <> #define uchar unsigned char #define uint unsigned int uchar ENCHAR_PuZh1[8]=" uchar ENCHAR_PuZh2[8]=" uchar ENCHAR_PuZh3[8]=" ucharENCHAR_PuZh4[8]=" uchar ENCHAR_PuZh5[8]=" run back stop left right "; ";//1602 显示数组 H. H. H. uchar ENCHAR_PuZh6[8]=" xunji "; uchar ENCHAR_PuZh7[8]=" bizhang"; uchar ENCHAR_PuZh8[8]=" yaokong"; #define HW P2 #define PWM /****************************** P1 //红外传感器引脚配置 P2k 口 /* L298N 管脚定义 */ 超声波引脚控制 ******************************/ sbit ECHO=P3A2; sbit TRIG=P3A3;///// 红外控制引脚配置 sbit sbituchar KEY2=P3A7; KEY 仁 P3M;state_total=3,state_2=0;// 2 为红外遥控 ucharuchar time_1 uchar 局变量 // 超声波接收引脚定义 // 超声波发送引脚定义// 红外接收器数据线 // 独立按键控制 总状态控制全局变量 state_1,DAT; // 红外扫描标志位time_1=0,time_2=0;// 定时器 1 中断全局变量 控制转弯延时计数也做延时一次 time,timeH,timeL,state=0;// 超声波测量缓冲变量 count=0;//1602 显示计数 兼红外遥控按键 state_total =2 兼循迹按键 state_total= 0 自动避障 state_total=10 为自动循迹模块 1 为自动避障模块 time_ 2 控制 PWM 脉冲计数 state 为超声波状态检测控制全 uint /**************************/ unsigned char IRC0M[7]; // 红外接收头接收数据缓存 unsigned char Number,distance[4],date_data[8]={0,0,0,0,0,0,0,0}; /********* voidvoid voidIRC0M[2 ]存放的为数据 // 红外接收缓存变量 **/ IRdelay(char x); //x* 红外头专用 delay run(); back();void stop(); void left_90(); void left_180(); void right_90(); void delay(uint dat); //void init_test();void delay_100ms(uint ms) ;void display(uchar temp); void bizhang_test(); void xunji_test(); void hongwai_test();void Delay10ms(void);void init_test()// 定时器 0{ 1 外部中断 // 超声波显示 驱动 0 1 延时初始化 TMOD=0x11; TH1=0Xfe; TL1=0x0c; TF0=0; TF1=0; ET0=1; ET1=1; EA=1;// 设置定时器 0 1 // 装入初值定时一次为工作方式 1 16 位初值定时器2000hz// 定时器 // 定时器 // 允许定时器// 允许定时器 0 方式 1 计数溢出标志 1 方式 1 计数溢出标志 0 中断溢出 1 中断溢出//开总中断 if(state_total==1)// 为超声波模块时初始化 {TRIG=0; ECHO=0; EX0=0; IT0=1;}if(state_total==2)// 发射引脚低电平 // 接收引脚低电平 // 关闭外部中断// 由高电平变低电平,触发外部中断 0// 红外遥控初始化{ IT1=1; EX1=1;TRIG=1;}del ay(60);} void main(){ uint i; delay(50); init_test(); TR1=1; LCD1602_Init() ; delay(50); while(state_2==0)// 外部中断 1 为负跳变触发 // 允许外部中断 1 // 为高电平 I/O 口初始化// 等待硬件操作// 开启定时器 1{if(KEY1==0){Delay10ms(); // 消除抖动 if(KEY1==0) {state_total=0; // 总状态定义 0 为自动循迹模块 1 为自动避障模块2 为红外遥控while((i<30)&&(KEY1==0))// 检测按键是否松开{Delay10ms(); i++;}i=0;}}if(TRIG==0){while((i<30)&&(TRIG==0))// 检测按键是否松开{Delay10ms(); i++;}i=0;}if(KEY2==0){while((i<30)&&(KEY2==0))// 检测按键是否松开{Delay10ms(); i++; }i=0;// 检测按键 s1 是否按下//检测按键s2是否按下障模块Delay10ms(); // 消除抖动 if(TRIG==0) {state_total=1; 2 为红外遥控//总状态定义 0 为自动循迹模块 1 为自动避// 检测按键 s3 是否按下障模块Delay10ms(); // 消除抖动 if(KEY2==0) {state_total=2; 2 为红外遥控// 总状态定义 0 为自动循迹模块1 为自动避}}} init_test();delay(50); // 等待硬件操作50us TR1=0; // 关闭定时器 1 if(state_total==1) {//SPEED=90; bizhang_test();} if(state_total==0) {// SPEED=98; 电平// 自动循迹速度控制// 自动循迹速度控制高电平持续次数占空比为10 的低电平高电平持续次数占空比为40 的低xunji_test(); }if(state_total== 2){//SPEED=98; // 自动循迹速度控制高电平持续次数占空比为40 的低电平hongwai_test(); }void 断号init0_suspend(void)2 外部中断0 4 串口中断外部中断 1timeH=TH0;timeL=TL0;state=1;EX0=0;}void 断号0{if(state_total==1) { TH0=0X00;TL0=0x00;}if(state_total==0) { TH0=0Xec;TL0=0x78;time_1++;interrupt 0 //3 为定时器 1 的中断号 1 定时器0 的中// 记录高电平次数//// 标志状态为// 关闭外部中断1,表示已接收到返回信号//3 为定时器 1 的中断号2 外部中断0 4 串口中断time0_suspend0(void) interrupt 1外部中断 1// 自动避障初值装入// 装入初值// 自动循迹初值装入// 装入初值定时一次200hz// 控制转弯延时计数1 定时器0 的中}}void IR_IN(void){unsigned char j,k,N=0;EX1 = 0; IRdelay(5); if (TRIG==1) { EX1 =1; return;}//确认IR 信号出现//等IR 变为高电平,跳过 9ms 的前导低电平信号。
小车摄像头寻线程序C语言编写
Get_Edge(uc_FrameBuffer_Even[0]); //求边缘
if(XuXian_Flag==1)
{
//XuXian_Find(uc_FrameBuffer_Even[0]);
// {
// Speed_Max=150;
// Speed_Min=140;
// straight_Speed=140;
// }
// else if(gpio_get(PORTA,14)==0 && gpio_get(PORTA,16)==0 )
// {
// Speed_Max=150;
// Speed_Min=110;
// straight_Speed=150;
// }
for(;;)
{
//cross_Recognition=0;
#if Control_one
if(DMA_Finish_Flag==0) //DMA传输完成
{
//gpio_ctrl(PORTA,16,1);
//Servo_PWM=5350;
SCI_Finish_Flag=1;
unsigned char LL_BlackEndL=0;
unsigned char LL_BlackEndM=0;
unsigned char LL_BlackEndR=0;
unsigned char *Source_image;
unsigned int Time;
unsigned char Cross_Time;
Denoising(uc_FrameBuffer_Even[0]); //去噪