欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    PWM调速+循迹--智能小车程序 .docx

    • 资源ID:13059960       资源大小:87.04KB        全文页数:47页
    • 资源格式: DOCX        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    PWM调速+循迹--智能小车程序 .docx

    精品名师归纳总结/T0 产生双路 PWM 信号,L298N 为直流电机调速, 接 L298N 时相应的管脚上最好接上10K的上拉电阻。/*晶振采纳 12M, 产生的 PWM 的频率约为 100Hz */ #include<reg51.h>#include<math.h>#define uchar unsigned char #define uint unsigned intsbit en1=P34; /* L298的 Enable A */sbit en2=P35; /* L298的 Enable B */ sbit s1=P10; /* L298的 Input 1 */ sbit s2=P11; /* L298的 Input 2 */ sbit s3=P13; /* L298的 Input 3 */ sbit s4=P12; /* L298的 Input 4 */ sbit R=P20;sbit C=P21; sbit L=P22; sbit key=P14;uchar t=0; /*中断计数器 */uchar m1=0; /*电机 1 速度值 */ uchar m2=0; /*电机 2 速度值 */uchar tmp1,tmp2; /*电机当前速度值*/*电机掌握函数index- 电机号 1,2; speed-电机速度 0-100 */ void motoruchar index, char speedifspeed<=100ifindex=1 /*电机 1 的处理 */m1=absspeed; /*取速度的肯定值*/ s1=1;s2=0;ifindex=2 /*电机 2 的处理 */m2=absspeed; /*电机 2 的速度掌握*/ s3=1;s4=0;void Backvoid可编辑资料 - - - 欢迎下载精品名师归纳总结s1=0; s2=1; s3=1; s4=0;void GOvoid s1=1; s2=0; s3=1; s4=0;void TLvoid s1=1; s2=0; s3=0; s4=1;void TRvoid s1=0; s2=1; s3=1; s4=0;void STOPvoid s1=1; s2=1; s3=1; s4=1;/*void delayuint j /*简易延时函数*/forj;j>0;j-;*/void delayuint z可编辑资料 - - - 欢迎下载精品名师归纳总结uint x,y; forx=z;x>0;x-fory=110;y>0;y-;void mainuchar i=0,j=0;TMOD=0x02; /*设定 T0 的工作模式为2 ,8 位自动重置定时器, 每过几个机器周期, 计数器加一 */TH0=0x9B; /*装入定时器的初值,计数100 次溢出 */ TL0=0x9B; /* 装入时间常数 */EA=1; /*开中断 */ET0=1; /*定时器 0 答应中断 */ TR0=1; /*启动定时器 0 */ while1ifkey=1/*电机实际掌握演示*/ ifi<=100 /正转加速motor1,i;motor2,i; delay5000; i+;else GO;else EA=0;while1 ifL|C|R=0 STOP;ifL&R GO; ifL=0可编辑资料 - - - 欢迎下载精品名师归纳总结whileC可编辑资料 - - - 欢迎下载精品名师归纳总结 ifR=0TL;可编辑资料 - - - 欢迎下载精品名师归纳总结whileCTR;void timer0 interrupt 1 /* T0中断服务程序*/ift=0 /* 1个 PWM 周期完成后才会接受新数值*/ tmp1=m1; tmp2=m2;ift<tmp1 en1=1; else en1=0; /* 产生电机 1 的 PWM 信号 */ ift<tmp2 en2=1; else en2=0; /* 产生电机 2 的 PWM 信号 */ t+;ift>=100 t=0; /* 1个 PWM 信号由 100 次中断产生 */可编辑资料 - - - 欢迎下载精品名师归纳总结#include<intrins.h> #include<AT89X52.h>/*宏定义区*/*- LCD模块*/#defineLCD_RW P2_6 / 读写掌握端#defineLCD_RS P2_7 / 数据命令挑选端#defineLCD_E P2_5 / 执行使能端#defineLCD_Data P1 /P1口#defineWrite 0x00 / 低电平写入#defineRead 0x01 / 高电平读出#defineData 0x01 / 高电平挑选数据#defineCmd 0x00 / 低电平挑选命令#defineEnable 0x00 / 跃变到低电平常执行命令#defineDisable 0x01 #defineTrue 0x01 #defineFalse 0x00#defineLCD_Init 0x38 /初始化模式/*-测速 /测距 /测时模块*/#defineCircleLength 0.132 / 小车转一轮的长度为 .132m/*-控速模块*/#defineP03 P0_3 / 后电机#defineP04 P0_4 / 后电机#defineP01 P0_1 / 前电机#defineP02 P0_2 / 前电机#defineP31 P0_5 / 掌握液晶背光#defineP33 P3_3#defineLCD_DispCtr 0x0C /开显示及光标设置#defineLCD_CloseCtr 0x08 / 关显示#defineLCD_CLS 0x01 / 清屏幕#defineLCD_EnterSet 0x06 / 显示光标#defineBusy P1_7 / 忙信号/*-菜单项挑选择模块*/#defineLine 0x00 /0代表直线模式#defineCurve 0x01 /1 代表 S 型模式#defineNormal 0x00 /0代表正常速度#defineLow 0x01 /1代表低速#defineHigh 0x02 /2代表高速/*可编辑资料 - - - 欢迎下载精品名师归纳总结*全局函数声明区*/*- LCD模块*/voidLCDInitvoid; /LCD初始化voidSetWriteCmdvoid; /设置写命令模式voidSetReadCmdvoid; / 设置读命令模式voidSetWriteDatavoid; / 设置写数据模式voidWriteCmdcharcmd; / 写命令voidWriteDatacharddata; / 写数据voidExecuteCmdvoid; / 执行命令voidSetXYcharx,chary; /定位显示的址voidDisplaySingleCharcharx,chary,charcchar; /显示单个字符voidDisplayStringcharx,chary,char*str; /显示一段字符串voidDelayunsignedinttime; / 延时主程序voidDelayUsunsignedinttime; /延时子程序/*-测速 /测距 /测时模块*/voidINTInitvoid; /全部中断初始化 voidSpeedINTvoid; / 测速中断voidComputeTimevoid; voidComputeSpeedANDDistancevoid; /运算速度和距离/*-控速模块*/voidCtrSpeedINTvoid; /控速中断voidTime0INTvoid;voidTime1INTvoid; /控速单位时间中断voidClock0_Initvoid; /时钟中断初始化voidClock1_Initvoid; /时钟中断初始化voidCtrSpeedvoid;bit IsBusyvoid; / 判定忙标志函数voidDisplayTimevoid; /显示时间voidDisplayAVGSpeedvoid; /显示平均速度voidDisplayDistancevoid; /显示路程/*全局变量区*/float SpeedCount=0; / 测速计数脉冲float Speed=0.0; float Distance=0.0;char Time1INTCount=0; /T1中断时间计时float PassTime=0.00; / 小车行走的时间short IsT0INT=1;可编辑资料 - - - 欢迎下载精品名师归纳总结bit IsT1INT; / 判定 T1 是否已经响应中断short IsT0INT2=1;char Thx5=0xf4,0xf4,0xc5,0xf4,0xff; /3ms,3ms,15ms,3ms char Tlx5=0x48,0x48,0x68,0x48,0xff;char Thx0=0xd8;char Tlx0=0xf0;char Thx1=0xb1; /20ms char Tlx1=0xe0;short Round=0; short Back=0; short Back0=0; bit Backid;bit Stop=0; char Area0=0;char Area1=0; / 区域变量char LowSpeedArea1StartTime; char LowSpeedArea1EndTime; char HighSpeedAreaEndTime; char LowSpeedArea2EndTime;char LowSpeedArea1PassTime=0; / 第一个低速区通过时间char HighSpeedAreaPassTime=0; / 高速区通过时间char LowSpeedArea2PassTime=0; / 其次个低速区通过时间char ReadyToGo=4; / 倒计时char flag;bit Roundid=0; char Nocurve=0; char ChangeFlag; char Mode;bit Running;bit SelectedAll; / 模式和速度是否挑选完毕标志bit IsSelectingMode; / 模式挑选标志bit IsSelectingSpeed; / 速度挑选标志bit ModeSelected; / 已经被挑选的模式标志char SelectedMode=10; / 模式挑选是否完毕标志bit Next; /Next键标志bit SpeedSelected; /已经被选中的速度方案标志char SelectedSpeed; /速度挑选是否完毕标志bit ChoosingDisplay; / 人工挑选菜单开头标志bit SelectedShow; / 显示挑选标志bit SelectedReturn; / 返回挑选标志bit Selected; / 确定 /返回键挑选标志bit ReturnSelection; / 返回键启用标志bit AVGSpeedShow; / 平均速度显示标志bit TotalDistanceShow; / 总路程显示标志可编辑资料 - - - 欢迎下载精品名师归纳总结bit ReturnMain; / 返回主菜单标志bit AutoDisplay; / 自动显示标志bit GoToChoosingDisplay; / 人工挑选标志bit AutoMode=0; char PassLineID=0; char PassLine=0;float PrepareDistance; float FirstDistance; float SecondDistance; float ThirdDistance; int FirstHigh;int SecondHigh; int ThirdHigh;float Rate=1.25; /5ms 时的速度float Count=4; / 时间的倍数/*全局函数实现区*/*-主函数*/voidmain P01=0; P02=0; P03=0; P04=0;P31=1; / 单片机复位,背光开Delay40; / 延时等待 LCD 启动LCDInit; / 初始化 LCD DisplayString0x0,0," Starting."DisplayString0x0,1,"DesignedBy202" Delay300;WriteCmdLCD_CLS; EA=1; / 开总中断EX0=1; / 开 INT0 中断IT0=1; /INTO边沿触发EX1=1; / 开 INT1 中断IT1=1; /INT1边沿触发SelectedAll=False; / 开头模式和速度挑选/*-模式挑选*/DisplayString0x0,0,"ChooseTheMode" DisplayString0x0,1,"youwant. " Delay50;可编辑资料 - - - 欢迎下载精品名师归纳总结WriteCmdLCD_CLS; IsSelectingMode=True; while1WriteCmdLCD_CLS; DisplayString0x0,0," LineMode " DisplayString0x0,1,"Next Yes"Delay300; / 延时排除抖动while1 / 不断检测中断,直到按确定键或是NEXT 键ifNext=True / 假如按 Next 键就直接跳出break;ifModeSelected=True / 假如按确定键就设置模式为Line 并跳出SelectedMode=Line; break; / 假如什么键都没有按下,那么始终显示等待ifModeSelected=True / 按下了确定键,退出模式挑选IsSelectingMode=False; break;ifNext=True / 按下了 Next 键,显示下一个菜单项Next=False;WriteCmdLCD_CLS;DisplayString0x0,0," CurveMode " DisplayString0x0,1,"Next Yes"Delay300; / 延时排除抖动while1 / 不断检测中断,直到按确定键或是Next 键ifNext=True / 假如再一次按下 Next 键,就跳出break;ifModeSelected=True / 假如按下确定键,就设置模式为Curve,并跳出SelectedMode=Curve; break;可编辑资料 - - - 欢迎下载精品名师归纳总结ifModeSelected=True / 按下了确定键,退出模式挑选IsSelectingMode=False; break;ifNext=True / 再一次按下了Next 键,就循环模式挑选Next=False; WriteCmdLCD_CLS; DisplayString0x0,0," AutoMode " DisplayString0x0,1,"Next Yes" Delay300; / 延时排除抖动while1ifNext=True break;ifModeSelected=TrueAutoMode=1; break;ifModeSelected=TrueIsSelectingMode=False; break;ifNext=TrueNext=False; continue;Delay50;WriteCmdLCD_CLS;/*-速度挑选*/ifSelectedMode=Line&&AutoMode=0DisplayString0x0,0," NowChoosea " DisplayString0x0,1," kindofSpeed"可编辑资料 - - - 欢迎下载精品名师归纳总结Delay50; WriteCmdLCD_CLS; IsSelectingSpeed=True; while1WriteCmdLCD_CLS; DisplayString0x0,0,"NormalSpeed " DisplayString0x0,1,"Next Yes" Delay300; / 延时排除抖动while1ifNext=True / 假如按 Next 键就直接跳出break;ifSpeedSelected=True / 假如按确定键就设置速度为Normal 并跳出Thx0=0xec;Tlx0=0x78; /5ms Thx1=0xf0;Tlx1=0x60; /4ms Thx2=0x8a;Tlx2=0xd0; /30ms Thx3=0xf4;Tlx3=0x48; /3ms SelectedSpeed=Normal;break; / 假如什么键都没有按下,那么始终显示等待ifSpeedSelected=True / 按下了确定键,退出速度挑选IsSelectingSpeed=False; break;ifNext=TrueNext=False;WriteCmdLCD_CLS;DisplayString0x0,0," Low Speed "DisplayString0x0,1,"Next Yes" Delay300; / 延时排除抖动while1ifNext=True / 假如再一次按下 Next 键,就跳出break;ifSpeedSelected=True / 假如按下确定键,就设置速度为Low ,并跳出可编辑资料 - - - 欢迎下载精品名师归纳总结SelectedSpeed=Low; / 这里没有速度设置,由于默认速度就是 Lowbreak;ifSpeedSelected=True / 按下了确定键,退出速度挑选IsSelectingSpeed=False; break;ifNext=TrueNext=False;WriteCmdLCD_CLS;DisplayString0x0,0," High Speed " DisplayString0x0,1,"Next Yes" Delay300; / 延时排除抖动while1ifNext=True / 假如再一次按下 Next 键,就跳出break;ifSpeedSelected=True / 假如按下确定键,就设置速度为High , 并跳出Thx0=0xe0;Tlx0=0xc0;/8ms Thx1=0xe0;Tlx1=0xc0; /8ms Thx2=0x63;Tlx2=0xc0; /40ms Thx3=0xec;Tlx3=0x78; /5ms SelectedSpeed=High;break;ifSpeedSelected=True / 按下了确定键,退出速度挑选IsSelectingSpeed=False; break;ifNext=True / 再一次按下了Next 键,就循环速度挑选Next=False; continue;可编辑资料 - - - 欢迎下载精品名师归纳总结SelectedAll=True; / 标志模式挑选和速度挑选完毕Running=True;Delay50;WriteCmdLCD_CLS;/*-显示所挑选的模式和速度方案*/ifSelectedMode=LineDisplayString0x0,0,"ChoosenModeis" DisplayString0x0,1," Line " Delay50;WriteCmdLCD_CLS;ifSelectedMode=CurveDisplayString0x0,0,"ChoosenModeis" DisplayString0x0,1," Curve " Delay50;WriteCmdLCD_CLS;ifAutoMode=1DisplayString0x0,0,"ChoosenModeis" DisplayString0x0,1," AutoMode " Delay50;WriteCmdLCD_CLS;ifSelectedMode=LineifSelectedSpeed=NormalDisplayString0x0,0,"ChoosenSpeedis" DisplayString0x0,1," Normal " Delay50;WriteCmdLCD_CLS;ifSelectedSpeed=LowDisplayString0x0,0,"ChoosenSpeedis" DisplayString0x0,1," Low "Delay50;WriteCmdLCD_CLS;可编辑资料 - - - 欢迎下载精品名师归纳总结ifSelectedSpeed=HighDisplayString0x0,0,"ChoosenSpeedis" DisplayString0x0,1," High "Delay50;WriteCmdLCD_CLS;INTInit; / 初始化全部中断DisplayString0x0,0,"LeftTimesToGo" whileReadyToGo-DisplaySingleChar0x7,1,ReadyToGo+0x30; DisplaySingleChar0x09,1,'s'Delay300;WriteCmdLCD_CLS; DisplayString0x05,0,"Go." Delay100; WriteCmdLCD_CLS; DisplayString0x0,0," Living. "DisplayString0x0,1,"Designedby202" ifSelectedMode=Line&&AutoMode=0 flag=Area0;else flag=1;whileflag<5ifAutoMode=1 /自动模式switchPassLineIDcase0 : ifIsT0INT=1P01=P02=P04=0;P03=1;elseP01=P02=P03=P04=0;break; case1 :P01=P02=P03=0;P04=1;break; case2 :P01=P02=P04=0;P03=1;可编辑资料 - - - 欢迎下载精品名师归纳总结break; default:break;elseifSelectedMode=Line / 直线模式flag=Area0; ifIsT0INT=1P03=1;P04=0;P01=P02=0;elseP03=0;P04=0;P01=P02=0;else /S 型模式ifNocurve<2&&Round.=0&&Back0>0&&Back.=0ifBackid=1P01=1;P02=0;P03=0;P04=1;elseP01=0;P02=1;P03=0;P04=1;Back=1;elseifRound=0 ifIsT0INT2=1P01=0;P02=0;P03=1;P04=0;elseP01=0;P02=0;P03=0;P04=0;else ifP33=0 ifIsT0INT2=1P01=0;P02=0;P03=1;P04=0;elseP01=0;P02=0;P03=0;P04=0;else可编辑资料 - - - 欢迎下载精品名师归纳总结EX1=1;ifRound%2 ifIsT0INT2=1P01=1;P02=0;P03=1;P04=0;Backid=1;elseP01=1;P02=0;P03=0;P04=0;else ifIsT0INT2=1P01=0;P02=1;P03=1;P04=0;Backid=0;elseP01=0;P02=1;P03=0;P04=0; ifIsT1INT=1 IsT1INT=0;ComputeTime; ComputeSpeedANDDistance;/补中断路程,加上最终一次中断缺失的路程ComputeSpeedANDDistance; P04=1;P03=0;P01=P02=0;Delay90;P03=0;P04=0; / 行程终止,小车停止P31=1; / 行程终止,背光开ET0=0x0; / 关 T0 中断ET1=0x0; / 关 T1 中断EX1=0x01; / 开 INT1 中断Running=False;AutoDisplay=True; / 默认情形下直线模式会自动显示各个区域经过的时间WriteCmdLCD_CLS; ifSelectedMode=Line / 直线模式才显示while1ifGoToChoosingDisplay=True可编辑资料 - - - 欢迎下载精品名师归纳总结break;Delay200;WriteCmdLCD_CLS;Delay200;DisplayString0,0,"LowSpeedArea1"DisplayString0,1,"Costed" DisplaySingleChar0x0C,1,'s'LowSpeedArea1PassTime=LowSpeedArea1EndTime-LowSpeedArea1StartTime;DisplaySingleChar0x0A,1,LowSpeedArea1PassTime%10+0x30; ifLowSpeedArea1PassTime>9 / 通过第一个低速区的时间超过 sDisplaySingleChar0x0B,1,LowSpeedArea1PassTime/10+0x30; ifGoToChoosingDisplay=Truebreak;Delay200;WriteCmdLCD_CLS;Delay200;DisplayString0,0,"HighSpeedArea"DisplayString0,1,"Costed" DisplaySingleChar0x0C,1,'s'HighSpeedAreaPassTime=HighSpeedAreaEndTime-LowSpeedArea1EndTime; DisplaySingleChar0x0A,1,HighSpeedAreaPassTime%10+0x30; ifHighSpeedAreaPassTime>9 / 通过高速区的时间超过s DisplaySingleChar0x0B,1,HighSpeedAreaPassTime/10+0x30; ifGoToChoosingDisplay=Truebreak;Delay200;WriteCmdLCD_CLS;Delay200; DisplayString0,0,"LowSpeedArea2" DisplayString0,1,"Costed" DisplaySingleChar0x0C,1,'s'LowSpeedArea2PassTime=LowSpeedArea2EndTime-HighSpeedAreaEndTime; DisplaySingleChar0x0A,1,LowSpeedArea2PassTime%10+0x30; ifLowSpeedArea2PassTime>9 / 通过其次个低速区的时间超过 sDisplaySingleChar0x0B,1,LowSpeedArea2PassTime/10+0x30;AutoDisplay=False;/*-菜单项挑选择你想要看的内容-总时间、总路程以及平均速度*/ChoosingDisplay=True; WriteCmdLCD_CLS;/* 第一显示主菜单,然后显示第一个选项*/可编辑资料 - - - 欢迎下载精品名师归纳总结DisplayString0x0,0,"NowChoosewhat" DisplayString0x0,1,"youwanttosee" Delay100;while1WriteCmdLCD_CLS; DisplayString0x0,0," CostedTime " DisplayString0x0,1,"Nex

    注意事项

    本文(PWM调速+循迹--智能小车程序 .docx)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开