电火花迷宫小车.docx

迷宫小车 1

收藏

压缩包内文档预览:(预览前20页/共30页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:40570038    类型:共享资源    大小:811.15KB    格式:ZIP    上传时间:2020-01-14 上传人:遗**** IP属地:湖北
30
积分
关 键 词:
迷宫小车 迷宫 小车
资源描述:
迷宫小车 1,迷宫小车,迷宫,小车
内容简介:
第十一届智控大赛迷宫小车 设计报告 报名组别 高级组 学 院 电力学院 队伍名称 电火花 队 长 黎李广 队 员 郭远欣、张晓林 提交日期 2016年6月12 基于52单片机的迷宫小车3【摘要】3一、设计要求31.1基本要求31.2拓展要求4二、方案设计与论证42.1方案设计、选择与论证42.2系统的总的设计方案7三、硬件模块及其电路图83.1单片机机最小系统83.2电源模块83.3电机驱动模块93.4红外避障传感器103.5光电测速传感器103.6 LCD12864液晶显示器11四、分析计算114.1 车轮半径124.2 速度、路程的计算124.3 两个车轮的距离124.4 转弯半径12五、算法设计与程序125.1走迷宫算法125.2显示部分13六、系统调试156.1系统测试的目的:156.2系统测试的方法15七、总结16八、附录178.1走迷宫程序178.2显示程序24基于52单片机的迷宫小车【摘要】本文采用两片STC89C52单片机作为迷宫小车的检测和控制核心。小车完成的主要功能是识别并避开障碍物,显示小车的实时速度、路程、方向及重构迷宫。小车系统以STC89C52单片机为系统控制处理器;利用红外避障传感器获取赛道的信息,以及利用L298N驱动模块和PWM技术来对小车的方向和速度进行控制。通过光电测速传感器测出小车的速度并计算出行驶路程,用LCD12864显示器显示小车的实时速度、路程及方向。关键词:单片机、迷宫、避障、显示等一、设计要求简要说明:要求设计一台能够躲避障碍,测量移动距离以及转向的智能小车,实现未知迷宫的探索以及地图重构。1.1基本要求(1)、搭建一台可以躲避墙壁(比赛现场迷宫的墙壁材料以及地面材料均为KT塑料板,颜色纯白),测量移动距离以及转向的智能小车,要求行进过程不能够触碰到墙壁;(2)、在一个1m*1m2m*2m的未知迷宫中(路宽0.25m,墙壁高10cm,仅有唯一一条入口到出口的最优路径,道路弯道转角度数任意,但分叉路口仅存在直行与90转向两种情况),利用传感器实现小车从入口到出口的运动。出入口位置地面上存在全黑色标志(25cm*25cm大小,位于迷宫所在区域外),要求能够在出口处停车;(3)、利用显示模块实现车体的实时数据显示(速度,方向,移动距离等);(4)、利用显示模块实现迷宫地图的重构绘制。1.2拓展要求(1)、使用上位机取代显示模块进行数据显示;(2)、通过上位机完整重构迷宫地图(要求两边的墙壁也需重构),并显示入口到出口的最优移动路径;(3)、拥有路径记忆功能,在移动到出口位置后,可以实现从出口沿着最优路径回到入口的功能;(4)、对存在两条入口到出口路径的迷宫,能够在两次运行后,沿最短移动路径离开;(5)、其他拓展功能。二、方案设计与论证2.1方案设计、选择与论证2.1.1车体的选择方案一:采用长方形四轮小车,前轮由舵机控制转弯,后轮由动力电机控制前进与后退。由于采用四轮车,小车在转弯时会产生转弯半径,会偏离轨迹,有可能碰到障碍物,而转弯半径无法缩小到满意的程度。方案二:采用长方形三轮小车,前面两轮由两个电机分别控制,用其速度差来实现转弯与调整,后前轮为万向轮,用来维持小车的平衡,由于三轮小车用两个电机来控制两个轮子,很容易来实现转弯与调整。鉴于方案二的以上优点,综合比较,采用方案二比较合适,故采用方案二。2.1.2控制芯片的选择。 A、芯片类型选择方案一:采用51系列单片机做为控制芯片。51系列单片机应用广泛,技术成熟,但运算速度较慢,内部资源较少,但C52的两个定时计数器、两个计数器和八个中断源足以满足题目要求。方案二:采用AVR系列单片机作为控制芯片。该系列单片机是51系列单片机的升级版,采用精简指令集,运行速度快。综上,我们选用方案一,采用了STC89C52单片机,该单片机价格便宜,资源足够。B、芯片数量选择 方案一:采用一片STC89C52单片机,节省材料,接线简单,但是不利于控制,编写的电机控制程序与显示程序有可能冲突(因为不是同一个人写);方案二:采用两片STC89C52单片机,接线和安装比使用一片简单,但是使用两片资源非常充足,不要考虑电机控制程序与显示程序是否有冲突,使用方便。鉴于方案二的以上优点,综合比较,采用方案二比较合适,故采用方案二。2.1.3电机的选择方案一:选用进步电机+ULN2003驱动板。采用进步电机可以通过单片机输出脉冲频率、脉冲个数精准控制小车的速度、进步角。但是进步电机速度比较慢,而且在与机械配合的小车上改装难度大、耗时。方案二:直流电机+L298N电机驱动模块。采用直流电机控制简单,可以利用单片机输出PWM调速。利用L298N控制的双直流电机可以轻松实现差速转向。综上,方案二与车体兼容性好,控制简单,性能也好,故采用方案二。2.1.3电池的选择方案一:利用6节干电池组成9V电池组。干电池成本低,但电池容量小,电压较低需要用多节,增加小车重量且不能充电。方案二:采用9V可充电锂电池。一块电池就能获得9V电压,可反复充电,轻便,环保,但最大容量只有1000mAh,在调试过程中需要频繁充电,成本高。方案三:采用节16850可充电锂电池组成7.4V电池组。成本较高,但电池容量大,可达3000mAh,续航时间长,可反复充电,轻便,环保。鉴于方案三的以上优点,综合比较,采用方案三比较合适,故采用方案三。2.1.4稳压芯片的选择方案一:采用L7805输出5V稳定电压。L7805能稳定输出5V电压,不受输入电压的变化影响,工作电路简单易用焊接 ,且最大输出电流达到1.5A完全满足小车的要求。方案二:采用LM317输出5V稳定电压。LM317需要通过电阻和电容的配合才能输出5V电压,输入电压改变会影响到输出。鉴于方案一的以上优点,综合比较,采用方案一比较合适,故采用方案一。2.1.5避障传感器的选择方案一:采用红外避障传感器避障。该模块会受光照的影响产生误差,检测障碍距离有限,但完全可以满足走迷宫的需求而且安装方便使用简单。方案二:采用超声波传感器避障。采用单片机产生40KHZ的信号,通过超声波发射头发射,接收头接收后滤波分析返回接收都信号给单片机,通过发射与接受时间计算距离达到避障。但超声波回波不稳定,易受到干扰,还占用一个定时计数器。我们只需要检测障碍,并不需要距离,为了节省定时计数器采用方案一。2.1.6传感器摆放位置 经过多次调试,我们发现如图1摆放传感器是最容易实现转弯和检测功能的。其中1、2主要用于朝前走,3、4主要用于转弯,5、6主要用于前进中的微调,7是朝下的,用于检测终点。图1 红外传感器的摆放位置2.2系统的总的设计方案 小车系统组成如图2所示,车体采用三轮小车,控制芯片采用两片STC89C52单片机(其中一块主要用来控制小车走迷宫,另一块用于显示),驱动模块采用L298N驱动小车自带的直流电机,避障传感器采用红外避障模块,电源模块采用两节18650可充电锂电池组配合L7850稳压模块,显示器采用LCD12864。图2 小车系统基本组成三、硬件模块及其电路图3.1单片机机最小系统图3 单片机最小系统功能:最小系统主要包括:单片机、复位电路、晶振电路。作为系统的主控模块,处理信号并发出指令指导各模块的协调运行。3.2电源模块图4 电源模块功能:我们采用两节18650可充电锂电池供电,在芯片L7805输入口输入7.4V的电压,经过芯片L7805后输出5V左右的电压给单片机和传感器供电,L298N驱动模块的驱动电压直接接在7.4V的电源上。3.3电机驱动模块图5 电机驱动模块功能:采用L298N作电机驱动,为电机提供大的电压和大的电流,驱动电机的正反转和转速。通过控制IN1,IN2,IN3,IN4控制电机的正反转,通过STC89C52的PWM输出来控制驱动模块上的ENA和ENB使能,从而控制电机的旋转速度。八个二极管组成续流保护二极管保护串,在控制电机换向、停止时,电机还在转动产生电流,通过这些二极管续流起到保护作用,同时也能起到回馈制动的效果。表一、L298N部分输入输出关系ENAIN1IN2电机运动情况HHL正转HLH反转HHH快速制动HLL停止LXX停止3.4红外避障传感器图6 红外避障传感器原理图及实物图功能:通过红外避障传感器来识别各种路况。红外避障传感器由红外发射管和红外接收管组成,红外发射管能够发射出人的肉眼看不见的红外线,在巡线的过程中,红外线照在白色的KT板上就会反射,如果照射在黑线上,红外线将会被吸收而没有反射。接收管接收到红外信号的会导通,等效电阻变得很小,输出低电平,经过LM393电压比较器的比较之后变成高电平,给单片机提供一个高电平。相反,当接收管接收不到红外信号的时候就不导通,等效电阻无穷大,此时输出高电平,经过电压比较器LM393的电压比较之后给单片机提供一个低电平。单片机通过识别相应的红外避障传感器给出的信号来判断路况并根据不同的路况做出不同的指令,控制小车顺利跑完全程。3.5光电测速传感器图7 光电测速传感器原理图及实物图功能:传感器采用标准的U字型结构,其发射器和接收器分别位于U型槽的两边,并形成一光轴,当被检测物体经过U型槽且阻断光轴时,光电开关就产生了开关量信号,将此信号输出到单片机定时计数器端口,在固定的测量时间内,计取转速传感器发生的脉冲个数,从而算出实际转速。3.6 LCD12864液晶显示器图8 LCD12864显示器系统采用12864液晶显示,它不仅节省了单片机的资源,相比较数码管液晶显示更加直观、节能,同时可以直接显示中文汉字、字符等,具有灵活易操作的特性。而且,题目要求在显示器上重构迷宫路线,使用12864液晶显示是比较容易控制的。四、分析计算4.1 车轮半径车轮的直径是6.5cm,用周长公式得到这个小车车轮的周长是20.42cm。这样我们就能够实际通过理论计算出小车跑过的实际路线长度,同时也知道了小车的转弯半径应该怎么处理。C=*d = * 6.5 = 20.42 cm4.2 速度、路程的计算车轮转过一圈的格数是20格,经过简单的计算,我们知道转过一格的距离是:20.42 / 20 = 1.021cm,车轮每转过一个栅格,单片机就会接到来自测速传感器的脉冲,即脉冲数等于栅格数。所以有速度、路程的计算公式如下:速度=单位时间脉冲数*转过一格的距离路程=累计脉冲数*转过一格的距离4.3 两个车轮的距离实际测量值约为11cm。这个数据受车模实际大小影响,无法改变的,通过其他硬件适应这个大小。4.4 转弯半径转弯的时候实际半径是12cm,这个是使用了正反转的时候实现的,这时候一个轮子不动,另外一个轮子进行正转产生的一个半径五、算法设计与程序5.1走迷宫算法我们使用的是靠右算法,即优先右转。小车在行走过程中一直沿着右边墙壁走,当右边没有墙壁时往右转,然后继续靠右边墙壁运行,遇到只能左转的路口则会左转,遇到死胡同则掉头。该算法简单,易于编程,而且一定能走出迷宫。有个缺点就是所走路径不一定是最短。程序流程图如下:图9 程序流程图5.2显示部分我们使用LCD12864当显示器,主要显示小车的实时方向、速度、路程,并且在小车走完迷宫后显示迷宫路线。在显示方向时,我们做了如下规定:小车在路口时车头所对应方向为上,其它几个方向对应下、左、右。测速模块使用光电测速传感器,配合测速码盘,车轮每转一格都会给单片机输出一个脉冲,经过定时计数器计数,具体程序如下:#include#define uint unsigned int#define uchar unsigned charuint kong=20; /码盘有20个孔uint D=6.7;uint i,m,n,z;uchar bai,shi,ge;long int s,s1,s2,M1,M2,f,TotalM1=0,TotalM2=0;/*定时器T1初始函数*/void T1_Init()TMOD = 0x10; /定时器T1工作方式1ET1=1;EA=1; TR1=1;IP=0x04; TH1 = 0x3C;TL1 = 0xB0;/*外部中断INT1和INT1初始化函数*/void INT_Init()IT0 = 1;IT1 = 1; EX0 = 1; EX1 = 1;EA = 1;/*外部中断INNT0服务函数*/void my_INT0(void) interrupt 0M1=M1+; /来一个脉冲,记一次TotalM1=TotalM1+;/*外部中断INNT1服务函数*/void my_INT1(void) interrupt 2M2=M2+; /来一个脉冲记一次TotalM2=TotalM2+;/*定时器T1服务函数*/void timer1() interrupt 3 TH1 = 0x3C; TL1 = 0XB0; n=n+1; if(n=20) f=(M1+M2)/2; s1=M1/kong*3.14*D; s2=M2/kong*3.14*D; s=(s1+s2)/2; /?bai=s/100; /行驶路程百位数shi=s%100/10; /行驶路程十位数ge=s%100%10; /行驶路程个位数n=0; /归零s1=0; s2=0; M1=0; M2=0; 六、系统调试6.1系统测试的目的:1、测试模块功能的准确性和稳定性,保证系统软件与硬件的契合度。2、测试系统性能的优劣程度及是否达到设计要求,发现问题并找到可行的解决方法。3、进行系统性能升级优化。6.2系统测试的方法:1、系统各模块测试阶段:此阶段主要着眼于局部,验证各模块功能是否符合设计要求,检查各电路是否正确连接,是否正常工作。通过观察现象,找出问题,进行模块就纠错或优化。2、系统整体性能测试阶段。此阶段主要考察系统总体是否符合设计要求,每个功能是否能完整实现,检查系统之间的协调性和可靠性。通过观察小车运行状况,找出不足或错误的地方,进行修改和优化。3、硬件上主要是使用数字万用表和示波器来测量各参数的正确性,减少断线、虚焊和短路的各种问题。使用示波器来测量接收信号的强弱,通过这些调试来使得整个硬件能够正确运行。4、红外避障传感器的调试:由于这次我们使用红外避障传感器的性能也是不太好的,受光线影响大。我们要不断地调试好这个红外避障传感器的灵敏度,我们是通过改变发射管的电阻来改变发射功率的,从而调节灵敏度的。6.3测试仪器1、数字万用表:主要作用:A、用来判断电压的大小,从而判断该电路所连元件的工作电压是否正常;B、用来判断电池电压的大小,并且通过这个来判断电池是否已经过放或者过充;C、用来判断所焊电路是否已经出现虚焊,并且检查是短路还是断路,防止因为电路问题等硬件问题导致小车系统跑不了,引起胡乱修改程序的无用功。2、三角尺:主要作用:A、测量路宽是否符合25mm这个标准,防止因为路宽变宽而导致的不必要的问题出现;我们是自行用纸箱摆出迷宫赛道的,很容易出现路宽变宽或者变窄的情况,如果道路出现了5mm的误差时候就会导致小车误判了。3、秒表;主要作用:A、使用来计算小车跑全图了最小路径的时候的时间长度,通过不断优化算法和改变算法的效率来改变小车跑全图的时间,使得我们每一次都有一定的提高。4、Keil软件调试;主要作用:A、编译程序B、观察寄存器、变量、函数的数据是否正常,防止传参错误等低级错误的出现。七、总结通过一个月的努力,小组成员分工合作,分别从硬件设计、小车驱动算法、显示算法三方面入手,对小车进行合理的设计,最终完成作品。通过本次比赛,我们不仅学习了书本上学习不到的知识,同时,掌握了自主探索,自主学习的方法与技巧,为我们以后研究学习奠定了基础。我们首先要面对的是小车模型的搭建,不过由于电机参数差异的影响,我们无法使在相同的PWM的控制下两个轮子的车速做到一致,左轮偏快。为了使小车能走直线,我们只能控制两个电机的PWM不一样和加入微调程序来实现。由于硬件平台上的错误是无法通过编译器来检测的,我们只能一个一个问题地去排除。在这个过程中,我们大大增强了对硬件进行调试的能力,增大了对学习技术和排除错误的能力。在焊接最小系统的晶振电路时,由于我们当时刚好有103电容就直接使用了,但是焊接好后发现不能使用,最后通过调试和网上查阅资料发现103电容太大,不适用于晶振电路。比赛是我们学习的最好途径,我们在参加比赛时,深入学习了51系列单片机的使用,同时也加深了对keil编译器和proteus软件的理解。八、附录8.1走迷宫程序#include typedef unsigned char uint8;typedef unsigned int uint16;sbit in1=P10;sbit in2=P11;sbit in3=P12;sbit in4=P13;sbit ena=P14;sbit enb=P15;sbit front=P00;sbit front1=P05;sbit left=P01;sbit right=P02;sbit sleft=P03;sbit sright=P04;sbit down=P06;sbit shang=P20;sbit you=P21;sbit xia=P22;sbit zuo=P23;uint8 dir;uint8 threshold=0;/中断产生pwm波void pwm() interrupt 1threshold+;if (threshold=8)&(threshold=33)&(threshold=58)&(threshold=83)&(threshold=94)/=8)&(threshold=33)&(threshold=58)&(threshold=83)&(threshold0;a-);/ 延时n msvoid delay(uint16 n)uint16 i;for(i=0;in;i+)time();/前进void move()uint16 i;for(i=0;i740;i+) if(front=0)|(sleft=0)|(sright=0)|(down=1)break;in2=in4=0;in1=in3=1;delay(3);in1=in3=0;delay(1);/ 左进void moveleft() uint8 i;for(i=0;i3;i+) if(sright=1)|(down=1)|(left=1)break;in1=1;in2=0;delay(5);in3=1;in4=0;delay(4);in3=0;in4=0;delay(1);in1=0;in2=0;delay(1);/无条件左进void nomoveleft() uint8 i;for(i=0;i3;i+) if(down=1)break;in1=1;in2=0;delay(3);in3=1;in4=0;delay(1);in3=0;in4=0;delay(1);in1=0;in2=0;delay(1); / 后退左进void backleft() uint8 i;for(i=0;i3;i+) if(sright=1)|(down=1)break;in1=0;in2=1;delay(3);in3=0;in4=1;delay(1);in3=0;in4=0;delay(1);in1=0;in2=0;delay(1);/ 右进void moveright() uint8 i;for(i=0;i3;i+) if(sleft=1)|(down=1)|(right=1)break;in3=1;in4=0;delay(3);in1=1;in2=0;delay(4);in1=0;in2=0;delay(1);in3=0;in4=0;delay(1);/无条件右进 void nomoveright() uint8 i;for(i=0;i3;i+) if(down=1)break;in3=1;in4=0;delay(3);in1=1;in2=0;delay(1);in1=0;in2=0;delay(1);in3=0;in4=0;delay(1);/ 后退右进void backright() uint8 i;for(i=0;i3;i+) if(sleft=1)|(down=1)break;in3=0;in4=1;delay(5);in1=0;in2=1;delay(4);in1=0;in2=0;delay(2);in3=0;in4=0;delay(2);/修正前进void moveforward()if(sleft=0)moveright();if(sright=0)moveleft();else move();/ 左转void turnleft() uint16 i;for(i=0;i450;i+)if(front1=1)|(left=0)|(down=1)break;/if(sright=0)moveleft();in4=in2=0;in3=0;in4=in1=1;delay(4);/in3=1;delay(10);/in3=0;delay(10); in4=in1=0;delay(1);/右转void turnright()uint16 i;for(i=0;i500;i+) if(front1=1)|(right=0)|(down=1)break;/if(sleft=0)moveright();in4=0;in1=0;in2=in3=1;delay(4); /in1=1;delay(10);/in1=0;delay(10);in2=in3=0;delay(1);/ 后退void back()uint16 i;for(i=0;i0;i-) in2=in4=0;in1=in3=1;delay(3);in1=in3=0;delay(1);/微退void stepback(uint8 i)for(i;i0;i-) in1=in3=0;in2=in4=1;/delay(100);/in2=in4=0;delay(900);/停止void stop (uint8 i)in1=in3=1;in2=in4=1;delay(i);/判断方向输出void direction()dir=dir%4;switch(dir)case 0: shang=0;shang=you=xia=zuo=1;break;case 1: you=0;shang=xia=zuo=1; break;case 2: xia=0;shang=you=zuo=1; break;case 3: zuo=0;shang=you=xia=1;break;void main()uint8 j=0;uint8 k=0;uint8 l=0;uint8 m=0;TMOD=0x11;TH0=0xfe;TL0=0x0c;EA=1;ET0=1;TR0=1;ena=enb=0;while(1)if(down=1) in1=in2=in3=in4=1; if(front=0)&(left=1)&(right=0) /只有左边没障碍 dir=dir+3; direction(); /nomoveright();delay(80); /step(450);delay(80); moveforward();delay(50);turnleft();moveforward();moveforward(); if(front=0)&(left=0)&(right=1) /只有右边没障碍 dir=dir+1; direction();/nomoveleft();delay(50);/step(450);delay(80);moveforward();turnright(); delay(50); moveforward();moveforward(); ; if(front=1)&(left=0)&(right=0) /只有前面没障碍 while(front=1) direction(); moveforward();if(left=1|right=1)break;stop(5);/moveforward();delay(50);stop(10);if(front=0)&(left=0)&(right=0) /三面都有障碍dir=dir+1; direction();/nomoveleft();delay(80);/step(450);delay(80);moveforward();turnright();delay(10); if(front=0)&(left=1)&(right=1) /只有前面有障碍 dir=dir+1; direction(); /nomoveleft();delay(50); /step(450);delay(80); moveforward(); turnright();delay(50);moveforward(); moveforward(); ; if(front=1)&(left=0)&(right=0) /只有左边有障碍 dir=dir+1; direction(); /nomoveleft();delay(50); /step(450);delay(80); moveforward();delay(50); turnright(); delay(50);moveforward();moveforward(); ;if(front=1)&(left=1)&(right=0) /只有右边有障碍 direction();moveforward();delay(50);moveforward(); ;if(front=1)&(left=1)&(right=1) /三面都没有障碍dir=dir+1; direction(); /nomoveleft();delay(80); / step(450);delay(80); moveforward();turnright();delay(50);moveforward();moveforward(); ; /if(front=1) move();delay (1000);stop(1000); turnleft();delay(1000);stop(1000);delay(1000);move();delay(1000);stop(1000); delay(1000);/turnright();delay(1000);stop(1000);delay(1000);move();delay(1000);stop(1000);delay(1000); 8.2显示程序#include#include/*重定义关键词*/#ifndef uchar#define uchar unsigned char#endif#ifndef uint #define uint unsigned int#endif/*管脚定义*/#define LCD_DATAPORT P2 /数据口sbit LCD_RS = P16; /寄存器选择输入 sbit LCD_RW = P17; /液晶读/写控制 高读、低写sbit LCD_EN = P30; /液晶使能控制sbit LCD_PSB = P06; /串/并方式控制 高并、低串/* 函 数 名 : Lcd12864_Busy* 函数功能 : 检测LCD是否忙,直到其不忙* 输 入 : 无* 输 出 : 无*/void Lcd_Busy(void)LCD_RS = 0; /选择命令LCD_RW = 1;/选择读取LCD_EN = 1;while(LCD_DATAPORT & 0x80) = 0x80);LCD_EN = 0; /该语句必不可少/* 函 数 名 : delay1* 函数功能 : 检测LCD是否忙,直到其不忙* 输 入 : 无* 输 出 : 无*/void delay1(uchar i)uchar j=255;while(i-)for(;j0;j-);/* 函 数 名 : Lcd_WriteCmd* 函数功能 : 检测LCD是否忙,直到其不忙* 输 入 : 无* 输 出 : 无*/void Lcd_WriteCmd(uchar cmd)Lcd_Busy();LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_(); _nop_(); LCD_DATAPORT=cmd;delay1(1);LCD_EN=1;delay1(10);LCD_EN=0;/* 函 数 名 : Lcd_Read* 函数功能 : 检测LCD是否忙,直到其不忙* 输 入 : 无* 输 出 : 无*/uchar Lcd_ReadData()uchar readValue;Lcd_Busy();LCD_RS=1;LCD_RW=1;LCD_EN=0;_nop_(); _nop_(); LCD_EN=1;delay1(10);readValue=LCD_DATAPORT;delay1(10);LCD_EN=0;return readValue;/* 函 数 名 : Lcd_WriteData* 函数功能 : 检测LCD是否忙,直到其不忙* 输 入 : 无* 输 出 : 无*/void Lcd_WriteData(uchar cmd)Lcd_Busy();LCD_RS=1;LCD_RW=0;LCD_EN=0;_nop_(); _nop_(); LCD_DATAPORT=cmd;delay1(1);LCD_EN=1;delay1(10);LCD_EN=0;/* 函 数 名 : Lcd_Init* 函数功能 : 初始化LCD12864* 输 入 : 无* 输 出 : 无*/void Lcd_Init()LCD_PSB = 1; /选择并行输入Lcd_WriteCmd(0x34);Lcd_WriteCmd(0x30); /选择基本指令操作Lcd_WriteCmd(0x0c); /显示开,关光标Lcd_WriteCmd(0x01); /清除LCD12864的显示内容/* 函 数 名 : Lcd_Pos* 函数功能 : 汉子显示位置* 输 入 : 无* 输 出 : 无*/void Lcd_Pos(uchar X,uc
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:迷宫小车 1
链接地址:https://www.renrendoc.com/p-40570038.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!