|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机控制一路舵机控制90度来回 源程序
" l) z, p# u& U+ o
" s, r3 e" C! n; z y1 U& d单片机源程序:' f9 D6 E9 [) f/ h* b
#include "STC12C5620AD.H" //STC89c52系列单片机1 d4 I$ Q, w" `" O9 g* t
sbit pwm =P1^3 ; //PWM信号输出
: Z. H |3 p2 [/ E' W$ F+ csbit sjg =P1^2 ; //三极管,继电器 ,电磁铁9 p* {+ w& {& k
sbit cxyg =P1^0 ; //场效应管,电磁吸盘6 d* N# e( t" _. {2 n/ [! t9 h
unsigned char ci; //0.1ms次数ci,总行程300度时,11次代表90度,5次代表0度$ v* C1 B- Q4 |9 [+ V2 P7 c2 Y
unsigned char cishu; //进入中断次数& v% b9 H& j6 L6 [3 [
/*******************延时函数***********************/
. n/ ?& x3 g4 K/ c# g4 b- d3 Avoid delay10ms(void) //误差 -0.000000000002us
* @# ^' u( x5 B$ o, d' `1 R; [: U( O/ ?
{ ( a3 T# z# ~2 x* h, o
unsigned char a,b;
, a( P/ b7 {( m( h7 S7 K xfor(b=151;b>0;b--)
3 n& _. Y/ F( h1 ^
' F: d' E3 U) g7 B; A9 y for(a=29;a>0;a--);
- z6 D4 J' ^2 M! a/ k; D. Q}
3 O1 i0 a0 c! x$ ?
! g/ i2 `- s1 q; lvoid delay100ms(void) //误差 -0.000000000021us ' ]4 C. m7 S3 A4 H) H# q' @+ D- O
& B- _1 r1 p0 f7 b% S, B5 i{ % J) x6 w6 c( m
unsigned char a,b,c; 1 i t g9 }7 ~% S
for(c=35;c>0;c--)
% t2 u' I: q: d7 S
6 S3 u( A0 ?/ k! @+ K for(b=10;b>0;b--) ^ k/ A; V- H U
for(a=130;a>0;a--);
& b! O! q+ _- F8 u. h& e& F# e} / H1 _& K! T& n3 H
; \! g! Z* F T" v) e
void delay1s(void) //误差 -0.00000000024us v% R9 I8 E; d5 S( K
: h% N: s0 Z. L' E( O{/ \& T1 Y' x- r1 ~3 [8 |
unsigned char a,b,c;
! m! R$ s: h+ E0 Y8 Z( _. C7 F6 }/ P$ i1 r" w0 f6 Y. y# D
for(c=95;c>0;c--)
/ ?/ U0 ]) c! {" u* m* s) I
2 B, F z$ e% F q7 @0 A2 mfor(b=26;b>0;b--)! B4 t+ G2 W' p9 R; }# z* _# ?6 r
4 L7 C. b! _; C# j1 H& T
for(a=185;a>0;a--);
: _' P9 w6 g+ Y: |, ]) @, P% Q! _6 r2 _8 w; k% e9 W
}
1 n# Q! k7 \3 W; V! x5 G# r& N. w
/********************定时器0初始化************************/
% f N. }( G, e9 D8 y: g1 w% p' Wvoid Time0_Init() //定时器初始化* R3 |, `4 Y) W7 ] `
{
4 U' D Q( K, Y. ]TMOD = 0x01; //定时器0工作在方式1
' l+ l% s8 h9 F9 D, C, WIE = 0x82; //中断允许寄存器
0 _! B/ l$ z8 E' oTH0 = 0xff;( j' o( Q0 X6 w! z7 O
TL0 = 0xa3; //11.0592MZ晶振,0.1ms8 X$ y1 d6 y6 n
TR0=1; //定时器开始& M! O0 P. @- ]! A8 x
}8 o9 w- A" [% z
/***************定时器中断函数*****************/
! r; J) ^) ~% Z' G% N* i7 Evoid Time0_Int() interrupt 1 //中断程序: A( O/ y" i( b3 ^ H! B2 Y- m4 @" Z
{2 p! T' C: ^9 `1 [
TH0 = 0xff; //重新赋值
7 B0 \/ r2 F' p- cTL0 = 0xa3;; A# ? k+ z- W) Z( p0 w! a0 R
cishu++;
9 N" [0 r! W5 l& j if(cishu<ci)
% a! b8 R1 P/ p. B {2 U0 S6 C) {/ A$ g7 j3 n
pwm=1;
9 a, k0 T. A' M& u% c } ( O# G Z' Q- M5 G! o3 {3 o& a
else if(ci<cishu<200); t7 `( b! G t4 {! O
{7 i4 c. K7 _4 {
pwm=0;" z% E- |" A% B/ ?5 |
}6 ^0 H" v- U1 P2 y
cishu=cishu%200;1 v! y3 i3 W/ x
}* p( p, y9 j+ g; H
/*****************主函数*******************/ b4 r! K9 L- ^3 O. m
void main()* c" i3 _" N4 O+ q
{2 V3 f7 K; ^, x
cishu=0;
' A0 s4 B& r4 E% I( N7 Oci=5;
7 q& t7 e; H- t4 n" n, {' apwm=0;
' J) o9 G# ^4 Y* jcxyg=0;//电磁吸盘不工作. @3 y( y7 w2 K/ [: r8 e
sjg=1; //继电器不工作2 H" B% ~' a; S+ W0 q* n9 r d
Time0_Init();
) x$ S0 D' q6 s+ F3 E$ S; j- Y! Q- E2 |4 w; B5 p
ci=5; //舵机归零
3 ^+ a% A. |; S! ] delay1s();delay1s();delay1s();6 E! Z1 N) A8 h7 D4 z
cxyg=0; //电磁吸盘不工作 _; ?! S/ M1 _4 G. ]
sjg=1; //继电器不工作, Y5 j# u, D( o( D: |% m( p
delay1s();delay1s();delay1s();
; \* s, ^% I- l! s delay1s();delay1s();delay1s();//延时1s时间,舵机归零回正4 }# ^& D+ J+ A0 b
delay1s();delay1s();delay1s();
) S0 K* O% F9 o! b delay1s();delay1s();delay1s();) O7 e8 O A% a. k; s
delay1s();delay1s();delay1s();
# u8 e# f& m0 S* J, ]4 p delay1s();delay1s();delay1s(); ; [& B* Q, Y+ ]5 }1 A
while(1)
6 Y' H: t) o2 V2 `. p8 A, o {
$ {% |( f0 ^# J% M" v) m8 Z# ` ci=13; //舵机转过90度
, h& @2 E# J4 j6 Y. T5 ]; Y delay1s();delay1s();delay1s();
6 s; V3 G7 \+ `# Y5 {1 @( G delay1s();delay1s();delay1s();9 Z0 T2 ~8 ^( B& O& ~* \' B
delay1s();delay1s();delay1s();
) t9 g( q% }3 I delay1s();delay1s();delay1s();
v% i t; J, D- S6 I( \# p+ T delay1s();//延时1s时间,舵机转90度8 ~) s% P- I0 ]+ z: `( M
cxyg=1; //电磁吸盘工作3 B8 ]) D! d- Q" o
sjg=0; //继电器工作,电磁铁得电
$ n I- c' i" i; _) Q- G5 p" A# c delay1s();//延时1s时间,将工件吸起来4 H, o. N' P/ [, Z% H+ p2 N
cxyg=1; //电磁吸盘工作
8 S; V( _$ ^; i) C: I% q" x sjg=1; //继电器不工作,电磁铁失电
! z1 @7 c6 q, G) Z delay1s();delay1s();//延时2s,用来拍照
) |; G2 j8 w9 s delay1s();delay1s();delay1s();/ c) Q7 ~, X# p& W
delay1s();delay1s();delay1s();5 o$ p- X* z- X: k* b
delay1s();delay1s();delay1s();
* j/ U7 }" P! _& ]4 m delay1s();delay1s();delay1s();4 B/ R [! J# X" d/ C
delay1s();delay1s();delay1s();
( _/ i. g! U8 g8 i( z. K delay1s();delay1s();delay1s();
; a. r$ ~9 C# ]+ a3 M% i
7 H- @# }; f- e ci=5; //舵机归零,在顶上
' ^5 P! G. u; N3 k delay1s();delay1s();delay1s();
2 V( M* `4 c) f- E' v: U delay1s();delay1s();delay1s();
/ E- {8 k2 j, w0 I( D0 C cxyg=1; //电磁吸盘工作6 C1 {% R1 }- f' m1 |) F' z6 ~- ^
sjg=1; //继电器不工作- d( ]5 n( m$ f; O
delay1s();delay1s();delay1s();//延时3s时间,拍照
r# g! N6 n) {! o0 I. U* J delay1s();delay1s();delay1s();% R3 A1 p w' |' Z$ P& c5 D# _! u# _
delay1s();delay1s();delay1s();
8 Z* e8 _* `3 }( o- n5 Z0 l. H. e delay1s();delay1s();delay1s();
8 l A% ~) H3 o/ p9 f0 `# N5 O delay1s();delay1s();delay1s();# ^& `0 }- |0 W5 b$ }) I
delay1s();delay1s();delay1s();& Q2 e& X) \& F
delay1s();delay1s();delay1s();/ Y- F6 \9 ]; h
" C! I4 D6 V# V* r" Y+ o% o% @
ci=13; //舵机转过90度 ,低端
8 B+ e' f4 b4 M$ S) T6 i delay1s();delay1s();delay1s();
& y: ?8 N- _- Z* T, p% L delay1s();delay1s();delay1s();6 d: c$ K% F4 W0 B5 Z/ a- u, N
delay1s();//延时1s时间,舵机转90度
# @4 ?' h2 f2 N+ n" a" r cxyg=1; //电磁吸盘工作. Y1 I% ]' C; y# c% ^
sjg=0; //继电器工作,电磁铁得电 S" B4 R+ I3 G
delay1s();delay1s();delay1s();delay1s();
! A8 x: F2 q& @3 m, r8 R2 Q delay1s();delay1s();delay1s();delay1s();
7 i6 O) f7 s& R6 X' \ delay1s();delay1s();delay1s();delay1s();/ s- _3 ^( a7 y! N, S" |4 h( [
delay1s();delay1s();delay1s();delay1s();1 u5 C; y: o% q: j1 o
delay1s();delay1s();delay1s();delay1s();
9 c" U2 u! d$ J) J: ]7 ? delay1s();delay1s();delay1s();delay1s();
1 N, _8 r" E. D7 Q, } { //延时1s时间,将工件吸起来9 S0 l2 H' Q! |! z/ e
cxyg=0; //电磁吸盘不工作- g# X( v. d8 }( l
delay100ms();
! Z- F0 t' Y, }8 ^. ]$ f& a4 \ sjg=1; //继电器不工作,电磁铁失电
! H p+ Y6 x) Q, _/ P3 I0 z delay1s();delay1s();delay1s();//延时
$ a5 b7 `$ O J! S5 m! k) T* Z8 Q6 ]2 Z8 }: P
…………限于本文篇幅 余下代码请从论坛下载附件…………
/ G% ~# C- P" D4 q* R5 E5 b) {) q( C5 t9 G @. M
|
|