1、/* 简单寻迹程序:接法 EN1 EN2 PWM输入端,本程序不输入PWM,直接使插上跳线帽,使能输出,这样就能全速运行 接上测速模块 测速模块电源+5V GND 取自于单片机板靠近液晶调节对比度的电源输出接口 把测速模块输出OUT1 OUT2 接入单片机P3。2 P3。3 P1_0 P1_1 接IN1 IN2 当 P1_0=1,P1_1=0; 时左上电机正转左上电机接驱动板子输出端(蓝色端子OUT1 OUT2) P1_0 P1_1 接IN1 IN2 当 P1_0=0,P1_1=1; 时左上电机反转 P1_0 P1_1 接IN1 IN2 当 P1_0=0,P1_1=0; 时左上电机停转 P1_
2、2 P1_3 接IN3 IN4 当 P1_2=1,P1_3=0; 时左下电机正转左下电机接驱动板子输出端(蓝色端子OUT3 OUT4) 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_4 P1_5 接IN5 IN6 当 P1_4=0,P1_5=1; 时右上电机反转 P1_4 P1_5 接IN5 IN6 当 P1_4=0,P
3、1_5=0; 时右上电机停转 P1_6 P1_7 接IN7 IN8 当 P1_6=1,P1_7=0; 时右下电机正转右下电机接驱动板子输出端(蓝色端子OUT7 OUT8) P1_6 P1_7 接IN7 IN8 当 P1_6=0,P1_7=1; 时右下电机反转 P1_6 P1_7 接IN7 IN8 当 P1_6=0,P1_7=0; 时右下电机停转 P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1 P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3 P3_5接四路寻迹模块接口第四路输出信号即中控板
4、上面标记为OUT4 四路寻迹传感器有信号(白线)为0 没有信号(黑线)为1 四路寻迹传感器电源+5V GND 取自于单片机板靠近液晶调节对比度的电源输出接口 关于单片机电源:本店驱动模块内带LDO稳压芯片,当电池输入6V时时候可以输出稳定的5V 分别在针脚标+5 与GND 。这个输出电源可以作为单片机系统的供电电源。*/#include #define Left_1_led P3_4 /P3_2接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1#define Left_2_led P3_5 /P3_3接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 #define Right
5、_1_led P3_6 /P3_4接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3#define Right_2_led P3_7 /P3_5接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4#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; /左边两个电机停转 #define Rig
6、ht_moto_go P1_4=1,P1_5=0,P1_6=1,P1_7=0;/右边两个电机向前走#define Right_moto_back P1_4=0,P1_5=1,P1_6=0,P1_7=1;/右边两个电机向前走#define Right_moto_Stop P1_4=0,P1_5=0,P1_6=0,P1_7=0;/右边两个电机停转 sbit led1 =P20; sbit led2 =P21; sbit led3 =P22; sbit led4 =P23; unsigned code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x8
7、0,0x90; /数码管断码unsigned code dis =0xfe,0xfd,0xfb,0xf7; /扫描数码管客值 unsigned char disbuff5=0;unsigned char time=0; /显示缓存 unsigned char i =0; /定义扫描数码管字数unsigned int count1=0; /计左电机码盘脉冲值unsigned int V=0; /定义其速度 /*/延时函数 void delay(unsigned int k) unsigned int x,y; for(x=0;xk;x+) for(y=0;y=4)i=0; P0=tabledis
8、buffi; P2=disi; /*/*TIMER0中断服务子函数产生2MS定时扫描数码管与产生0。5S*/ void timer0()interrupt 1 using 2 TH0=(65536-2000)/256;/2MS定时 TL0=(65536-2000)%256; time+; Display_SMG(); if(time=250)/250次即是,0。5S time=0; V=count1*2; /计数公式:轮子直径*3.14/20格码盘=6.5Cm*3.14/20约=1cm 即一个脉冲走1CM距离(count1*1)/0.5S= (count1*2)CM/S count1=0; /
9、清计数 disbuff0=V/1000; /更新显示 disbuff1=V%1000/100; disbuff2=V%1000%100/10; disbuff3=V %1000%100%10; /*/ /外部0中断用于计算左轮的脉冲 void intersvr1(void) interrupt 0 using 1 count1+;/*/前速前进 void run(void) Left_moto_go ; /左电机往前走 Right_moto_go ; /右电机往前走/前速后退 void backrun(void) Left_moto_back ; /左电机往前走 Right_moto_back
10、 ; /右电机往前走/左转 void leftrun(void) Left_moto_back ; /左电机往前走 Right_moto_go ; /右电机往前走/右转 void rightrun(void) Left_moto_go ; /左电机往前走 Right_moto_back ; /右电机往前走/停转 void stoprun(void) Left_moto_Stop ; /左电机往前走 Right_moto_Stop ; /右电机往前走/*/ /*-主函数-*/void main(void) TMOD=0X01; TH0=(65536-2000)/256;/2MS定时 TL0=(65536-2000)%256;TR0= 1;ET0= 1;EX0=1; /开启外部中断0 IT0=1; /下降沿有效IE0=0;EA = 1; run();while(1) /有信号为0 没有信号为1 if(Left_2_led=0&Right_1_led=0) run(); else if(Right_1_led=1&Left_2_led=0)/右边检测到黑线 Left_moto_go; /左边
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1