单片机小车调速程序
51单片机智能小车按键调速前进程序源代码、电路原理图和电路器件表

51单片机智能小车按键调速前进程序源代码、电路原理图、电路器件表智能小车PWM调速是通过设置pwmval_left_init的和pwmval_right_init这2个变量的值来实现的,需要通过修改程序代码中这2个变量的值,这2个变量的值设置好后,在程序运行的过程中是不能修改的。
而智能小车的按键调速通过按键达到修改这2个变量的值,从而达到对智能小车调速的目的。
每按下K3按键一次,变量pwmval_left_init和pwmval_right_init减1,智能小车减速。
每按下K4按键一次,变量pwmval_left_init和pwmval_right_init加1,智能小车加速。
具体实现方法见下文的程序源代码。
下文主要提供了智能小车按键调速前进完整程序原代码、电路原理图以及电路器件表。
智能小车核心板原理图STC15W4K56S4智能小车核心板器件(BOM)表实物图060306030603PIN插针PIN2x1406030603直插LQFP7x7-48 STC15W4K56S4智能小车核心板正面STC15W4K56S4智能小车核心板背面智能小车驱动板原理图51单片机(STC15W4K56S4)智能小车驱动板器件(BOM)表实物图直插直插直插直插直插直插直插直插直插直插PIN与PIN之间的间隔2.54mm插电池盒PIN与PIN间隔2.54mm,插电机3PIN插针,针与针间隔2.54mm插舵机红色插针和黑色插针3.3V红色插针、GND黑色插针PIN红色插针和黑色插针5V PIN红色插针和黑色插针VINPIN与PIN之间的间隔2.54mm 插MQ2模块针与针间隔2.54mm插GP2Y1014AU模块针与针间隔2.54mm语音播报实验时,串口4插语音播报模块针与针间隔2.54mmIO扩展用,没有必要不要焊接针与针间隔2.54mm插DHT11模块用4PIN插针,针与针间隔2.54mm用杜邦线连接超声波模块针与针间隔2.54mm插蓝牙模块(要原厂原装的)用8PIN插针,针与针间隔2.54mm杜邦线连接红外循迹避障模块用4PIN插针,针与针间隔2.54mm用杜邦线连接测速模块针与针间隔2.54mm插5V的LCD1602液晶MPU6050不要焊接。
智能小车速度控制程序

}
//右转
void rightrun(void)
{
Left_moto_go ; //左电机往前走
Right_moto_back ; //右电机往前走
}
//停转
void stoprun(void)
{
Left_moto_Stop ; //左电机往前走
Right_moto_Stop ; //右电机往前走
//外部0中断用于计算左轮的脉冲
void intersvr1(void) interrupt 0 using 1
{
count1++;
}
/************************************************************************/
//前速前进
void run(void)
#include<AT89x51.H>
#define Left_1_led P3_4//P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
#define Left_2_led P3_5//P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2
#define Right_1_led P3_6//P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
P1_4 P1_5 接IN5 IN6 当 P1_4=1,P1_5=0; 时右上电机正转右上电机接驱动板子输出端(蓝色端子OUT5 OUT6)
P1_4 P1_5 接IN5 IN6 当 P1_4=0,P1_5=1; 时右上电机反转
P1_4 P1_5 接IN5 IN6 当 P1_4=0,P1_5=0; 时右上电机停转
基于51单片机的步进电机调速系统(含完整代码)

课程设计报告设计题目:遥控小车——基于51单片机的步进电机调速系统学院:专业:班级:学号:姓名:电子邮件:时间:成绩:指导教师:华南农业大学理学院应用物理系课程设计(报告)任务书学生姓名指导教师职称学生学号专业电子信息科学与技术题目基于51单片机的步进电机调速系统(遥控小车)任务与要求1. 设计并制作电路,利用单片计控制步进电机运转。
2. 通过键盘可以不间断地设定改变电机的转速、转向。
3. 利用显示器实时显示转速等参数。
4. 扩展功能:可设定转动步数。
开始日期2014 年3 月完成日期2014 年3 月1引言步进电机是一种将电脉冲转化为角位移的执行机构。
目前,步进机已经广泛应用于领域,例如工业生产中的机械臂的控制,照明装置和监控摄像机转动等。
步进机在装置转动、精确位移方面有很重大的作用。
本系统是基于STC89C51 单片机的遥控小车。
采用STC89C51单片机作为控制核心,通过ULN2003A驱动步进机(28BYJ-48)转动,由按键和显示屏1602组成人机交互模块,同时通过315M无线发射和接收模块向单片机输入控制信号,将整个系统固定于简易小车上,最终实现小车测试和远程遥控功能。
基本达到预定的设计要求以及功能的扩展。
2系统的设计与理论分析2.1系统总体设计2.2理论分析本设计分为两种工作模式:测试模式、遥控模式。
在电路板上有一个带锁的开关进行设置。
测试模式工作时,通过控制小车上的按键进行加速、减速、反转、设置、步数增、步数减等按键,单片机扫描按键,通过软件控制液晶模块显示对应的转速、设置的速度和步数,同时控制步进机模块进行相应的转动。
步进机的是由ULN2003A达林顿管驱动,由单片机控制输入脉冲的频率来控制步进机的转速,单片机是通过程序查表对4个I/O口输出脉冲,本次设计采用的是两相四线减速步进机,步进角为5.625°,减速比为64:1,程序采用的是8拍查表,具有较好的扭矩。
遥控模式工作时,遥控部分五个按键分别输入前、后、左、右、暂停,单片机扫描按键,通过无线发射模块发射串行编码,小车的无线接收模块接收对应的编码,送至单片机进行解码,从而控制液晶模块的显示和步进机模块的工作,进而完成功能。
基于单片机的智能小车速度控制设计

基于单片机的智能小车速度控制设计一、本文概述随着科技的飞速发展,智能化、自动化已成为现代工业和生活的重要趋势。
智能小车作为这一趋势的代表之一,其研究与应用日益受到人们的关注。
智能小车在无人驾驶、物流配送、智能巡检等领域具有广泛的应用前景。
而速度控制作为智能小车运行过程中的关键环节,其设计的优劣直接影响到小车的性能与稳定性。
因此,本文旨在探讨基于单片机的智能小车速度控制设计,以期为智能小车的实际应用提供有益的参考。
本文将首先介绍智能小车速度控制的重要性及其研究背景,阐述基于单片机的速度控制设计的基本原理与优势。
接着,文章将详细分析智能小车速度控制系统的硬件组成和软件设计,包括单片机的选型、电机驱动电路的设计、速度传感器的选择以及控制算法的实现等。
在此基础上,文章还将探讨如何通过优化算法和硬件配置来提高智能小车的速度控制精度和稳定性。
文章将总结基于单片机的智能小车速度控制设计的实际应用效果,展望未来的发展趋势与挑战。
通过本文的研究,我们期望能够为智能小车的速度控制设计提供一种新的思路和方法,推动智能小车技术的进一步发展,为智能交通和智能化生活贡献一份力量。
二、智能小车速度控制的意义和现有技术智能小车的速度控制是现代智能车辆技术中的关键组成部分。
它对于提高小车的行驶安全性、提升运输效率以及实现无人驾驶等先进功能具有极其重要的意义。
精确的速度控制能够确保小车在复杂多变的环境中保持稳定,避免因速度过快或过慢导致的碰撞或延误。
通过速度控制,智能小车可以在不同路况和交通条件下实现自适应调整,提高行驶效率。
速度控制还是实现智能小车高级功能如自动巡航、自动避障等的基础,对于推动智能车辆技术的发展具有重要意义。
目前,智能小车的速度控制技术主要依赖于电子控制单元(ECU)和传感器技术。
ECU通过接收来自各种传感器的信号,如轮速传感器、加速度传感器等,实现对小车速度的精确控制。
同时,随着微处理器技术的发展,越来越多的智能小车开始采用基于单片机的控制系统,这种系统具有集成度高、成本低、可靠性强的优点。
单片机车速控制

单片机车速控制通常采用PWM技术实现。
PWM技术是指脉冲宽度调制技术,通过调节信号的占空比来控制输出的平均功率和电压。
在电调模块的控制下,将PWM信号的占空比调节到不同的值,就可以控制电机的转速或电机的加速度,从而实现小车的速度控制。
另外,PID控制器也可以用于实现速度控制。
PID控制器是一种控制系统,通过比较设定值和实际值之间的差异来调整系统的输出,以实现控制目标。
在车速控制中,PID控制器可以通过比较设定速度和实际速度之间的差异来调整小车的加速度,以实现速度控制。
在具体实现上,可以采用数码管显示实时车速,按键控制车速的快慢。
单片机作为主控,实现加速刹车过程中的能量释放与吸收的控制。
在汽车减速时,存在两种形式,即刹车和动能回收。
为了保证刹车效率和安全性,应该根据车速的不同,选择不同的刹车方式。
同时,对于回收的动能,可以将其分配给电池部分和飞轮部分,其中电池部分可以将机械能转换为电能储存起来用于供能,而飞轮留有的机械能可继续返回用于汽车行驶。
以上信息仅供参考,如需了解更多信息,建议咨询专业人士。
51单片机产生PWM控制小车速度的两种方法

51单片机产生PWM控制小车速度的两种方法首先你的先知道什么是PWM。
PWM是一种脉宽调制技术。
简单的说就是在一个周期内高电平所占用的时间,通过改变脉冲的周期可以调频,改变脉冲的宽度或占空比可以调节驱动上的电压。
将产生的PWM信号接到L298N的ENA和ENB端调节不同的占空比从而调节速度第一种方法用单片机的定时器模拟出PWM。
假如你用定时器延时100ms,在50ms之前某一个引脚为低电平,50ms之后该引脚为高电平,这样高电平占用的时间为1/2,此时该引脚就会产生50%的占空比信号。
程序如下:#include<reg52.h>unsigned chartimer1;sbit PWM=P1^1;void system_Ini(){TMOD|= 0x11;TH1 = 0xfe; //11.0592TL1 = 0x33;TR1 =1;IE=0x8A;}main(){ system_Ini() ;定时器初始化while(1){ if(timer1>100) timer1=0;if(timer1<=30) pwm=0;//产生30%的占空比else PWM=1;}}另一种方法就是利用简单的延时产生PWM方波信号#include<reg52.h>unsigned char count=0;sbit PWM_1=PI^1;//利用P1^1产生PWMvoid mian(){while(1)for(count=0;count<=100;count++) //让单片机记100个数{If(count<=50){ PWM_1=1;}//前一半时间为高电平elsePWM_1=0//后一半时间为低电平这样就产生了50%的占空比}PWM不仅能够控制小车速度还可以控制小灯的亮灭程度,朋友们可以去试试。
水平有限,如果觉得对您有用请您推荐您的朋友关注我们,还请大神们轻喷。
单片机控制变速往复运动

单片机控制变速往复运动实验一、实验目的1熟练掌握单片机键盘和显示功能应用2、学会利用单片机对运动小车进行变速控制二、实验器材1 DCP-002单片机89S51电路2、DCP-003键盘及LED数字显示电路3、DCP-0011 D/A转换电路4、DCP-009脉宽调制电路三、实验原理通过单片机产生可变的数字电压,经过D/A转换为模拟电压并可调为正负电压值,再通过脉宽调制电路对输出电压进行电压放大和功率放大,以达到驱动减速电机所需要的电压。
通过键盘改变数字电压递增或递减的数值,可改变小车的加速度,即可观看到小车的速度从最低到最高再回到最低所需要时间的不同。
LED数码管可方便、简单显示小车的实时运动方向。
如下图所示:四、实验步骤1、把DCP-003 的CS、RST 短接后接到DCP-002 的GND,DCP-003 的CLK 接到DCP-002 的ALE。
把DCP-003 的P1 接到DCP-002 的P2。
把DCP-003 的INT 接到DCP-002 的P3.2。
2、把DCP-002 的Y00-Y07 接到DCP-0011 的D0-D7 上。
3、把DCP-009Vin接到DCP-0011的VoutC上,DCP-009的VoutC和GND分别接到运动小车平台的电机输入的红黑接线柱上。
4、调节DCP-0011的RW1,使其放大倍数为2,调节RW2,使R6的左端的电压为-2.5V,即当D0-D7分别为0,128,255时,对应的VoutC输出为-5V,0V,5V。
调节DCP-009 的RW1使其放大倍数为2,调节RW2,使其输出的正负电压相等。
5、把各模块的电源接上,并注意共地。
6、把“单片机控制的变速往复运动实验.HEX ”文件下载到单片机中,并运行。
7、可按下键盘的1、2、3键分别调制小车的加速度,观察其现象。
t r J p* *厂89S5I 疑单片机押制变雄隹败动.亦 GAL.16VM^yhf.j«l//XBYTE 函数在该库中变量定义************参考程序//-----头文件引用#in clude<reg52.h>#in clude<absacc.h>//-----宏声明-----#define DAC0808XBYTE[0xA800] //DA 地址 #define D8279 XBYTE[0x9000]〃8279 数据口地址 #define C8279 XBYTE[OxBOOO] //8279 命令口地址#defi ne uchar un sig ned char#defi ne uint un sig ned intuint i,flag ,n;un sig ned char code dispbitcode1[8][8] = {0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04};un sig ned char code dispbitcode2[8][8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,VCC<J NT> VI 浙江求是科教 比 VCC Nil VI +闻GN 门 DCP-M9 V <*JI ?C :Q延时函数************void delays(unsigned char k){ unsigned char i,j;for(i=k;i>0;i--)for(j=110;j>0;j--);}显示函数************ void display1(void){ uint i,j;C8279=0x90; // 写显示命令for(j=0;j<8;j++)for(i=0;i<8;i++){D8279=dispbitcode1[j][i];delays(30);}}void display2(void){uint i,j;C8279=0x90;for(j=0;j<8;j++)for(i=0;i<8;i++){// 写显示命令D8279=dispbitcode2[j][i];delays(30);}************* 按键函数************ 0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00, 0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00, 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00};void key(void) }{uchar keycode;C8279=0x40;delays(5); keycode=D8279;delays(5);switch(keycode){case 0x08:{n=1; break;}case 0x09:{n=2;break;}case 0x10:{n=3;break;}}初始化函数*************************8279}void init8279(void){C8279=0x00 ; // 左端进入8x8 显示,二键封锁,编码扫描C8279=0x32 ;// 扫描速率,设置内部分频约为11.0592/6/100=18,CLK 接ALE C8279=0xD1 ;// 清除*************定时器0 函数**************/}void timer0() interrupt 1{uchar m;TL0=(65536-45872)%256;TH0=(65536-45872)/256;m++; if(m==4) {主函数 ************m=0;if(flag==1)display1();if(flag==0)display2();}void intr0() interrupt 0 {key();}void main(){ DAC0808=0;n=1;flag=1;EA=1;// 开总中断IT0=1;// 设置外部中断 0 的触发方式 EX0=1;// 开外部中断 0ET0=1;〃开定时器0中断 TR0=1;//启动定时器0init8279(); //初始化 8279while(1){for(i=128;i<255;i=i+n){if(i>=255)i=255;DAC0808=i;delays(5);flag=1;}for(i=255;i>128;i=i-n){if(i<=128)i=128;DAC0808=i;delays(5);} *************外部中断 0 函数**************/flag=1;}for(i=128;i>3;i=i-n){ if(i<=0) i=0;DAC0808=i; delays(5); flag=0;} for(i=0;i<128;i=i+n){ if(i>=128) i=0; DAC0808=i; delays(5);flag=0;}。
单片机控制的直流电机正反转和加速减速C程序

单片机控制的直流电机正反转和加速减速C程序简介本文档旨在向读者介绍如何使用单片机控制直流电机实现正反转和加速减速功能的C程序。
程序实现正反转控制以下是控制直流电机正反转的C程序示例:include <avr/io.h>void motor_forward(){// 设置引脚控制直流电机正转}void motor_reverse(){// 设置引脚控制直流电机反转}int main(){// 初始化单片机引脚设置和其他必要的配置while (1){// 检测是否需要正转或反转,根据需要调用motor_forward()或motor_reverse()函数}return 0;}加速减速控制以下是控制直流电机加速减速的C程序示例:include <avr/io.h>void motor_speed_up(){// 调整引脚控制直流电机的占空比以加速电机转速}void motor_slow_down(){// 调整引脚控制直流电机的占空比以减速电机转速}int main(){// 初始化单片机引脚设置和其他必要的配置while (1){// 检测是否需要加速或减速,根据需要调用motor_speed_up()或motor_slow_down()函数}return 0;}结论通过上述示例程序,我们可以实现通过单片机控制直流电机的正反转和加速减速功能。
读者可以根据实际需求进行相应的参数调整和功能扩展。
请注意,上述示例程序仅为演示目的,具体的引脚配置和控制方式需根据实际硬件和单片机型号进行调整。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;/******** 伪指令********/按键控制小车调速ORG 0000HSJMP MAIN1ORG 0013HLJMP ZDORG 0030HMAIN1: LCALL PWMMAIN: SETB E ASETB E X1SETB I T1SJMP $ZD: PUSH ACCPUSH 04HPUSH 05HPUSH 06HMOV A,P2ANL A,#0F0HCJNE A,#70H,PD1LCALL QJSJMP JSPD1: C JNE A,#0B0H,PD2LCALL HTSJMP JSPD2: C JNE A,#0D0H,PD3LCALL ZZSJMP JSPD3: C JNE A,#0E0H,JSLCALL YZJS: POP 06HPOP 05HPOP 04HPOP ACCRETIDEL05S: MOV R4,#10D3: MOV R5,#200D4: MOV R6,#124DJNZ R6,$DJNZ R5,D4DJNZ R4,D3RETPWM: MOV CMOD,#04HMOV TMOD,#02HMOV TH0,#130MOV TL0,#130SETB T R0RETTZ: MOV CCON,#00HSETB P1.4SETB P1.5SETB P1.6SETB P1.7MOV CCAPM1,#00HMOV CCAPM2,#00HMOV CCAPM3,#00HMOV CCAPM4,#00HRETQJ: LCALL TZMOV CCAPM2,#42HMOV CCAPM4,#42HMOV CCAP2H,#100MOV CCAP4H,#100MOV CCON,#40HRETZZ: LCALL TZMOV CCAPM2,#42HMOV CCAPM4,#42HMOV CCAP2H,#50MOV CCAP4H,#100MOV CCON,#40HRETYZ: LCALL TZMOV CCAPM2,#42HMOV CCAPM4,#42HMOV CCAP2H,#100MOV CCAP4H,#50MOV CCON,#40HRETHT: LCALL TZMOV CCAPM1,#42HMOV CCAPM3,#42HMOV CCAP1H,#100MOV CCAP3H,#100MOV CCON,#40HRETEND拍手控制小车调速ORG 0000HSJMP MAIN1ORG 0003HLJMP ZDORG 0030HMAIN1: LCALL PWM MAIN: SETB E ASETB E X0SETB I T0CF: MOV R7,#0L: CJNE R7,#0,PD1LCALL TZSJMP LPD1: C JNE R7,#1,PD2LCALL QJSJMP LPD2: C JNE R7,#2,PD3LCALL ZZSJMP LPD3: C JNE R7,#3,PD4LCALL YZSJMP LPD4: C JNE R7,#4,PD5LCALL HTSJMP LPD5: C JNE R7,#5,LSJMP CFZD: INC R7RETIDEL05S: MOV R4,#10D3: MOV R5,#200D4: MOV R6,#124DJNZ R6,$DJNZ R5,D4DJNZ R4,D3RETPWM: MOV CMOD,#04H MOV TMOD,#02HMOV TH0,#130MOV TL0,#130SETB T R0RETTZ: MOV CCON,#00HSETB P1.4SETB P1.5SETB P1.6SETB P1.7MOV CCAPM1,#00HMOV CCAPM2,#00HMOV CCAPM3,#00HMOV CCAPM4,#00HRETQJ: LCALL TZMOV CCAPM2,#42HMOV CCAPM4,#42HMOV CCAP2H,#100MOV CCAP4H,#100MOV CCON,#40HRETZZ: LCALL TZMOV CCAPM2,#42HMOV CCAPM4,#42HMOV CCAP2H,#50MOV CCAP4H,#100MOV CCON,#40HRETYZ: LCALL TZMOV CCAPM2,#42HMOV CCAPM4,#42HMOV CCAP2H,#100MOV CCAP4H,#50MOV CCON,#40HRETHT: LCALL TZMOV CCAPM1,#42HMOV CCAPM3,#42HMOV CCAP1H,#100MOV CCAP3H,#100MOV CCON,#40HRETEND定时器控制ORG 0000HSJMP MAINORG 0003HSJMP ZD1ORG 001BHSJMP ZD2ORG 0030HMAIN: CLR F0CLR P1.0MOV R7,#60MOV TH1,#60MOV TL1,#176MOV TMOD,#10HSETB I T0SETB E X0SETB E ASETB E T1SETB T R1SJMP $ZD2: MOV TH1,#60MOV TL1,#176JB F0,LLCALL SSZXZDJNZ R7,JSCPL F0MOV R7,#100RETIL: LCALL NSZXZDJNZ R7,JSCPL F0MOV R7,#60 JS: RETIZD1: SETB P1.4SETB P1.5SETB P1.6SETB P1.7SJMP $RETISSZXZ: SETB P1.4SETB P1.7MOV P0,#03HCLR P1.5CLR P1.6RETNSZXZ: SETB P1.5SETB P1.6MOV P0,#9FHCLR P1.4CLR P1.7RETEND秒表ORG 0000HMAIN: MOV DPTR,#TABMOV 30H,#00HMOV R0,#60NEXT: MOV 42H,30HLCALL SZZHMOV 41H,43HMOV R1,#100PCH: L CALL XSDJNZ R1,PCH ;刷100次,10ms=1SINC 30HDJNZ R0,NEXTSJMP MAINXS: MOV A,30HANL A,#0FHMOVC A,@A+DPTRSETB P1.0CLR P1.1MOV P0,ALCALL DELMOV P0,#0FFHMOV A,30HSWAP A ;十位个位想换ANL A,#0FHMOVC A,@A+DPTRSETB P1.1CLR P1.0MOV P0,ALCALL DELMOV P0,#0FFHRETSZZH: MOV A,42HMOV R2,AJZ EXITCLR ACLR CXH: I NC ADA ADJNZ R2,XHEXIT: M OV 43H,ARETTAB: DB 03H,9FH,25H,0DH,99H,49H,41H,1FHDB 01H,09H,11H,0C1H,63H,85H,61H,71HDEL: MOV R7,#1 ;5msDEL2: MOV R6,#20DEL1: MOV R5,#123DEL0: DJNZ R5,DEL0DJNZ R6,DEL1DJNZ R7,DEL2RETEND小车障碍物检测ORG 0000HMAIN: ;CLR P1.0 ;位选CLR P2.2 ;关闭左发CLR P3.7 ;关闭右发LCALL ZB ;呼叫左边检测子程序CLR P2.2 ;关闭左发LCALL YB ;呼叫左边检测子程序CLR P3.7 ;关闭右发LCALL PJ ;呼叫判决子程序SJMP MAIN ;跳转到开始ZB: MOV R0,#10 /*设定10个脉冲*/MOV R1,#0 /*给寄存器清0*/FS: SETB P2.2 /*发射红外线*/LCALL DEL600us /*延时600us*/JB P2.3,GB /*判断接收端是否是低电平*/INC R1 /*脉冲R1自加1*/GB: CLR P2.2 /*关闭发射红外*/LCALL DEL600usDJNZ R0,FS /*判断10个脉冲是否发送完毕*/CJNE R1,#6,PCHPCH: JC ZHSETB 00H ; 左前有障碍物RETZH: CLR 00H ; 左前没有障碍物RETYB: MOV R2,#10 ;右边检测子程序MOV R3,#0FS1: SETB P3.7LCALL DEL600usJB P3.3,GB1INC R3GB1: CLR P3.7LCALL DEL600usDJNZ R2,FS1CJNE R3,#6,PCH1PCH1: JC ZH1SETB 01H ;右前有障碍物RETZH1: CLR 01H ;右前没有障碍物RETPJ: CLR P1.0MOV A,20H ;判决子程序,,把20H单元的内容给AANL A,#03H ;A与03H相与CJNE A,#00H,ZQ ; A等于00H吗?不相等跳转到左边判决MOV P0,#03HSETB P1.4SETB P1.6LCALL DEL05SCLR P1.5CLR P1.7 ; 给P0端送段码,障碍物没有RETZQ: CJNE A,#01H,YQ ; A等于01H吗?不相等跳转到右边判决MOV P0,#9FHSETB P1.4SETB P1.5SETB P1.7 ; 送断码,障碍物在左前LCALL DEL05SCLR P1.6RETYQ: CJNE A,#02H,ZQ1 ; A等于02H吗?不相等跳转到正前MOV P0,#25HSETB P1.5SETB P1.6SETB P1.7 ; 送断码,障碍物在右前LCALL DEL05SCLR P1.4RETZQ1: MOV P0,#0DHSETB P1.5SETB P1.7 ; 送断码,障碍物在正前LCALL DEL05SCLR P1.6CLR P1.4RETDEL600us: MOV R4,#200 /*延时600us*/DEL4: NOPDJNZ R4,DEL4RETDEL05S: MOV R5,#10DEL2: MOV R6,200DEL1: MOV R7,123DEL0: NOPDJNZ R7,DEL0DJNZ R6,DEL1DJNZ R5,DEL2RETEND。