|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机控制一路舵机控制90度来回 源程序
/ Z! A P! o2 T
+ ?! m2 F+ s. o/ @+ B6 j1 p单片机源程序:
* m! I% A# }" L3 n#include "STC12C5620AD.H" //STC89c52系列单片机% L- o% f/ w b8 j
sbit pwm =P1^3 ; //PWM信号输出# u+ K' W0 p0 L/ c
sbit sjg =P1^2 ; //三极管,继电器 ,电磁铁: ?( J6 u$ D( T. [4 q- M2 u% Q
sbit cxyg =P1^0 ; //场效应管,电磁吸盘5 T. F% I2 ~: U
unsigned char ci; //0.1ms次数ci,总行程300度时,11次代表90度,5次代表0度5 C" _4 Q5 a# h6 l
unsigned char cishu; //进入中断次数
. b, N* i+ R$ T3 q. y1 A8 I/*******************延时函数***********************/+ b7 Y% }, h* G4 Z! j8 x6 n f
void delay10ms(void) //误差 -0.000000000002us
: @' X2 z/ R9 J k; w- L) n6 ]7 n/ ~
{
6 b7 M! V/ u% g( I2 ~( bunsigned char a,b; 8 s- b9 A, b' E# v6 i1 m
for(b=151;b>0;b--) 3 H& n" [; [- e" B
( N0 B: t' _. ~7 V9 D" `
for(a=29;a>0;a--); . `, I# N& ^$ N4 n5 U* N- b
} # p& n8 t1 J1 [' r
( i0 O5 q8 }' h }1 W y rvoid delay100ms(void) //误差 -0.000000000021us
( O# n* [9 i! t/ [3 b7 c& @0 C" G
{ + ?+ b* P1 v- S1 n# @" e) }% B
unsigned char a,b,c; $ `8 K4 R4 \! \
for(c=35;c>0;c--)
; g! N3 P) n& r7 G% B. W. A) E/ i
; k5 A) J# K1 p! r- ]4 u& E for(b=10;b>0;b--) ( L2 R! {1 n. s+ {
for(a=130;a>0;a--); : H6 |( Q0 J+ v9 b5 R0 x/ r
} , M& P7 u0 L: q5 X. j0 n) N- a
; O) m; b: Q4 s+ \6 [. t$ Q2 N* d2 Nvoid delay1s(void) //误差 -0.00000000024us
* G2 X) O* g( `' U* s# |& \
: _0 x( J) w8 d' N3 H{5 l# v1 M+ ~+ Q" D# n
unsigned char a,b,c;
6 Q% L0 M" z7 p: B6 u/ D3 N: K
7 K; x1 p8 q7 h; O/ hfor(c=95;c>0;c--)
0 n7 _8 r* }& A$ W, U p5 ?- @7 y% s! l6 D% p/ o9 @" m# a1 @
for(b=26;b>0;b--)
" ?2 G( _/ e' u4 u) B+ m
/ [4 C4 B/ }/ K7 I/ j4 k0 gfor(a=185;a>0;a--);' o2 X4 ~6 _8 ~/ G
0 v! g A* G7 v4 S+ ^- L
}
) I' A- B+ J2 Z* I6 c1 G9 U4 S- k4 r% }* \" T
/********************定时器0初始化************************/
! b7 \2 @6 X3 [8 w# R! j1 @1 J0 Uvoid Time0_Init() //定时器初始化+ A1 v/ o: H+ k$ t6 }
{9 ~3 Z! k, [/ D' G; m$ ^( F
TMOD = 0x01; //定时器0工作在方式1
+ h' a2 ], O1 a2 hIE = 0x82; //中断允许寄存器/ d# K/ t: e' X+ q, Q
TH0 = 0xff;$ f! g, F0 R* n# z6 }* v
TL0 = 0xa3; //11.0592MZ晶振,0.1ms
$ m% N$ I) K B" gTR0=1; //定时器开始4 L1 v5 }2 [9 v$ b3 r7 R8 q/ [* B
}/ Y$ L U3 V' {" g
/***************定时器中断函数*****************/
2 `/ M& p) D" t9 D) ~void Time0_Int() interrupt 1 //中断程序
+ {) X. k: n' ]% X1 K. ?5 ?{/ O8 v8 N: E+ b# M Q+ U. x, }$ M
TH0 = 0xff; //重新赋值4 l( a; f( N8 `2 v: v- [; k4 y( V. b
TL0 = 0xa3;# t! v+ r3 b7 t5 k3 ~' u
cishu++;
+ q m. G. H' q. `0 e' l' s" a2 { if(cishu<ci)/ j* } D& ~( C7 f5 ~! i% `* m
{9 Z8 S8 C; N4 F4 t. r
pwm=1;$ A8 o- ]% _0 @& q
}
( A# r3 i, _9 q/ e! D# l else if(ci<cishu<200)
[$ U4 Y8 ^& e& Y {. J8 K+ A- N3 D
pwm=0;
$ A& K3 w) i m9 ], O }! n* m, S3 K1 }3 l
cishu=cishu%200;
9 b! u8 t, C, K, y$ v/ `, \6 |}# q* w, ?7 P4 b, ^
/*****************主函数*******************/6 T4 h8 F, {+ Q3 J
void main()
" i/ t6 R# b- @* m# a6 o5 V{
0 G- o2 n$ d$ @5 @cishu=0;) _# _ c% e$ o
ci=5;2 Z ]! Y* b5 V' u0 S7 q/ u. s9 t
pwm=0;
0 L3 u8 E" T4 {' Acxyg=0;//电磁吸盘不工作
- W8 A4 i w) r4 A! Z" o4 Esjg=1; //继电器不工作* L) g$ J' `2 t- c) d; {
Time0_Init();
& m* p5 n$ }) u3 R0 b9 K+ @/ c( e- Y8 k- {0 n+ p; K
ci=5; //舵机归零
( O) n1 T8 U8 Z# X delay1s();delay1s();delay1s();( p- B' i& D W. A8 a! G
cxyg=0; //电磁吸盘不工作* d9 H" z6 Y* X O
sjg=1; //继电器不工作
& a+ r' o) x- @7 `0 v- s# R delay1s();delay1s();delay1s();
! @* k; V9 k8 Y8 u# h ~ delay1s();delay1s();delay1s();//延时1s时间,舵机归零回正0 x: X3 i- ?' k5 Y8 |
delay1s();delay1s();delay1s();2 o9 `, w7 y1 X* g6 f" n
delay1s();delay1s();delay1s();
& s N) n- l: J delay1s();delay1s();delay1s();
2 z: e% B) u* d4 G; f delay1s();delay1s();delay1s();
! M5 z. V( e4 F" U4 Iwhile(1)/ o& `, v# N* D$ _8 u
{
3 V8 V$ y" ^, i" r% t; G ci=13; //舵机转过90度
2 f! R/ {/ O+ P, a0 [3 z# N+ b delay1s();delay1s();delay1s();( N2 M& \! D9 ~0 e( }) ]. \
delay1s();delay1s();delay1s();1 ~# a9 y" E1 c; v- }( x8 g$ m
delay1s();delay1s();delay1s();; I, p- Q; ?# u$ T
delay1s();delay1s();delay1s();% M1 J* T6 P& u8 p
delay1s();//延时1s时间,舵机转90度- D+ x% F* D& ?: Y; v; o. Z
cxyg=1; //电磁吸盘工作1 q5 I( h g4 [' E( W/ d" [
sjg=0; //继电器工作,电磁铁得电
+ y7 i0 d7 @1 J- |( Z, j delay1s();//延时1s时间,将工件吸起来
+ ]7 I! h! e. L" | cxyg=1; //电磁吸盘工作
& k h! P G. E$ w5 }& J sjg=1; //继电器不工作,电磁铁失电0 C6 X8 u& ^0 o. h1 _
delay1s();delay1s();//延时2s,用来拍照" h2 Z7 D: k+ _0 M4 z% d, \( ?/ |
delay1s();delay1s();delay1s();
! S0 B+ H7 w- a7 @" U* E9 v: Y! t delay1s();delay1s();delay1s();
# N0 l6 ^" W3 t: q$ w4 Z* n delay1s();delay1s();delay1s();
, _+ e0 c& X; s' H! J6 B& b) R delay1s();delay1s();delay1s();
" p- t+ D/ U4 D3 I& q delay1s();delay1s();delay1s();4 W" O+ e$ v. N6 B
delay1s();delay1s();delay1s();
C! P* T) l- ^1 G% S/ c2 m3 s; u/ I. g+ H7 E, U
ci=5; //舵机归零,在顶上
7 e0 Z; s5 y; Y8 r delay1s();delay1s();delay1s();
9 {$ B Y( M9 N( d/ Y1 y. c: L6 y delay1s();delay1s();delay1s();; j+ d# S n( |: P
cxyg=1; //电磁吸盘工作2 s' `* u; Y4 I5 k% U, |" [
sjg=1; //继电器不工作0 V4 K3 ]: h9 B, S2 f: }0 u
delay1s();delay1s();delay1s();//延时3s时间,拍照) b1 g# C9 h; R$ j; |
delay1s();delay1s();delay1s();
+ x) K- j+ \+ h* Q- ]& { delay1s();delay1s();delay1s();
" ^4 J4 ^ R) A1 r$ @7 u delay1s();delay1s();delay1s();
0 E# v5 c( }3 g! f/ G, q- E delay1s();delay1s();delay1s();0 E3 B, l X& p: M2 H% l# i+ R) y
delay1s();delay1s();delay1s();+ v7 L& r" {5 u+ V6 B$ Y
delay1s();delay1s();delay1s();
' S- D; V5 H/ b; z0 Z9 B, {8 G0 l. i0 j
ci=13; //舵机转过90度 ,低端
3 a3 q! Z7 V$ ^/ k delay1s();delay1s();delay1s();) g; u: U/ D8 P, j
delay1s();delay1s();delay1s();
' _1 ]" D$ [ O delay1s();//延时1s时间,舵机转90度
- u9 |, F0 C) ?/ W6 l cxyg=1; //电磁吸盘工作
) H; i; f$ F3 |5 E1 ]& m sjg=0; //继电器工作,电磁铁得电
, K: ]1 w: `, T3 t' W& K' D( D delay1s();delay1s();delay1s();delay1s();
* }- ]" L9 l$ k% j/ p5 n delay1s();delay1s();delay1s();delay1s();4 ^7 w4 ]9 P" s& s* K; Z( a
delay1s();delay1s();delay1s();delay1s();/ U- ^: L: X) A3 V+ @# \7 c
delay1s();delay1s();delay1s();delay1s();, Y8 ]$ r' U. l. d B5 ?* d2 P& w
delay1s();delay1s();delay1s();delay1s();/ j1 w& b) X- Q7 s6 s& Q6 h
delay1s();delay1s();delay1s();delay1s();0 W9 o( W- q1 u O% u$ L0 S
//延时1s时间,将工件吸起来3 |' V+ E- D8 ?. Y, n" B% Y
cxyg=0; //电磁吸盘不工作
) v/ f+ X, o0 {! b8 @ delay100ms();
. r- P5 o6 h8 A: O sjg=1; //继电器不工作,电磁铁失电
6 Q1 J' D$ T3 [+ m) Q, p delay1s();delay1s();delay1s();//延时" @% X( u S8 F/ [
0 d/ F7 X' n* ^# o4 _…………限于本文篇幅 余下代码请从论坛下载附件…………6 u0 U8 Y6 O7 }4 r
7 s( S7 z2 V$ l8 U* Y! P
|
|