|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机控制一路舵机控制90度来回 源程序; M7 X+ W: D' v& b( ]
. i8 s' V3 s5 c4 m$ ~单片机源程序:
. M. n9 ^/ Y% S$ u; N& O#include "STC12C5620AD.H" //STC89c52系列单片机" h0 w4 l5 b+ }# ]' g1 ]+ p$ Z/ M
sbit pwm =P1^3 ; //PWM信号输出9 N# p, d; f, w& t6 t$ u& F
sbit sjg =P1^2 ; //三极管,继电器 ,电磁铁' M" g7 `1 z& V+ ]
sbit cxyg =P1^0 ; //场效应管,电磁吸盘
: z! p5 k4 @. a8 Uunsigned char ci; //0.1ms次数ci,总行程300度时,11次代表90度,5次代表0度- K# r+ v8 c1 T3 w# }9 P5 s
unsigned char cishu; //进入中断次数
1 _% ?! r- p5 D; `) b/*******************延时函数***********************/
. Y0 v, T- o% fvoid delay10ms(void) //误差 -0.000000000002us # s- o1 y4 i3 ?
- e! y1 i) i) c- l, z2 M{
R1 |- i5 E" m, A7 vunsigned char a,b; 6 C# J$ c* R6 R' N$ H
for(b=151;b>0;b--)
& X5 B; Q$ X- z+ G6 a( a6 j4 q3 h" i; K" x9 B7 m y. T
for(a=29;a>0;a--);
3 u+ S& G+ N$ Y& m' K} 9 ^0 V2 j9 u! j; f6 v
/ ^+ I5 b- U- @# v/ |8 Q
void delay100ms(void) //误差 -0.000000000021us
( t& h, s$ N2 d. R: _$ }( K' Z7 ]
! |% T0 w6 E) d; o% R& j% C" s* b{ 6 {1 a0 Z" b6 X! T! Z
unsigned char a,b,c;
7 r2 S* X. m* h% Z, C+ a+ Ofor(c=35;c>0;c--) % ]" w) w1 _! T1 ^' X; X
& [+ d' |' N5 _3 i( B' ]
for(b=10;b>0;b--) 9 w; W3 H) u0 C+ L0 F. ]$ V
for(a=130;a>0;a--); + N. X# g5 O* s& g, H6 c) I" D& c
}
r, n' W) I; s. F% _/ z
+ _. \# d7 [* h6 r' S v l! dvoid delay1s(void) //误差 -0.00000000024us
" q- w4 L" g% n4 R6 p% q) d- u+ E& R, d. @6 I: C
{1 E7 V. h3 x: p1 w4 b( `
unsigned char a,b,c;9 \& a. X1 q$ X2 ~9 V% ~- @
: M$ z4 t. D8 E; k+ U+ F/ n
for(c=95;c>0;c--)
- B8 }. Z# v# {/ `3 [0 I4 [3 i3 g t7 A: {/ B" T- b" S
for(b=26;b>0;b--)8 G6 l+ O; ^- v; K. p# I
+ x; T: }7 q: F$ v
for(a=185;a>0;a--);
C2 X4 X$ S( ]5 g% ]
& j/ \6 B4 ^" l) M5 L}
* {8 u N- x I; N* S! L) q+ ~! x, N8 I
/********************定时器0初始化************************/& M0 J- O/ R- m% k
void Time0_Init() //定时器初始化
$ M* @1 q" O7 s, N0 B/ T{
) A. L. n: a' l; gTMOD = 0x01; //定时器0工作在方式1 3 Y* I% E* K; u2 g; X) s5 i
IE = 0x82; //中断允许寄存器
' P9 X- p i. e0 kTH0 = 0xff;1 `# V/ @6 d* G, S, C+ }
TL0 = 0xa3; //11.0592MZ晶振,0.1ms
$ R, t3 c% L+ U' g% [; \TR0=1; //定时器开始# k2 F2 @6 d$ ]+ B
}
) {: N4 ^: o! s# u/***************定时器中断函数*****************/
& s6 v2 \5 F; }$ M7 D3 Fvoid Time0_Int() interrupt 1 //中断程序
, ^+ O9 k9 V* o f# l8 m5 d{7 w1 a. g: X, C; Y9 B( Y6 v: r v! p
TH0 = 0xff; //重新赋值
! j# C6 H5 t6 w T& QTL0 = 0xa3;+ H( @% z% d% `+ J2 t9 _6 j
cishu++;
1 C; A0 h6 ^$ H- T if(cishu<ci)7 `% g E+ j. }0 {- h# |
{3 a2 S* d* k" K* s
pwm=1;( R5 E: L5 W: ?% R, W# i6 S
} , B6 x, f2 G! i# c8 E" g' h6 N
else if(ci<cishu<200)* t* l. U. L' y3 }
{( B8 Y% n. \: Z
pwm=0;* i' H1 C8 p8 K* \& ]# B# s) e9 v
}
, n/ [, d2 Y) [' O6 Z8 ? cishu=cishu%200;
2 _0 A. h, u( i7 O}* a3 `) Y! u% N& V
/*****************主函数*******************/# m8 x. p/ [8 ~) k8 o4 T
void main()
8 q2 R' e) ]7 p7 e{
7 V+ C1 n% d3 A& D E" ncishu=0;, G9 I4 i' z. L6 ?+ R( ?
ci=5;
1 }" \' A8 }! L# [; F/ xpwm=0;
/ H1 U; U0 x- Ucxyg=0;//电磁吸盘不工作
; B8 m U5 `2 H- a$ Y! osjg=1; //继电器不工作 }5 M$ _6 N; r
Time0_Init(); ' [9 ^+ H: ]' P; l$ y8 V5 g* i
" n9 f! ^2 V! ]3 v K" v
ci=5; //舵机归零
* ~) ^) t; w1 j- a delay1s();delay1s();delay1s();
+ g3 c% q7 o# m5 Q) S( \ cxyg=0; //电磁吸盘不工作
9 k; L0 M! [- Q' S" k8 ^1 \ sjg=1; //继电器不工作6 U n/ m" z- x3 k! D
delay1s();delay1s();delay1s();) g2 m) w! p$ {* f7 y8 |% C
delay1s();delay1s();delay1s();//延时1s时间,舵机归零回正
4 B& Z/ A. U1 F4 }* Y4 s delay1s();delay1s();delay1s();9 y" |4 {, D" A4 U; Z! [5 R
delay1s();delay1s();delay1s();4 P6 b8 X& ^# r# V* M1 X" {
delay1s();delay1s();delay1s();. W# R5 x. K' v/ ^* a7 _% ]
delay1s();delay1s();delay1s(); - j9 f- d% `3 y! z
while(1)! |) r$ b- \: Q% a: w# Z' j
{ ' m6 K2 D& Q7 f: v5 t! h
ci=13; //舵机转过90度
, X* L) j* i2 O7 P: H( {* N delay1s();delay1s();delay1s();' d$ l6 Y( Z4 k* M1 O
delay1s();delay1s();delay1s();4 i( ^# @' a3 |0 s: @% D" G/ v, {
delay1s();delay1s();delay1s();0 `) D7 C! n! r: s- Z+ @
delay1s();delay1s();delay1s();) D b8 Y7 Q+ r# I \5 D4 E
delay1s();//延时1s时间,舵机转90度 K4 K- i% S4 N9 Y# Y
cxyg=1; //电磁吸盘工作
! B9 R/ B8 H0 M+ V; N8 B. E sjg=0; //继电器工作,电磁铁得电
' s# ^8 d* z( G- M/ R1 z7 D delay1s();//延时1s时间,将工件吸起来( }9 r4 ?8 ]5 O
cxyg=1; //电磁吸盘工作
! x. Z0 w! m0 v sjg=1; //继电器不工作,电磁铁失电. \, Z1 b7 A1 [# @! V
delay1s();delay1s();//延时2s,用来拍照
4 ?, \3 ?6 Y: |+ t2 l6 N delay1s();delay1s();delay1s();
$ @. ?+ [1 h6 }+ C$ s delay1s();delay1s();delay1s();2 D! G" z1 F8 L, g' k
delay1s();delay1s();delay1s();: ~+ U" @; D! e: A5 ~0 G w
delay1s();delay1s();delay1s();. I# u/ D: |$ ]6 G$ o
delay1s();delay1s();delay1s();7 ]1 c1 x& _' j6 `
delay1s();delay1s();delay1s();
6 y+ h8 r0 \. X* T0 Z7 ^ V; u- \4 r& O, y0 u% }9 a
ci=5; //舵机归零,在顶上$ i- ]7 l, E9 R R1 U+ v
delay1s();delay1s();delay1s();
/ S5 b+ v: d2 U9 d0 M delay1s();delay1s();delay1s(); y5 r- L2 {) a. p1 ?
cxyg=1; //电磁吸盘工作
$ R, j+ `$ X9 ?/ ^" h1 b1 o! n1 ? sjg=1; //继电器不工作2 ?+ Z0 _: F: ?% N9 E2 b1 g
delay1s();delay1s();delay1s();//延时3s时间,拍照% D: M3 I8 b$ c. T. N& B+ E4 ] p
delay1s();delay1s();delay1s();( U0 k3 w! u! M- Q
delay1s();delay1s();delay1s();
* y4 }& G! A* l& a$ m: e1 D [ delay1s();delay1s();delay1s();
+ ~! C( E2 f0 x delay1s();delay1s();delay1s();
; w4 s9 e1 q# O, m delay1s();delay1s();delay1s();
3 ^( l/ d6 `9 ` delay1s();delay1s();delay1s();9 ~. E4 k" P' y2 V! {$ _( `
7 X/ \! R4 E" j ci=13; //舵机转过90度 ,低端$ r7 ~( r) K$ ^7 `% B+ L8 B
delay1s();delay1s();delay1s();6 j4 [- B8 d+ T5 l- P
delay1s();delay1s();delay1s();
/ x o( B, z& S' L delay1s();//延时1s时间,舵机转90度
3 ~' F: ~( Q& {" I0 X- V cxyg=1; //电磁吸盘工作
6 }2 D0 t+ d# L3 s/ k: B0 ?1 J7 ~ sjg=0; //继电器工作,电磁铁得电/ {2 j5 o- u( _. o! D( @+ E% y
delay1s();delay1s();delay1s();delay1s();2 l& L+ M6 X/ z- t5 N j* n# q
delay1s();delay1s();delay1s();delay1s();+ x0 N$ [' d c2 e* r' \3 E
delay1s();delay1s();delay1s();delay1s();
: }0 O) N! |* p6 h. W3 _8 C delay1s();delay1s();delay1s();delay1s();$ g* F# O$ F1 w: D4 K
delay1s();delay1s();delay1s();delay1s();
* n5 h8 F, ~ Q5 |1 X delay1s();delay1s();delay1s();delay1s();
& K4 c% ^6 V c' Z //延时1s时间,将工件吸起来' S: n& @ L8 i$ ` a2 y+ L; o* D
cxyg=0; //电磁吸盘不工作
( {' D6 y$ W: O& t$ c& l delay100ms();
# V; j1 n$ Z* G( D sjg=1; //继电器不工作,电磁铁失电
0 ]( U, t' C6 ?1 h delay1s();delay1s();delay1s();//延时
- \- {+ |- I* X9 N6 R7 R) f/ D4 u6 \5 _0 m9 X& }2 Y( a
…………限于本文篇幅 余下代码请从论坛下载附件…………. X) g% s3 h% K) e
0 }# g! t+ l, r2 Y0 l- ~ H/ F |
|