|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机控制一路舵机控制90度来回 源程序: K# G' `# D" G4 j
/ T" ?4 O* A$ p! s8 J
单片机源程序:
6 m/ |) Y% M6 c# z' S#include "STC12C5620AD.H" //STC89c52系列单片机
& Y' S' H; Z! K% b4 e. fsbit pwm =P1^3 ; //PWM信号输出
' {8 H6 ^* I1 Ksbit sjg =P1^2 ; //三极管,继电器 ,电磁铁9 ^+ c; X; G1 X! {
sbit cxyg =P1^0 ; //场效应管,电磁吸盘
/ ~( C9 T* b! \. \+ Gunsigned char ci; //0.1ms次数ci,总行程300度时,11次代表90度,5次代表0度! s; D3 d2 M5 R, X0 J7 f4 ?' _
unsigned char cishu; //进入中断次数- m, Y1 G V/ [3 q
/*******************延时函数***********************/
( K/ M: m B" ovoid delay10ms(void) //误差 -0.000000000002us
5 V% t5 k! y+ H: k. H% S$ l
7 Y/ X/ t6 Z4 m5 W$ G5 f3 B! h' V{
* Y. B" f+ K. @) N& ^1 m5 }# Munsigned char a,b; $ \$ U6 a: \ N- b( ^% g6 m
for(b=151;b>0;b--)
3 D& K) Z9 F% a+ |/ s7 G1 H# B& A) q
) B4 T( [0 w) f+ Q7 W for(a=29;a>0;a--); % J7 `1 K. _9 O5 J4 i' r
}
2 P& ?- @7 S# N) N L b3 \# A
Y* {% {* @8 T. j* ivoid delay100ms(void) //误差 -0.000000000021us % q7 R4 o, k' Q3 l+ c+ W3 v
0 O+ Y* q: C$ J
{ ) e* r3 j. c! m _% K
unsigned char a,b,c;
' b& C) U0 x. G" kfor(c=35;c>0;c--)
# g/ |, I7 ~$ _+ L3 I. ]4 X
, g' V/ s! F4 f2 Z! O1 X for(b=10;b>0;b--)
# ]1 H8 G6 b6 {5 u! D% Wfor(a=130;a>0;a--); z$ U& o# m5 L! p
}
4 r- J, o7 r5 ]/ i/ x1 Z! N e8 s, p! s4 h% Q$ t. p- x4 t% v) [5 c5 R
void delay1s(void) //误差 -0.00000000024us
. i6 G; x2 E. M+ d. R" W) V1 }8 j5 Z5 [) K) _
{: t8 I0 v& `5 o
unsigned char a,b,c;- N' ]+ e. q% i: x
4 W0 v: r, ~3 }3 O" P
for(c=95;c>0;c--)2 J- I# h8 m2 l& \" Y0 K9 x4 X% ^
( {) q( b7 r' ]3 Z7 n
for(b=26;b>0;b--)0 [8 {# k8 `. L& U$ B* X, ~4 u
4 p% i9 {1 @$ [+ ^# c% ?% \for(a=185;a>0;a--);
% y% L0 a& E3 o( k% ]' w5 `6 ^5 |: F& G
}
1 t: P: i0 b1 I& W' l; d, t. _# N3 P3 w Z$ _
/********************定时器0初始化************************/; m( }/ W4 J$ r" V4 T1 N8 {
void Time0_Init() //定时器初始化$ R9 v2 @8 r' S+ c2 X. A
{; M& C1 R' B) L6 e2 |, @/ a
TMOD = 0x01; //定时器0工作在方式1 , w" u1 ^7 |6 C
IE = 0x82; //中断允许寄存器
' F+ V0 J+ U/ k* k! \8 fTH0 = 0xff;
n3 x/ M! o$ `9 ?TL0 = 0xa3; //11.0592MZ晶振,0.1ms( e# p+ u1 q! E' y; |
TR0=1; //定时器开始% G7 e* s, |/ i) A- ~- g' b
}* |7 C0 }/ W) }( X2 U4 o1 R/ d
/***************定时器中断函数*****************/
2 U: G* N6 J8 n. rvoid Time0_Int() interrupt 1 //中断程序
4 X) u5 n9 X- S+ m& ^4 Q{
. R1 m/ ?% J. J$ b: _; f: PTH0 = 0xff; //重新赋值
- C$ P+ q( v4 O9 m$ h/ x4 |TL0 = 0xa3;0 Z( q7 W, I& n5 y( X0 o
cishu++;* e+ { l3 v# Z& O- q( n
if(cishu<ci)6 K- ^- Z6 v' k, m* Z
{8 G$ P& [. v$ p
pwm=1;
5 V3 G! T2 G+ o# O }
/ O2 B( l: ?# @- s else if(ci<cishu<200)
9 m' h- \7 ~* F$ C' ] {% d: B* z) B; S/ R' {
pwm=0;
' ?3 P. I7 _! N }9 `* |0 M4 K* K8 f- x$ _1 w
cishu=cishu%200;
1 t/ @6 ^) }; Q5 R# y}1 |& p/ M: F0 z# L2 B: u
/*****************主函数*******************/* y* v+ W# d- Q) P
void main()4 ]$ X' ?& ]8 v2 f" Q
{( Z( X: f0 T+ Y' u
cishu=0;
6 B! p8 U: Y5 _6 B/ ?* u) yci=5;$ i b v! Q1 e& [- \0 X
pwm=0;( Y' i, Q) A9 E4 M- Q" w7 k0 h( H
cxyg=0;//电磁吸盘不工作
; \; m2 ~7 ~) K. Rsjg=1; //继电器不工作
' o; k% s1 B( N4 [Time0_Init();
! E: A8 p% h+ V& q, @, T7 e+ h- G% u I: }3 x: S2 B
ci=5; //舵机归零+ g0 K! G( g9 @
delay1s();delay1s();delay1s();# ^( k8 `: C% R( d& e3 |# u
cxyg=0; //电磁吸盘不工作0 j! r2 X$ R& s2 j
sjg=1; //继电器不工作, B) Q$ \5 T+ c; Q8 M" F& {
delay1s();delay1s();delay1s();
6 f z% x# Y$ O k delay1s();delay1s();delay1s();//延时1s时间,舵机归零回正
# \& c8 R/ R# h' E6 E' J delay1s();delay1s();delay1s();
- v( o- |2 u2 w! Z" d- M delay1s();delay1s();delay1s();
4 ~" S) z" t: L8 a2 U delay1s();delay1s();delay1s();8 N/ o" ?, K5 x% _( t# O
delay1s();delay1s();delay1s();
% X* _6 F! E* l6 B* H2 c* U; s# c* Pwhile(1)
7 ]& x/ V8 F) d: v5 N! ?8 @ { 2 D8 w* q+ V, ?* P
ci=13; //舵机转过90度4 d q- J! I. L$ v
delay1s();delay1s();delay1s();
# i& X% Z( o0 p, p2 w1 O3 ^9 V7 j delay1s();delay1s();delay1s();
6 r; E- c8 P9 s! x$ z delay1s();delay1s();delay1s();- _ m8 k. c0 l( G1 f ^* g& y
delay1s();delay1s();delay1s();
2 L/ ]. Y0 P) T0 z* k0 M delay1s();//延时1s时间,舵机转90度( K8 L9 R e" k
cxyg=1; //电磁吸盘工作
: E0 x: _; [- @1 i, J sjg=0; //继电器工作,电磁铁得电0 G4 P/ q3 a2 s
delay1s();//延时1s时间,将工件吸起来0 c) v& R v5 i
cxyg=1; //电磁吸盘工作" G6 G3 i+ B% p
sjg=1; //继电器不工作,电磁铁失电
# x/ t; ~- q2 c" o& Y# I delay1s();delay1s();//延时2s,用来拍照
+ ~/ v A2 c$ t F6 R# W delay1s();delay1s();delay1s();& A& g/ O4 p' [( K9 P9 |/ r
delay1s();delay1s();delay1s();7 C: l' J& W) S$ X( |1 U4 ~/ E( C
delay1s();delay1s();delay1s();
+ t! B9 V4 M% ~& E8 | k6 E delay1s();delay1s();delay1s();3 N) O, Z/ A2 V& y
delay1s();delay1s();delay1s();
6 A$ j5 q- ^1 A/ k/ E. j- } delay1s();delay1s();delay1s();6 }. R" g, z2 f; o/ |
$ K% s0 h- o1 B! ~% H3 j6 ?+ p
ci=5; //舵机归零,在顶上- g, ~( C6 L7 M9 |
delay1s();delay1s();delay1s();/ ?9 D3 E, o7 ]7 ?* G
delay1s();delay1s();delay1s();
1 C. w" Y- ~! ]( Y cxyg=1; //电磁吸盘工作 q8 a) t9 J/ o4 Y" t4 T7 i! a& e% h
sjg=1; //继电器不工作9 J& e( f, c1 ~+ O E. S0 S
delay1s();delay1s();delay1s();//延时3s时间,拍照8 h$ J; F3 U7 P; q% C
delay1s();delay1s();delay1s();2 A" ~5 s" M+ R
delay1s();delay1s();delay1s();
8 c2 t: }5 B/ ]" B5 N$ q! b9 b delay1s();delay1s();delay1s();
# n9 _ b# E }7 i8 G delay1s();delay1s();delay1s();9 E. Q( ^ _7 ~) L1 u3 ^
delay1s();delay1s();delay1s();
" `* [! T- X+ p5 }- j; w delay1s();delay1s();delay1s();
' F& O5 P3 e9 [/ [* |0 \. u
- z/ w3 c/ R: q0 ? M ci=13; //舵机转过90度 ,低端" M) b/ h( t3 [& \3 Y+ {0 d6 c7 e9 j
delay1s();delay1s();delay1s();0 R- p" Z2 n. S4 b, b* |
delay1s();delay1s();delay1s();7 L. ?1 G1 ?5 \
delay1s();//延时1s时间,舵机转90度
& i$ _1 b1 z. i+ H: p8 E1 G cxyg=1; //电磁吸盘工作; F! d4 \. u9 W0 n A
sjg=0; //继电器工作,电磁铁得电/ @# x R1 P L; ?( X
delay1s();delay1s();delay1s();delay1s(); Y0 D& ]* Y% i% K" M
delay1s();delay1s();delay1s();delay1s();
2 K( H1 j; w3 ]& l I/ |2 I delay1s();delay1s();delay1s();delay1s();
* ?! k" r3 k4 M. @ delay1s();delay1s();delay1s();delay1s();
0 _5 H' x" c$ E delay1s();delay1s();delay1s();delay1s();
" }3 H% l* s: v2 v. G delay1s();delay1s();delay1s();delay1s();
& V: _9 B7 ?3 ?: k! J8 i //延时1s时间,将工件吸起来% I2 w; T, Y/ l- e3 ~! G
cxyg=0; //电磁吸盘不工作
) _+ {/ T4 K3 Q( c5 n$ S0 B delay100ms();
! c/ z: ^9 A& u- w! o sjg=1; //继电器不工作,电磁铁失电+ e" r1 X- e* G8 k* ~$ g
delay1s();delay1s();delay1s();//延时
) v6 ^+ |; {# J5 X0 J
% d9 D# ?& R5 v; r: F…………限于本文篇幅 余下代码请从论坛下载附件…………
1 z) h! b9 I2 S, E2 `; V/ N' k! p1 C# g* l) Y
|
|