|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机控制一路舵机控制90度来回 源程序: ?1 `; E+ w' C8 s2 \' u, h
- G; i# y* K0 M; ~, x9 o
单片机源程序:* x! a& w3 \/ f X- [9 c
#include "STC12C5620AD.H" //STC89c52系列单片机) P t. m& j$ u) `
sbit pwm =P1^3 ; //PWM信号输出
1 }$ e: B, S' C( T* s; Z* Bsbit sjg =P1^2 ; //三极管,继电器 ,电磁铁5 g+ C: P# \; x5 z) Y3 T/ d; @2 s& i# L
sbit cxyg =P1^0 ; //场效应管,电磁吸盘) c0 L. d! U* X7 h" q$ Z% }! c$ g
unsigned char ci; //0.1ms次数ci,总行程300度时,11次代表90度,5次代表0度% i& G# \$ X7 q9 [9 L) n9 E
unsigned char cishu; //进入中断次数1 O3 c0 ~/ m# U& t6 D5 Y% c4 e8 P s
/*******************延时函数***********************/0 d9 e- G; X/ q& [' w
void delay10ms(void) //误差 -0.000000000002us
/ v5 V8 e* q) R- l. U/ }: _
: Z e9 t! k8 c0 \: q+ S8 n{ . ^9 @% l5 @' A' w5 u
unsigned char a,b;
+ a; U* e. r7 j3 J2 f/ Q9 Z- lfor(b=151;b>0;b--) / b! o$ l1 B# E9 y' ]
/ ^5 ]# V$ B# j+ r
for(a=29;a>0;a--); ( n Y8 X' ~. i, I# Q
}
; [2 B4 A, \6 x4 ^2 @- ^% w4 c `0 a% F
void delay100ms(void) //误差 -0.000000000021us 6 I% O+ f$ a: ?( P
' f6 M6 _5 [3 Q( q# j3 V' U* C2 j L{
0 J6 @+ p, I. j3 I3 O" cunsigned char a,b,c; " r5 b$ W' E1 F% O( p* U: F2 V4 ?: j
for(c=35;c>0;c--) + W# L4 ]4 k9 l" v% F/ q* ?& M1 V
$ ]3 F6 f; d' O
for(b=10;b>0;b--) , i+ i0 `' I5 r
for(a=130;a>0;a--);
4 m s$ U) t) f" I' d} / `6 L- i+ H3 s
R& ]- e$ Q4 V) g! f
void delay1s(void) //误差 -0.00000000024us
9 d- w" j- ]8 M2 r3 ~; f
! A2 W' [, J, E- H/ r{
! n& w, o0 `5 [: d. i0 [unsigned char a,b,c; H5 S# Z9 e* \: K" \
. R- ]. @% E7 h# [8 Gfor(c=95;c>0;c--)
2 l4 N) U+ r$ t: p. Y& ]6 L( {0 p/ b+ ? w; L
for(b=26;b>0;b--)
9 R1 D; i4 d S6 \/ b$ I0 P8 u3 I/ m" x; d; w+ y( X
for(a=185;a>0;a--);; D( A$ M( {. k% O4 G' |
5 Q9 [0 R( I ^6 z9 k9 v
}$ I) p/ S3 q) ~
- a$ W- j; c/ C( M" Y2 n1 M3 _$ Q
/********************定时器0初始化************************/ o- T2 `5 O+ v1 Z
void Time0_Init() //定时器初始化
# N3 k! z7 E l/ l. E* I7 B; P{, p( I( a9 Q$ K) I$ K7 |: |, {/ |5 a
TMOD = 0x01; //定时器0工作在方式1 & Z! S( m/ N4 r2 g3 `
IE = 0x82; //中断允许寄存器
% A. A+ F# R# K9 v& o9 STH0 = 0xff;
! X8 _$ i6 R. HTL0 = 0xa3; //11.0592MZ晶振,0.1ms8 J2 B$ w5 h' [1 o1 x/ Y
TR0=1; //定时器开始: V; X9 \! R+ @. W5 }
}
% i+ @- L" u0 K8 Z: x1 e) c, p/***************定时器中断函数*****************/
8 e6 X" u2 |+ K) F" Zvoid Time0_Int() interrupt 1 //中断程序
( S8 @1 x# I2 _" [$ l{
- Y1 ^9 T0 [! D+ b( Z! eTH0 = 0xff; //重新赋值
7 P$ U! H0 w4 A8 Q \9 C) S! ]TL0 = 0xa3;/ q t! d# Y4 ^% S0 p3 ^
cishu++;* M/ |: c* E! {6 Z1 Q
if(cishu<ci)
9 R2 k6 Q; H/ a {0 f/ {7 |: f5 @0 y0 z5 u) ?2 k" z+ Q, d
pwm=1;$ C7 l# b; ]- z! ]1 _
}
7 x$ a! t5 y4 J( s. I2 @% B else if(ci<cishu<200)
2 o8 M( s0 O# C5 f8 s {4 u8 m) \2 }6 ~2 N: d
pwm=0;/ i7 t' u! ?& Q! n
}
1 N# g& a G! G0 g' ?# ? cishu=cishu%200;5 {* H2 b& ~( D+ G
}
N. i1 ]: x# S- c/*****************主函数*******************/9 Y% a" w h# |8 Y7 C
void main()9 ^, r1 J9 q t1 v* M: s
{
2 B2 {0 S3 V0 p5 t, E* gcishu=0;" g! w1 o I3 u7 J
ci=5;
0 C. Q- X4 O) x7 Fpwm=0;
& B+ ^+ p/ |* Ccxyg=0;//电磁吸盘不工作$ z0 t3 ]* B. v9 x- e1 o& M
sjg=1; //继电器不工作# w( Z; U1 t1 ]! O k1 S0 K$ a
Time0_Init(); * w/ b. q" q6 Y" Q g
5 B0 o" r+ L3 g6 L, E# _; ? ci=5; //舵机归零( ]$ X6 W0 A2 D: @
delay1s();delay1s();delay1s();/ ?: [, A9 d% N; e4 p% F3 M& F
cxyg=0; //电磁吸盘不工作6 m; `+ W( e% d$ s
sjg=1; //继电器不工作
4 s i" C# w4 y+ X delay1s();delay1s();delay1s();
3 h* J; o6 i, s# B8 [* @' @4 s4 b delay1s();delay1s();delay1s();//延时1s时间,舵机归零回正
$ Q* ?4 b( f9 i+ j7 u- V9 ?/ O delay1s();delay1s();delay1s();7 m5 v9 D3 v8 W% W) J) D
delay1s();delay1s();delay1s();( E& v* i( H5 }$ s! k+ @
delay1s();delay1s();delay1s();
0 w8 _ d& v, I6 @) D' x9 P delay1s();delay1s();delay1s();
2 q+ K1 f, I# f) @" `while(1)2 z4 l6 Y$ }/ g
{ ; X; m9 k7 w6 Z) F& o
ci=13; //舵机转过90度, @3 m( Y7 W$ [+ x; {
delay1s();delay1s();delay1s(); Z! ^% J4 E6 h' X$ I6 d/ f0 \
delay1s();delay1s();delay1s(); G+ F2 L! i O7 b4 g( v
delay1s();delay1s();delay1s();7 V0 ~* P0 Y0 M5 e4 X v
delay1s();delay1s();delay1s();; w; R. V: d: A4 O% [
delay1s();//延时1s时间,舵机转90度8 ^2 z! |4 _, a0 Q# \2 _$ [
cxyg=1; //电磁吸盘工作
+ W$ M) J+ E& H8 K9 q sjg=0; //继电器工作,电磁铁得电6 N0 t: g+ g0 v0 i8 [
delay1s();//延时1s时间,将工件吸起来4 j/ k8 [. }: _2 N. T5 w
cxyg=1; //电磁吸盘工作
: I6 {% \+ {9 M- g sjg=1; //继电器不工作,电磁铁失电* ]' @/ C( d- P/ R
delay1s();delay1s();//延时2s,用来拍照$ Y* G# L4 C# t' A+ z# E- U
delay1s();delay1s();delay1s();
}: [5 H3 Q! K# F7 z7 }5 B delay1s();delay1s();delay1s();, e F1 E3 i, Q. X2 N" y4 t
delay1s();delay1s();delay1s();
3 q6 [! o: h+ g delay1s();delay1s();delay1s();& a. \/ X; k+ S* L! J
delay1s();delay1s();delay1s();
6 l o+ w9 ^9 E+ H, | delay1s();delay1s();delay1s();$ F/ i6 V1 T4 B. i4 f) T
8 k- _- @) y/ Z3 y ci=5; //舵机归零,在顶上
9 M, N6 d) h- M: H ^4 J) c2 g delay1s();delay1s();delay1s();! x" [' [2 v' ]) n/ o2 X
delay1s();delay1s();delay1s();& ]4 z8 H3 U- Y7 K9 R, N
cxyg=1; //电磁吸盘工作
, i" b' C8 H- k5 {+ T( N sjg=1; //继电器不工作
9 T# P8 z! q- g* M+ O4 @ delay1s();delay1s();delay1s();//延时3s时间,拍照
( ]/ ]3 f- J8 R% a `" m1 T delay1s();delay1s();delay1s();
, L% ]. N# r" {) ?3 _ n delay1s();delay1s();delay1s();
. n; c4 a5 z7 U; M* @ delay1s();delay1s();delay1s();0 ^% ?9 ?4 T' e9 f+ u+ a3 r4 Z0 n
delay1s();delay1s();delay1s();7 h) h, Q0 [+ u0 ?. K
delay1s();delay1s();delay1s();
1 [7 g4 I* a+ ]# \8 t delay1s();delay1s();delay1s();* b( H; H" [, L6 ^% V+ j
/ S" Y$ \' O: v; D: q, M5 O ci=13; //舵机转过90度 ,低端& E' n8 X5 a! O7 j
delay1s();delay1s();delay1s();9 Y k! y' r+ d- I& b. ]$ T% G& b# I
delay1s();delay1s();delay1s();* @( v, U4 }5 s5 [8 w4 ]7 j' f! T2 y
delay1s();//延时1s时间,舵机转90度2 s/ `7 M* f0 H
cxyg=1; //电磁吸盘工作
e% _+ s- x- K sjg=0; //继电器工作,电磁铁得电* R+ F3 E. K% X1 ^
delay1s();delay1s();delay1s();delay1s();% r6 J; m" M, X" W- U
delay1s();delay1s();delay1s();delay1s();
E6 s" B: b0 _1 Q. ?" o delay1s();delay1s();delay1s();delay1s();
0 o- q' t* `+ _; } delay1s();delay1s();delay1s();delay1s();) }2 t1 S3 y- b. A# A
delay1s();delay1s();delay1s();delay1s();
Q: P q; T: f* M+ L! V! B delay1s();delay1s();delay1s();delay1s();; ^$ t7 a7 m [+ u% P
//延时1s时间,将工件吸起来
6 L4 h4 V# Y2 g C' r cxyg=0; //电磁吸盘不工作- S. j/ ?( {* m2 b
delay100ms();
6 [& g+ H* w* g0 ^ sjg=1; //继电器不工作,电磁铁失电1 b4 A/ r* k- a8 p0 u
delay1s();delay1s();delay1s();//延时
: q/ @ u7 Q/ I$ y# {, Q [9 z5 R o0 @1 D7 V/ Y
…………限于本文篇幅 余下代码请从论坛下载附件…………& o* E3 ^8 h& I! A( Y
( m% c V; ~2 c$ O# \" l; p
|
|