PWM调速+循迹--智能小车程序 .docx
《PWM调速+循迹--智能小车程序 .docx》由会员分享,可在线阅读,更多相关《PWM调速+循迹--智能小车程序 .docx(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品名师归纳总结/T0 产生双路 PWM 信号,L298N 为直流电机调速, 接 L298N 时相应的管脚上最好接上10K的上拉电阻。/*晶振采纳 12M, 产生的 PWM 的频率约为 100Hz */ #include#include#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、 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 speedifsp
3、eed0;j-;*/void delayuint z可编辑资料 - - - 欢迎下载精品名师归纳总结uint x,y; forx=z;x0;x-fory=110;y0;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/*电机实际
4、掌握演示*/ 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;ifttmp1 en1
5、=1; else en1=0; /* 产生电机 1 的 PWM 信号 */ ift=100 t=0; /* 1个 PWM 信号由 100 次中断产生 */可编辑资料 - - - 欢迎下载精品名师归纳总结#include #include/*宏定义区*/*- LCD模块*/#defineLCD_RW P2_6 / 读写掌握端#defineLCD_RS P2_7 / 数据命令挑选端#defineLCD_E P2_5 / 执行使能端#defineLCD_Data P1 /P1口#defineWrite 0x00 / 低电平写入#defineRead 0x01 / 高电平读出#defineData 0
6、x01 / 高电平挑选数据#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 /
7、 前电机#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代表低速
8、#defineHigh 0x02 /2代表高速/*可编辑资料 - - - 欢迎下载精品名师归纳总结*全局函数声明区*/*- LCD模块*/voidLCDInitvoid; /LCD初始化voidSetWriteCmdvoid; /设置写命令模式voidSetReadCmdvoid; / 设置读命令模式voidSetWriteDatavoid; / 设置写数据模式voidWriteCmdcharcmd; / 写命令voidWriteDatacharddata; / 写数据voidExecuteCmdvoid; / 执行命令voidSetXYcharx,chary; /定位显示的址voidDisp
9、laySingleCharcharx,chary,charcchar; /显示单个字符voidDisplayStringcharx,chary,char*str; /显示一段字符串voidDelayunsignedinttime; / 延时主程序voidDelayUsunsignedinttime; /延时子程序/*-测速 /测距 /测时模块*/voidINTInitvoid; /全部中断初始化 voidSpeedINTvoid; / 测速中断voidComputeTimevoid; voidComputeSpeedANDDistancevoid; /运算速度和距离/*-控速模块*/voidC
10、trSpeedINTvoid; /控速中断voidTime0INTvoid;voidTime1INTvoid; /控速单位时间中断voidClock0_Initvoid; /时钟中断初始化voidClock1_Initvoid; /时钟中断初始化voidCtrSpeedvoid;bit IsBusyvoid; / 判定忙标志函数voidDisplayTimevoid; /显示时间voidDisplayAVGSpeedvoid; /显示平均速度voidDisplayDistancevoid; /显示路程/*全局变量区*/float SpeedCount=0; / 测速计数脉冲float Spee
11、d=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 Thx
12、1=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 HighSpeedAreaPa
13、ssTime=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 SelectedMo
14、de=10; / 模式挑选是否完毕标志bit Next; /Next键标志bit SpeedSelected; /已经被选中的速度方案标志char SelectedSpeed; /速度挑选是否完毕标志bit ChoosingDisplay; / 人工挑选菜单开头标志bit SelectedShow; / 显示挑选标志bit SelectedReturn; / 返回挑选标志bit Selected; / 确定 /返回键挑选标志bit ReturnSelection; / 返回键启用标志bit AVGSpeedShow; / 平均速度显示标志bit TotalDistanceShow; / 总路程
15、显示标志可编辑资料 - - - 欢迎下载精品名师归纳总结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 R
16、ate=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; / 开
17、 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; / 延时排除抖动wh
18、ile1 / 不断检测中断,直到按确定键或是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, Curv
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PWM调速+循迹-智能小车程序 PWM 调速 循迹 智能 小车 程序
限制150内