找回密码
 注册
关于网站域名变更的通知
查看: 576|回复: 1
打印 上一主题 下一主题

STC15F104E单片机使用PWM输出控制直流电机的转速 还可以做呼吸灯

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-9 09:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
STC15F104E单片机使用PWM输出控制直流电机的转速 还可以做呼吸灯
& J0 T$ D& S, j2 ?% V2 a6 ^" q. H0 ?( u+ s

$ L3 E+ O6 N4 z4 V& Y9 p3 i8 S源程序:9 ^* @9 Z8 e3 z+ u& v
/*******************************************************************************
" C. D$ P1 J: U  G3 [*                 9 x. @$ C: a4 _1 E, k* p3 P
* 51hei科技8 n; F: P6 p, X2 q
--------------------------------------------------------------------------------. y, j! W3 h- ~
* 实 验 名                 : PWM调速直流电机试验
: C! D5 v! j# q1 k* 实验说明       : 使用PWM输出控制直流电机的转速
2 X* l( G4 s5 \6 G8 v! I* 连接方式       : 见连接图4 s% G2 E: L0 F, v( s0 a
* 注    意                 :
$ s' |$ m2 d0 B5 a*******************************************************************************/* e( p" }$ }5 O* ~
#include <reg52.h>. ]; J1 W5 L8 r

" y8 S* c3 G1 j
; ~1 c; k$ @: b/ M" e* `
//--定义使用的IO口--//2 p- v* G! s: {& [! ^% x% h
sbit PWM=P3^4;
3 a# ^# `1 V* j0 p0 {7 r; Csbit ANJIAN=P3^2;
1 p7 f5 C6 H% X  \: J/ _( g//--定义一个全局变量--//
% m' u9 a' d* Z& Eunsigned char timer0;
7 `! k4 F; [1 H. t% f" t4 y' `6 hunsigned int Key=0;: q3 R) H' R7 x# ]. T: k/ d( r) F
unsigned int ZKB=0;
( f; n% x% y' `' q% ?  ?5 a8 evoid Time0_Init();+ G% P; Z$ |4 S
void Init0_Init();
7 q6 q, W% k9 Z' H$ b6 X- g/*******************************************************************************4 c; @9 _; i/ f7 i
* 函 数 名       : main6 p( r& }! g8 _9 R4 h! w
* 函数功能                 : 主函数7 V7 E; K& g+ P, @
* 输    入       : 无
8 f. D1 j& r1 E* 输    出       : 无- o  ^; z- R5 ], b+ G* e
*******************************************************************************/
5 L+ ^. |( j! a4 `$ H& C0 r3 P3 F. Q) n- i% `- b- p: K4 I, _
4 V9 {$ W6 g- m4 u# v) W1 e
void main(void)( h* _  J. b1 F
{
9 v4 w, R2 h0 F  Y+ e/ ?' Y, }7 v        Init0_Init();
  f5 Y! V$ X9 a# o1 h0 n5 |        Time0_Init();               
$ I* Q' X& i1 p  k2 v2 t, F        
5 l/ i6 @* f$ F        if(Key==4)
8 S0 G! U5 r- t; n! P( K                {) s+ ^% T7 T5 f
                  Key=0;2 U7 `" J( M6 z% }! X
                }
" [# q3 J" u6 E$ Y4 I" r) W6 ?: G                switch(Key)" P! V" f% l  E" m% x
                {        case 1:  ZKB=10;0 e, q+ r8 K$ O8 G$ e* p- R" ~& _
                                break;
6 [; \* X8 Z# S+ q% ?8 {                        case 2:  ZKB=40;
! k% g, p! m+ n. C$ N                                break;, z' H' o  P% _/ o: b) v, \
                        case 3:  ZKB=80;
" p( o8 f; ~6 Z, j% c# }                                break;9 Q1 L( ~  ~7 M* B' @* x! ]
                }        
' Q2 k) Q1 y8 V1 g) U3 z& c7 ]- B               
) T' G  |& [3 G  `1 \) y$ f4 g( a7 X$ e        while(1)
1 H7 c) V- t" X5 t( z        {   B5 d" L$ Z" j2 F
                if(timer0>100)  //PWM周期为100*0.5ms: j4 f7 h! q$ b, k  l( t$ P
                {+ v4 _/ J& x6 Z& Z4 B4 m/ `+ e' M
                        timer0=0;
! @7 f2 d% X/ d( N% Y# x                }% _- K3 W6 u( D4 V3 A3 `2 d! h2 U

3 h" {& O/ D9 t3 ]0 W# R! ~3 i; S

; o$ S- b- D$ d& D% |% v0 O: x  s                if(timer0 < ZKB)        //改变30这个值可以改变直流电机的速度; c* l5 b' l* |4 X" z* i- c, ~
                {
; A) V7 L9 |, U9 {/ ~                        PWM=1;& v; U' N* K! a8 p
                }
  O3 E9 x6 c5 V4 s9 w) e' A                else- H' W! x) ]1 r1 `4 {: G
                {7 d- g7 [! r6 Z- q1 D0 B7 w& c
                        PWM=0;
5 A/ I; W9 V& R& O% v- |" B, ]                }                4 ?3 z# A) w% i* ?% |1 t3 c1 B5 U% T
8 F% e  a9 {$ d  b. N/ b4 j
- _% o; h& d' d5 c1 w4 v% M
        }. A+ i: b* s5 V* V
        ( R" `6 X+ l2 g
0 c8 U/ o0 e: f/ L5 O" K# x. v! X

! {( Z- u5 P! F6 p8 v. m  m8 P: J }. K% w. Q- l' a7 L6 C
/*******************************************************************************
+ c/ U* e# }5 k' e# M% ]* 函 数 名       : Init0_Init()+ F: K8 x$ G+ V+ e- Y2 A( P6 I. `
* 函数功能                   : 外部触发中断初始化
1 x/ r  M6 y6 M/ l) ]  s* 输    入       : 无% p. a) L' w; m1 ]* p: h  I
* 输    出       : 无# f& ?- L2 j7 i1 s' K
*******************************************************************************/4 l+ e# x4 H, ^/ D! j; m

2 D. v5 d+ g$ f# t& V* n0 ]* G1 l
3 T' j; C; e7 E% F
void Init0_Init(); F5 \8 Q+ d- L: t' y6 s
{9 k8 V& y2 \/ L+ J) y9 [
        // IT0=0;       //低电平触发0 x- B9 V: J$ p
   IT0=1;       //下降沿触发
$ n' f. x) F, K5 a/ x$ N- r   EA=1;4 o- l* m5 O7 A8 p6 A9 H
   EX0=1;
" Y" k" \1 v4 d9 r+ _}
. ]) |+ L  K7 `; M" D/*******************************************************************************; f" ~' Q. I5 _5 K/ w' y
* 函 数 名       : Time0_Init()4 |3 i  Y* S7 o2 k9 E: V
* 函数功能                   : 定时器初始化
) D4 t7 a3 j0 R# v5 }* 输    入       : 无9 I9 S! z+ A2 T& k) f) y& |  p2 m) w
* 输    出       : 无
, V2 l4 I* L- Y, L6 n5 G*******************************************************************************/- S# J9 J" h  O+ s- I5 l

  s/ a' f! r2 ~5 h

0 `. R9 R/ j+ \2 F' Q  o8 `void Time0_Init()4 l9 V" j5 C1 u1 Z6 F# `) F" v/ y1 y
{" H- n+ Y" }; m1 N3 n
     TMOD = 0x00; //选择模式0  13位计数 最大计数8192
$ ?" E4 T: h) S1 S5 ~8 I    //TH0=0x1C;   //12.000M  预装初值" ^7 T0 \. X2 u  f
    //TL0=0x18;        / }, a. S+ o+ Z9 C; M# z$ D
           TH0 = (8192 - 1000)/32;
  |/ p9 ~/ F5 `           TL0 = (8192 - 1000)%32        ;
( i* `6 _2 w8 A" e) s, Q- B     IE = 0x8A;   //中断        
9 j$ l$ D0 l5 R' I3 M  ], ^     TR0  = 1;    //开启T0定时器
) o7 F+ r7 C; w: m% Y" t}
6 ?5 K! f( z1 D8 G% ^! A
  c& }& ~) R/ Q9 a4 k$ C( n" Y
; _5 G4 O. F6 G9 f+ W
/*******************************************************************************+ r) e$ {# t7 {8 m# Q# [5 M
* 函 数 名       : INT0
& N. i6 ~, ^+ P. l* H* 函数功能                   : 外部触发中断0的中断函数. m# R3 v& C" D* O$ a
* 输    入       : 无4 M* h6 k) f' G; L: v9 b
* 输    出       : 无
' C: r# x0 V: @" I# w*******************************************************************************/
' P, }! w! D2 P) Gvoid  counter0(void) interrupt 0  using 1; f7 t% k" l& r0 ~/ ]& i9 v& s
{. s2 ^) ?/ x, ]
  
: u3 J) n$ W! I/ q- J5 E   EX0=0;   //关外部中断$ Z; D( F3 @; K( f. i( f$ i
         if(ANJIAN==0)$ P4 k' d- `$ Z) x8 {- O3 g9 [( U( B
         {0 |2 h0 d: p* E8 n; `
      Key++;   //按键次数
" {0 U) s% M/ g+ n9 X# [         }
2 V) l5 A2 `3 z   EX0=1;   //开外部中断
* o6 W5 Q: J2 p+ Z}% }& G+ F5 K9 z/ j
/*******************************************************************************
. Z/ P% R3 L3 J1 u+ w) v7 S* 函 数 名       : Time1/ S! Q# n5 f6 s8 [6 t4 U# W' C
* 函数功能                   : 定时器1的中断函数' u% r, {, V0 f9 B. m
* 输    入       : 无% s3 D9 @: d7 m/ [: p0 z+ g$ t' A
* 输    出       : 无
0 F$ u! C. y) L9 {4 S3 T; k4 @*******************************************************************************/
8 E" {# z' `- d: i& N7 `! j3 `/ k( F) l& P- ~6 w# v
4 g5 t- m$ h/ x  T7 p
void T0zd(void) interrupt 1      //3定时器1的中断号  1定时器0的中断号 0外部中断1 2外部中断2  4串口中断
6 z3 Z$ g# T8 ?3 w$ \/ s' P: n- J{  `, R9 y( |- {

! _6 ?, [' _" J3 D1 n" _/ s8 s

5 J# z  A2 K; p  e//        TH0 = 0xFE;  //重新赋初值
* V" }6 F9 j* d( J//        TL0 = 0x0C;
' A. u" U/ G3 b: g% u         4 P7 I) @1 k/ z; Z
…………限于本文篇幅 余下代码请从论坛下载附件…………0 D. G5 a) K, r) g* o
游客,如果您要查看本帖隐藏内容请回复

9 g2 d* {+ ]+ K0 ?7 |# z. n& {  h2 U4 Z) K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-14 22:39 , Processed in 0.093750 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表