寻迹避障程序 #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit RM1=P0^0; sbit RM2=P0^1;//右电机 sbit LM1=P0^2; sbit LM2=P0^3;//左电机 sbit bzh=P2^6; sbit RAD=P0^6;//红外接收右电机转 sbit LBD=P0^7;//红外接收左电机转 sbit rs=P3^5;// LCD的RS sbit rw=P3^6;// LCD的R/W sbit en=P3^7;// LCD的E void lcd_string(uchar *strpoint); void delay(uint a) { uint b,c; for(b=a;b>0;b--) for(c=120;c>0;c--); } uchar i=0; void checkbusy()//检查LCD忙 { uchar dat; rs=0; //rs=1为数据,=0为命令. rw=1; //rw=1为读,=0为写. do { P1=0x00; en=1; //E信号下降沿锁存DB7~DBO dat=P1; //读入P1的值 en=0; //锁存 dat=0x80 & dat; //BUSY:1内部在工作,0正常状态 }while(!(dat==0x00));rw=0; } void sentcom(uchar com) { checkbusy(); //检查Busy rs=0; en=0; P1=com; delay(5); en=1; delay(5); en=0; } void sentdata(uchar date) //写数据 { checkbusy(); rs=1; en=0; P1=date; delay(5); en=1; delay(5); en=0; } //初始化 LCM void lcd_init() { sentcom(0x38);//功能设置,一次送8位数据,基本指令集 sentcom(0x0C);//0000,1100 整体显示,游标off,游标位置off sentcom(0x01);//0000,0001 清DDRAM sentcom(0x02);//0000,0010 DDRAM地址归位 sentcom(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC } void lcd_string(char*strpoint)//在当前显示位置显示LCD字符串 { register i=0; while(strpoint[ i]!=0){ sentdata(strpoint[ i]); i++; } } void stop() { lcd_init(); sentcom(0x80); lcd_string("现代创新实训室 ");//C编译系统本省也具有转换功能,所以也可以这样写 sentcom(0x90); lcd_string("寻迹避障一体小车"); sentcom(0x88); lcd_string("--指导:"); sentcom(0x98); lcd_string("--设计: "); } void tracing() { sentcom(0x80); lcd_string("现代创新实训室 "); sentcom(0x90); lcd_string("--指导:"); sentcom(0x88); lcd_string("--设计: "); sentcom(0x98); lcd_string(" 小车寻迹中---"); } void bypass() { sentcom(0x80); lcd_string("现代创新实训室 "); sentcom(0x90); lcd_string("--指导:"); sentcom(0x88); lcd_string("--设计: "); sentcom(0x98); lcd_string(" 小车避障中---"); } void find() {tracing(); while(bzh==1) { if(LBD&&RAD==1) { RM1=1;LM1=1; RM2=0;LM2=0; } if(RAD==0) { RM1=0;LM1=1; RM2=0;LM2=0; if(LBD==0) { RM1=1;LM1=1; RM2=0;LM2=0; delay(i); } } if(LBD==0) { RM1=1;LM1=0; RM2=0;LM2=0; if(RAD==0) { RM1=1;LM1=1; RM2=0;LM2=0; delay(i); } } } } void bizhan() { bypass(); if(bzh==0) { RM1=1;LM1=0; RM2=0;LM2=1; delay(100); } } void main() { stop(); delay(2000); while(1) { find(); bizhan(); } } 来自基于51单片机制作的避障寻迹小车 |
你搜一下,论坛有一堆可参考 基于51单片机制作的避障寻迹小车 http://www.51hei.com/bbs/dpj-210555-1.html 寻迹避障小车电路、程序、电路分析、设计下载 http://www.51hei.com/bbs/dpj-78319-1.html |