智能小车舵机控制.docx

上传人:b****4 文档编号:24412425 上传时间:2023-05-27 格式:DOCX 页数:9 大小:16.08KB
下载 相关 举报
智能小车舵机控制.docx_第1页
第1页 / 共9页
智能小车舵机控制.docx_第2页
第2页 / 共9页
智能小车舵机控制.docx_第3页
第3页 / 共9页
智能小车舵机控制.docx_第4页
第4页 / 共9页
智能小车舵机控制.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

智能小车舵机控制.docx

《智能小车舵机控制.docx》由会员分享,可在线阅读,更多相关《智能小车舵机控制.docx(9页珍藏版)》请在冰豆网上搜索。

智能小车舵机控制.docx

智能小车舵机控制

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模板 > 动物植物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1