智能小车舵机控制.docx
- 文档编号:24412425
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:9
- 大小:16.08KB
智能小车舵机控制.docx
《智能小车舵机控制.docx》由会员分享,可在线阅读,更多相关《智能小车舵机控制.docx(9页珍藏版)》请在冰豆网上搜索。
智能小车舵机控制
1
//只利用一个定时器T0,定时时间为0.5ms,定义一个角度标识,数值为1、2、3、4、5,
//实现0.5ms、1ms、1.5ms、2ms、2.5ms高电平的输出,再定义一个变量,数值最大为40,实现周期为20ms。
//每次进入定时中断,判断此时的角度标识,进行
//相应的操作。
比如此时为5,则进入的前5次中断期间,信号输出为高电平,即为2.5ms的
//高电平。
剩下的35次中断期间,信号输出为低电平,即为17.5ms的低电平。
这样总的时间
//是20ms,为一个周期。
//用51板上s1和s2按键
//用P1^7输出PWM信号控制舵机
#include"reg52.h"
unsignedcharcount;//0.5ms次数标识
sbitpwm=P1^7;//PWM信号输出
sbitjia=P3^0;//角度增加按键检测IO口
sbitjan=P3^1;//角度减少按键检测IO口
sbitjianwei=P3^4;//按键位
unsignedcharjd;//角度标识
sbitdula=P2^6;
sbitwela=P2^7;
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e
voiddelay(unsignedchari)//延时
{
unsignedcharj,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
voidTime0_Init()//定时器初始化
{
TMOD=0x01;//定时器0工作在方式1
IE=0x82;
TH0=0xfe;
TL0=0x33;//11.0592MZ晶振,0.5ms
TR0=1;//定时器开始
}
voidTime0_Int()interrupt1//中断程序
{
TH0=0xfe;//重新赋值
TL0=0x33;
if(count pwm=1;//确实小于,PWM输出高电平 else pwm=0;//大于则输出低电平 count=(count+1);//0.5ms次数加1 count=count%40;//次数始终保持为40即保持周期为20ms } voidkeyscan()//按键扫描 { if(jia==0)//角度增加按键是否按下 { delay(10);//按下延时,消抖 if(jia==0)//确实按下 { jd++;//角度标识加1 count=0;//按键按下则20ms周期从新开始 if(jd==6) jd=5;//已经是180度,则保持 while(jia==0);//等待按键放开 } } if(jan==0)//角度减小按键是否按下, { delay(10); if(jan==0) { jd--;//角度标识减1 count=0; if(jd==0) jd=1;//已经是0度,则保持 while(jan==0); } } } voiddisplay()//数码管显示函数 { unsignedcharbai,shi,ge; switch(jd)//根据角度标识显示相应的数值 { case1: //为1,角度为0,前3个数码管显示000 bai=0; shi=0; ge=0; break; case2: bai=0; shi=4; ge=5; break; case3: bai=0; shi=9; ge=0; break; case4: bai=1; shi=3; ge=5; break; case5: //为5,角度为180,前3个数码管显示180 bai=1; shi=8; ge=0; break; } dula=0; P0=table[bai]; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5); P0=table[shi]; dula=1; dula=0; P0=0xfd; wela=1; wela=0; delay(5); P0=table[ge]; dula=1; dula=0; P0=0xfb; wela=1; wela=0; delay(5); } voidmain() { jd=1; jianwei=0; count=0; Time0_Init(); while (1) { keyscan();//按键扫描 display(); } } 2 #include #defineuintunsignedint #defineucharunsignedchar uintcount; ucharjd; sbitle1=P1^0;//*光电传感器*// sbitPWM=P3^5;//舵机pwm// init() { TMOD=0x01;//设定定时器 TH0=0xFE; TL0=0x0c;//设定定时初始值 EA=1; ET0=1; TR0=1; } voiddelay(uintz)//延时 { uintx,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } voidtimer0()interrupt1//产生pwm信号控制舵机,周期20ms { TH0=0xFE; TL0=0x0c;//设定定时初始值 if(count { PWM=1;//确定小于,pwm输出高电平 //delay(180);//延时一会,可以减慢舵机转速 } else PWM=0;//大于则输出低电平 count=count+1;//0.5ms次数加1 count=count%40;//次数始终保持为40即保持周期为20ms } voidxunji()//循迹函数,读取光电管状态 { if(le1! =0) { delay(10); if(le1==0) { jd++; count=0; while(le1==0); } }//分析光电管状态,看你的电路检测到黑线输出1或者是0 else { count=0; jd=3;//舵机归中 } } voidmain() { jd=3;//角度初始化90°: 1=0.5ms舵机为0°2=1ms舵机为45°3、4、5、同上 count=0;//初始化赋值零 init();//定时器初始化 while (1) { xunji();//舵机检测 } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 小车 舵机 控制