PWM调速+循迹__智能小车程序

上传人:tang****xu1 文档编号:132727168 上传时间:2020-05-19 格式:DOC 页数:34 大小:97.50KB
返回 下载 相关 举报
PWM调速+循迹__智能小车程序_第1页
第1页 / 共34页
PWM调速+循迹__智能小车程序_第2页
第2页 / 共34页
PWM调速+循迹__智能小车程序_第3页
第3页 / 共34页
PWM调速+循迹__智能小车程序_第4页
第4页 / 共34页
PWM调速+循迹__智能小车程序_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《PWM调速+循迹__智能小车程序》由会员分享,可在线阅读,更多相关《PWM调速+循迹__智能小车程序(34页珍藏版)》请在金锄头文库上搜索。

1、/T0产生双路PWM信号,L298N为直流电机调速,接L298N时相应的管脚上最好接上10K的上拉电阻。 /* 晶振采用12M,产生的PWM的频率约为100Hz */ #include #include #define uchar unsigned char #define uint unsigned int sbit 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;

2、 /* 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 motor(uchar index, char speed) if(speed0;j-); *

3、/void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main() uchar i=0,j=0; TMOD=0x02; /* 设定T0的工作模式为2 ,8位自动重置定时器,每过几个机器周期,计数器加一*/ TH0=0x9B; /* 装入定时器的初值,计数100次溢出 */ TL0=0x9B; /*装入时间常数*/EA=1; /* 开中断 */ ET0=1; /* 定时器0允许中断 */ TR0=1; /* 启动定时器0 */while(1)if(key=1) /* 电机实际控制演示 */if(i=100) / 正转加速

4、motor(1,i); motor(2,i); delay(5000);i+; elseGO(); elseEA=0;while(1)if(L|C|R)=0)STOP();if(L&R)GO();if(L=0)while(C) TL();if(R=0)while(C) TR(); void timer0() interrupt 1 /* T0中断服务程序 */ if(t=0) /* 1个PWM周期完成后才会接受新数值 */ tmp1=m1; tmp2=m2; if(ttmp1) en1=1; else en1=0; /* 产生电机1的PWM信号 */ if(t=100) t=0; /* 1个P

5、WM信号由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 0x01 /高电平选择数据#defineCmd 0x00 /低电平选择命令#defineEnable 0x00 /跃变到低电平时执行命令#defineDisable 0x01#d

6、efineTrue 0x01#defineFalse 0x00#defineLCD_Init 0x38 /初始化模式#defineLCD_DispCtr 0x0C /开显示及光标设置#defineLCD_CloseCtr 0x08 /关显示#defineLCD_CLS 0x01 /清屏幕#defineLCD_EnterSet 0x06 /显示光标#defineBusy P1_7 /忙信号/*- 测速/测距/测时模块-*/#defineCircleLength 0.132 /小车转一轮的长度为.132m/*- 控速模块-*/#defineP03 P0_3 /后电机#defineP04 P0_4

7、/后电机#defineP01 P0_1 /前电机#defineP02 P0_2 /前电机#defineP31 P0_5 /控制液晶背光#defineP33 P3_3/*- 菜单选择模块-*/#defineLine 0x00 /0代表直线模式#defineCurve 0x01 /1代表S型模式#defineNormal 0x00 /0 代表正常速度#defineLow 0x01 /1 代表低速#defineHigh 0x02 /2 代表高速/* 全局函数声明区 */*- LCD模块-*/voidLCDInit(void); /LCD初始化voidSetWriteCmd(void); /设置写命令

8、模式voidSetReadCmd(void); /设置读命令模式voidSetWriteData(void); /设置写数据模式voidWriteCmd(charcmd); /写命令voidWriteData(charddata); /写数据voidExecuteCmd(void); /执行命令voidSetXY(charx,chary); /定位显示地址voidDisplaySingleChar(charx,chary,charcchar); /显示单个字符voidDisplayString(charx,chary,char*str); /显示一段字符串voidDelay(unsignedi

9、nttime); /延时主程序voidDelayUs(unsignedinttime); /延时子程序bit IsBusy(void); /判断忙标志函数voidDisplayTime(void); /显示时间voidDisplayAVGSpeed(void); /显示平均速度voidDisplayDistance(void); /显示路程/*- 测速/测距/测时模块-*/voidINTInit(void); /所有中断初始化voidSpeedINT(void); /测速中断voidComputeTime(void);voidComputeSpeedANDDistance(void); /计算速度和距离/*- 控速模块-*/voidCtrSpeedINT(void); /控速中断voidTime0INT(void);voidTime1INT(void); /控速单位时间中断voidClock0_Init(void); /时钟中断初始化voidClock1_Init(void); /时钟中断初始化voidCtrSpeed(void);/* 全局变量区*/float SpeedCount=0; /测速计数脉冲float Speed=0.0;float Distance=0.0;char Time1INTCount=0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号