资源预览内容
第1页 / 共32页
第2页 / 共32页
第3页 / 共32页
第4页 / 共32页
第5页 / 共32页
第6页 / 共32页
第7页 / 共32页
第8页 / 共32页
第9页 / 共32页
第10页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
用89s52单片机的机器车1. 串口向计算机发送信息,串口和串口调试终端软件用到uart_Init();函数scanf函数与printf函数对应,在C51库的stdio.h printf(Program Running!n);printf(“Please input pulse number:n”);scanf(“%d”,&PulseNumber);printf(“Please input pulse duration:n”);scanf(“%d”,&PulseDuration);for(Counter=1;Counter=PulseNumber;Counter+) P1_1=1;delay_nus(PulseDuration);P1_1=0;delay_nms(20);for(Counter=1;Counter=PulseNumber;Counter+) P1_0=1; delay_nus(PulseDuration); P1_0=0;delay_nms(20);while(1);2. for循环来实现电机速度逐渐增加到全速然后逐步减小的例子。for(pulseCount=10;pulseCount=200;pulseCount=pulseCount+1)加速P1_1=1;delay_nus(1500+pulseCount); P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);for(pulseCount=1;pulseCount=0;pulseCount=pulseCount-1)减速P1_1=1;delay_nus(1500+pulseCount); P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);while(1);3. 子函数的书写 类型标识符 函数名(形式参数列表)声明部分/函数体内部用到的变量的类型说明语句void Forward(void)无参数无返回值void Forward(int PulseCount,int Velocity) 有参数无返回值int Forward(void)无参数有返回值 用return x;返回int Forward(int PulseCount,int Velocity) 有参数有返回值 用return x;返回void Move(int counter,int PC1_pulseWide,int PC0_pulseWide) int i; for(i=1;i=counter;i+)P1_1=1;delay_nus(PC1_pulseWide); P1_1=0;P1_0=1;delay_nus(PC0_pulseWide);P1_0=0;delay_nms(20);int main(void) uart_Init();printf(Program Running!n);Move(65,1700,1300);/前Move(26,1300,1300); /左Move(26,1700,1700); /右Move(65,1300,1700); /后while(1);4. 将复杂巡航运动记录在数组中,编写程序执行这些巡航运动类型说明符 数组名常量表达式=值,值值;/数组switch(表达式) case常量表达式1: 语句1;break; case常量表达式2: 语句2;break; case常量表达式n: 语句n;break; default: 语句n+1;break; int main(void)/走方形的运动 char Navigation10=F,L,F,F,R,B,L,B,B,Q;int address=0; uart_Init(); printf(Program Running!n);while(Navigationaddress!=Q)switch(Navigationaddress)case F:Forward();break;case L:Left_Turn();break;case R:Right_Turn();break;case B:Backward();break;address+;while(1);以上需调用子函数,但为了方便,我们如此使用数组在本例程中,将不使用子函数,而是使用三个整型数组来存储控制机器人运动的三个变量,即循环的次数和控制左右电机运动的两个参数。具体定义如下: int main(void)int Pulses_Count5=65,26,26,65,0;int Pulses_Left4=1700,1300,1700,1300;int Pulses_Right4=1300,1300,1700,1700;int address=0;int counter;uart_Init();printf(Program Running!n);while(Pulses_Countaddress!=0)for(counter=1;counter4)counter=1;Backward();/向后Left_Turn();/向左Left_Turn();/向左elsecounter=1;红外导航:红外线(IR)接收/检测器: 红外检测器还有一个电子滤波器,它只允许大约38.5 kHz 的电信号通过。换句话说,检测器只寻找每秒闪烁38,500次的红外光。以下是红外的电力制作图:,三极管相当于一个开关:当P1_3(P3_6)置高时,从集电区经基区到发射区电路导通,加载在IR LED上的电压为VCC(5V),IR LED向外发射红外线;当P1_3(P3_6)置低时,电路又断开,IR LED停止发射。int P1_2state(void)return (P1&0x04)?1:0;/红外检测高低电平:当没有红外信号返回时,探测器的输出状态为高。当它探测到被物体反射的38500Hz红外信号时,它的输出为低int main(void)int counter;int irDetectLeft;uart_Init();printf(Program Running!n);while(1)for(counter=0;counter38;counter+) /P1_3输出的信号高电平13微秒,低电平为13微秒,总周期为26微秒,即频率约为38.5kHz。总共输出38个周期的信号,即持续时间约为1毫秒P1_3=1; delay_nus(13);P1_3=0; delay_nus(13); irDetectLeft=P1_2state();printf(irDetectLeft=%dn,irDetectLeft);/串口调试检测delay_nms(100);一般的运行方式是while(1) IRLaunch(R); /右边发射 irDetectRight = RightIR;/右边接收 IRLaunch(L); /左边发射 irDetectLeft = LeftIR;/左边接收if(irDetectLeft=0)&(irDetectRight=0)/两边同时接收到红外线 Backward(); Left_Turn();。采样完了运行一次函数,这样的缺点是:触须导航里使用的
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号