- 我正在做一个避障小车,但是遇到了一些问题,希望你们能够帮助一下,我刚刚开始学,很多东西可能不懂。我现在遇到的问题是:我用超声波HC-SR04和LCD1602显示屏作为测距,舵机MG995作为转向器。把它们独自实验时可以实现,但把他们组合一起就出现了问题,舵机会把显示屏屏蔽掉,不能看到测出的距离。我想做的小车是遇到障碍物通过超声波来达到避障的效果,舵机我用的是定时器1,超声波用的是定时器0。照片能够看到数字的是没有把舵机接上,看不到数据的那张照片是接上舵机了的。
#include<reg52.h>#include<intrins.h>//#include uint unsigned int//#include uchar unsigned char#define Stop 0 //停止#define Left 1 //左转#define Right 2 //右转 sbit L1=P2^0; //左电机反转sbit L2=P2^1; //左电机正转sbit R3=P2^2; //右电机正转sbit R4=P2^3; //右电机反转 sbit ControlPort = P1^5; //舵机信号端//sbit KeyLeft = P1^0; //左转按键端口//sbit KeyRight = P1^1; //右转按键端口//sbit KeyStop = P1^2; //归为按键端口 sbit rs=P2^6; //1602的数据/指令选择控制线 sbit rw=P2^5; //1602的读写控制线 sbit en=P2^7; //1602的使能控制线 sbit trig=P2^4; //超声波测距模块Trigsbit echo=P3^2; //超声波测距模块Echobit flag1; //触发信号标志位// unsigned char count; //中断累加变量long int distance; //测量所得距离 unsigned char timeOutCounter =0,LeftOrRight=0;//TimeOutCiunter:定时器溢出计数//LeftOrRight :舵机左右旋转标志 unsigned char code table[]={"0123456789"}; //定义字符数组显示数字 void delay(unsigned int n) //延时函数 { unsigned int x,y; for(x=n;x>0;x--) for(y=110;y>0;y--); } void delayt(unsigned int x) //延时函数{ unsigned char j; while(x-- > 0) { for(j = 0;j < 125;j++) { ; } }} void Init(){ TMOD =0x11; //定时/计数器1为工作方式1,定时/计数器0为工作方式1 TL0=0X66; //1ms TH0=0xfc; TH1=0xff; //赋初始值0.1ms TH1=0xa4; EA=1; //打开总中断 ET0=1; //打开定时器0中断 ET1=1; //打开定时器1中断 TR1=1; //启动定时器0} /*------------------------------------------------ 1602写命令函数 ------------------------------------------------*/void lcd_wcom(unsigned char com) { rs=0; //选择指令寄存器 rw=0; //选择写 P0=com; //把命令字送入P0 delay(5); //延时一小会儿,让1602准备接收数据 en=1; //使能线电平变化,命令送入1602的8位数据口,这点非常重要 en=0; } /*------------------------------------------------ 1602写数据函数 ------------------------------------------------*/void lcd_wdat(unsigned char dat) { rs=1; //选择数据寄存器 rw=0; //选择写 P0=dat; //把要显示的数据送入P0 delay(5); //延时一小会儿,让1602准备接收数据,也就是检测忙信号,这点非常重要。 en=1; //使能线电平变化,数据送入1602的8位数据口
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>