找回密码
 注册
关于网站域名变更的通知
查看: 362|回复: 1
打印 上一主题 下一主题

51单片机舵机驱动源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-10-29 11:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机舵机驱动源程序

( Y$ K/ A8 h4 C8 R: @单片机控制舵机源程序如下:
) x" j  K1 }- d3 V9 H6 b) `4 y: p, z3 N6 a
#include <reg52.h>
3 C8 U! Q4 N* I, U) X0 l/ s
& d% T# z0 l. v" xunsigned char count;      //0.5ms次数标识9 `$ v: x1 Q8 d& F; z% f% |+ D

" K& a' Q" B$ E7 gsbit pwm =P1^0 ;          //PWM信号输出
4 J, R# n4 ^! g6 a$ P. ^, b  n% J5 s' m% N
' \1 i# E4 N8 Qsbit jia =P2^4;           //角度增加按键检测IO口
% b( G0 C3 I) o
4 j9 S$ ]) G5 Z, O! S, G& bsbit jian =P2^5;           //角度减少按键检测IO口
% Z7 J! ?/ H  c" }- H# X& |8 x4 S2 i# ]0 J( i9 M
unsigned char jd;         //角度标识
* Z  O$ |+ p% O1 S2 X$ w. y% ]) h7 f& z6 f; B2 a
9 U6 m  z7 z/ b. {- w: G6 A3 J
  j' i9 L& Z$ a' P# a) f
sbit pwm1 =P0^0 ;          //PWM信号输出给示波器,检测PWM波用0 ~/ \* e# t0 B9 L' t

& }% ?5 b! o$ T( X# u0 Cvoid delay(unsigned char i)//延时5 q; `& u8 S$ K" A/ V

6 p& G! o3 h' U{
( U7 u- c! ]  M1 A, F1 K
. p# m. Q9 S  G) z  unsigned char j,k;- d9 G% M9 T9 N$ r

! \. ?$ L: \1 v* q  for(j=i;j>0;j--)0 M! _( J* p2 [$ G* H! l& o9 U

- p- H' Q( E% c0 G( V- y  e  n' ~    for(k=125;k>0;k--);7 J: R  o2 s" I0 _0 l

5 U, T( m7 Q6 h  t" r& L}
) F8 s- W  A5 n- k' I3 B7 l$ h7 P
% x  D+ r- W; R" tvoid Time0_Init()          //定时器0初始化
! F; z1 `7 z3 a0 s) d2 H
$ s5 v) T7 ^% m: o{' ?! }) Z3 L9 V: E& I- N

# k, O% L2 |. j5 q+ j1 j6 O//定时器0装初值 用示波器检测后,11.0592MHZ晶振 定时0.5ms进入中断 装初值如下+ z$ |9 d" Z. h. x: o. f
& z% |- }9 G! y: V
TH0  = (65536-445)/256;
* j2 ^3 T) B* H- y2 b& ^
& @0 E8 U+ i1 M! MTL0  = (65536-445)%256;
# r! h# [: G. i+ ^  i3 z5 m0 `! l; _3 e# w) f3 l. D# O
/ D" w' ^! @. a9 O! X9 Z8 z/ `
TMOD = 0x01;    //定时器0工作在方式1   # v9 n; o  ~  m7 t3 I& \
" |, k( [- s& F7 E8 F- C) G2 D
IE = 0x82;        //IE=0x82=1000 0010 等价于 EA=1 开总中断  ET0=1 开定时器0中断
" e! O6 ^' T6 g" e# n! `
# ^2 F3 ~$ H/ n/ _; q  TR0=1;          //开定时器0
6 L; i: u; X/ K5 z/ h9 Y( A6 _7 d* x% p
}& R4 D+ R. \6 i; S  ^% C

8 t$ m& v* ?# g6 Xvoid Time0_Int() interrupt 1 //中断程序8 K% S4 W5 z+ }; `; q$ v

' z% A- p) Y" F8 z4 \( Q{- w* l, j5 `0 q$ s- T* p
# o# u9 P7 R, z) E- M4 a
//重装初值
/ }( n' Z. X7 T1 T, d: [+ a. J8 F1 [) Q( N. J0 f. f
TH0  = (65536-445)/256;; a# I2 C$ F4 a4 J

6 S5 a2 y! h* o9 lTL0  = (65536-445)%256;
  m8 @/ n% J9 u) U" }( H# a' f8 d# k, D
8 S/ h$ n: y9 u, T' K& _* t8 _

" z+ R6 P0 w) t, ~; i    if(count< jd)6 f+ g& w; j: O
{  {( M! Z# @8 F; A1 `
pwm=1;                  //确实小于,PWM输出高电平/ C8 W% D) q9 j3 d- ?: ]
pwm1=pwm;              //接示波器用的io口,观测PWM波形用            }        //判断0.5ms次数是否小于角度标识+ ~' [( P% a  _4 _; P. [& ^
//pwm=1;                  //确实小于,PWM输出高电平
  q" c, b& C: a% E3 n$ H    else5 u$ L% R) n. i# m
{3 e' o& J' C5 ?3 u. s& m* e- P
pwm=0;                  //确实小于,PWM输出高电平$ l& G% r$ s* y# y/ Q' P- h# L
pwm1=pwm;             //接示波器用的io口,观测PWM波形用        }
0 @' Q% T. n! ]* t    //  pwm=0;                  //大于则输出低电平
& \1 B- v! s7 Z5 a    count=(count+1);          //0.5ms次数加1! }! z* _  I8 k) e7 I* L! a
    count=count%40;     //次数始终保持为40 即保持周期为20ms6 D' h0 R3 ^7 ?/ d
}
+ L; ~- ~0 G7 v% x' w* J7 z' p* H% @' n+ L
//此注销掉部分为通过按键控制舵机转动的程序,功能为通过jia按键控制正转,9 R8 c( p; \; a
//通过jian按键控制反转$ J1 f% i7 v6 G$ Y# u
/*void keyscan()              //按键扫描& V. m, l' ?' B
{
: R- q$ u) |4 Q* A# x   if(jia==0)               //角度增加按键是否按下
# K/ r9 @# f9 {  G3 _  {7 C" ]8 B' b  B3 i" k/ ^* u
    delay(10);              //按下延时,消抖
; f! J9 _2 B# W4 p    if(jia==0)              //确实按下
- t  C- }1 t5 J4 E' n  ~5 R8 j     {
  A1 N  e: T; l" t& w/ J      jd++;                 //角度标识加1. ~- M9 L( ^9 j) h! Z) w6 R
      count=0;              //按键按下 则20ms周期从新开始
+ M7 L3 \% }" A2 J      if(jd==6)* \: b' x0 Z: I2 s
        jd=5;               //已经是180度,则保持
# T1 M3 H/ M) {: Q      while(jia==0);        //等待按键放开
+ [( c) `2 S4 M- x     }5 C# d" o9 }, o2 U' c
  }
, ^$ e/ m$ \. f4 P$ Z  T) f' }  if(jian==0)                //角度减小按键是否按下' o9 U& R9 ~: L; ]
  {
) r% G9 u$ s' ~: ~7 Y    delay(10);' Q2 q0 V2 J3 Q& T
    if(jian==0)
% |+ b3 A+ h/ e, k+ `     {4 ~! F' F0 h/ W$ _1 x  P0 O
      jd--;                 //角度标识减1
- O0 R% o3 y1 L      count=0;
) t$ h( H# ]0 G# a      if(jd==0)
7 c6 K, S7 k' @- d9 g        jd=1;               //已经是0度,则保持' I& ]3 c  H6 `
      while(jan==0);
3 D% B6 k, P8 v0 U. M  l+ e     }
& g6 p7 d5 S% {$ e6 h0 ?$ h  }
% r( ]6 W  J0 p4 g}*/
4 h( a* S5 z/ J4 X; p+ i! p- P" M( c) _7 w9 k  \- ?3 T
void main(): M7 G4 C! W# e! u3 Z0 T- N' {
{  ~% N% }; m9 L1 k7 P6 |+ N) }% A
//上电,舵机自动正反转   
4 C  G3 I: i2 m' S  R2 a+ O//应注意每次步进是延时函数delay参数的设置,此处延时函数参数设置的并不理想   
( l9 o5 l6 T2 K3 q! Lwhile(1)0 p9 h  g4 ?+ I
{
, D9 {; U, {/ B4 U" D6 Q) L  for(jd=1;jd<6;jd++)
& _5 \5 G# q5 M8 \{
7 m7 g" E! u0 O. X- v  }: t& A+ j- icount=0;$ C  Z3 K; O$ c
Time0_Init();3 q" g$ i0 C7 h+ j6 o
delay(50000000);$ P5 \; g7 B2 W# k8 B5 Q1 M8 u# d
}
: q( o9 d' X* {* \* m4 W9 rdelay(50000000);# n" B9 B8 ^/ c/ z' c
for(jd=6;jd>0;jd--)2 E3 f  {6 N& F+ ^

. h/ _! p( J* F. Y9 E) e{
2 d# F; ]: V* J7 B3 D0 D
, K# d2 b* w9 b9 f- d( Bcount=0;8 B; W% H9 Q( o) S( a5 v
& _& _2 D$ k( P) n+ E2 c
Time0_Init();  z. |4 P; n+ T

# C, V0 p) t- }, h9 a- L5 [delay(50000000);) [' y8 N% v" j- }3 m$ ~. g
& v  ^8 }" C2 M# H' a' H
}8 H1 F$ M$ a5 c" C$ q" F
5 R2 M6 k7 K. c' Q) T! ~" t+ ?# O

9 ?- [1 J, a0 F- j; k
' J2 s( _' u# s5 p4 S4 o7 f- I5 }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-3 04:19 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表