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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
STC15F104E单片机使用PWM输出控制直流电机的转速 还可以做呼吸灯. H$ M+ K9 g! {3 d, l8 \) D4 r3 ^

* T- w2 [3 Y9 r' s

  N  u" {: h# F; s( v- W源程序:
9 H. m* f0 y/ i( {7 C+ r7 ]/*******************************************************************************6 I+ _5 K* L0 H$ ?2 E! I( c8 h
*                 
& D8 W; ~1 Z2 T6 Y/ _) X+ r* 51hei科技
9 `. M; n1 J; T' `% n) e: \--------------------------------------------------------------------------------
/ H! T: i9 j1 F4 W* 实 验 名                 : PWM调速直流电机试验+ f2 q( j% F/ C* I3 m7 L- b2 t; e
* 实验说明       : 使用PWM输出控制直流电机的转速
7 F$ i& E0 L) x- H* 连接方式       : 见连接图
  b  A  H& O6 ~! W- m0 W9 A* 注    意                 : ( L( p) O: u, x% \
*******************************************************************************/
0 r8 a: X) N) ]#include <reg52.h>+ j; k" k: [% \# i) j0 q% C

4 L. x3 e  I2 Y' T

0 f3 r" c6 ]/ z9 q% K, q3 \) }. N//--定义使用的IO口--//, T, G# s2 j+ J4 j! Q
sbit PWM=P3^4;
7 e6 E3 M  q% i: K  {, zsbit ANJIAN=P3^2;
! S+ X& Y9 V& \, }$ X% V; ?; {% y//--定义一个全局变量--//
6 \" h# Z) T& c  T9 v! Kunsigned char timer0; 3 l) c, @# d3 u5 F
unsigned int Key=0;
5 u3 r$ \0 J8 n& {& f1 }* Junsigned int ZKB=0;9 j/ \2 S8 N( B  g
void Time0_Init();
! D* S& g0 B% G9 Q3 Ovoid Init0_Init();7 @( C; q8 a* A( |3 C
/*******************************************************************************
7 O" e, y8 h7 |8 X, A# |# u* 函 数 名       : main
$ T! B, `% R9 `* K5 d3 V- J8 f; a* 函数功能                 : 主函数
, a0 Q: t( |/ w/ k; l* v* 输    入       : 无
1 ]* O8 I% P/ p1 Y* 输    出       : 无
0 a$ J; e! `9 K0 ^5 L* l*******************************************************************************/$ U& u* W9 p8 Z" _& R1 g1 Z
% Q, G7 a1 k! E

. f: R8 U1 `0 j+ D* }void main(void)
: u# Y1 b4 h3 p1 v% x5 |. ^' |{7 v" F# ^; H, b# ]) h
        Init0_Init();
, P  h3 L% L# y* u  E! P        Time0_Init();                ) D% r: T0 d* G( ^/ T5 S* @, s, ^7 c
        % w: c3 ?) a" X+ ^
        if(Key==4)
7 N, R% F; Y" ?, x( y0 S1 z7 s                {
; [  P' d5 D' @3 e4 \* l3 q2 _                  Key=0;
& f! g0 I% V% d; L: Y( \. Y5 i                }
* h- v4 \& G# R. }3 A5 Q" _                switch(Key)
( L; j* P, E7 |$ O                {        case 1:  ZKB=10;
/ D' W* I. q2 y  ~                                break;& c. U$ I% t& G5 t7 I! t
                        case 2:  ZKB=40;. D# t9 ^- T+ w' ]
                                break;# a" y. w) @8 O# U  n& t0 {
                        case 3:  ZKB=80;
$ v, V; l" g, |# X3 E9 p' d0 X                                break;
' X$ H; \3 T0 o                }        
; d% u' b/ p- e- U1 C4 U5 O$ X8 k                5 V- l" u3 |$ f- U' _& _7 Q4 {% r
        while(1)
# C# p, G8 h" m/ ~& r        {
. o! a0 Q# c/ e; q1 c, C                if(timer0>100)  //PWM周期为100*0.5ms: t, a% `9 F; ^. A# F
                {
+ P* l3 [4 x1 ?5 A6 |                        timer0=0;3 `& N$ Z' G, S/ `" L0 t$ {% L
                }3 G" J+ N) a  q9 X

3 t" G* N' V! {( R4 `( m! g* O
- `+ T0 N+ x2 ~9 H9 `
                if(timer0 < ZKB)        //改变30这个值可以改变直流电机的速度' D3 k1 g2 ~! C1 o) {3 {
                {0 x) P- H5 O! M. w# F! h4 {0 a9 v
                        PWM=1;
6 }  Y6 P% |; `; |                }
% h. q& x, Z. g) z) B                else, G0 s$ a) b) ~0 i
                {1 ?5 O7 U# y- @
                        PWM=0;* P6 S( }# }' n5 R* w* p7 }
                }                5 M% Y, h/ l2 p# ~9 T$ h1 f& d
& g5 J: K$ r5 b; }8 \  g  b/ S
1 [' I! X8 q1 j; G4 k
        }9 \: g# E* C" Y, E6 ?3 o+ ^
        
1 o( n2 ?5 M8 e# K- v  ]6 e2 v/ _3 n
$ h3 s# K6 X9 a9 O- o) d9 t
}
. I) \" c2 I' |4 R, S1 z/*******************************************************************************
5 `8 S2 Y7 k0 r9 r1 [* 函 数 名       : Init0_Init()
2 T  Q: S. Z5 i1 M: ?* 函数功能                   : 外部触发中断初始化2 k+ }! N+ w1 y& o' v  B
* 输    入       : 无0 Q; w, G0 i! o. c- i7 W
* 输    出       : 无
6 q( X5 g/ f: b! a*******************************************************************************/+ B) y9 D$ `" _' P9 d7 F+ r$ d, F

% w' c) H3 d$ B. V$ [

( y# K: p" n8 g/ J) G1 Avoid Init0_Init()
  S: V, p- f7 O; r+ L4 k{: F5 S3 \$ ?& [! u  c
        // IT0=0;       //低电平触发
6 G2 a8 T5 l  e0 w   IT0=1;       //下降沿触发) |) X5 I6 W7 C; Y
   EA=1;
  W1 _; q& A3 O8 \: M   EX0=1;
" q# z5 T! Y* ~. W2 y}
2 }" ]/ p  t. Y4 F6 Q2 b( w7 |/*******************************************************************************( `2 Q4 a8 c- P* A( @, ?2 ^+ T1 D8 g
* 函 数 名       : Time0_Init()
4 }; S# u. g, x! v* 函数功能                   : 定时器初始化
( H/ }2 @' p( o* 输    入       : 无
; i/ b* g, R- ?* 输    出       : 无' o9 Z2 R$ K; O, @
*******************************************************************************/0 i/ n) `" h' h) A4 V4 x
  b* I8 ]- P  M$ {. }( w: j) M
& K! N& S' @$ K" H$ M# U
void Time0_Init()
5 H6 p# `2 B0 m: ~7 W  ~{
& E6 G8 p  R; {     TMOD = 0x00; //选择模式0  13位计数 最大计数8192
% v8 A0 I( I0 q$ ?9 {7 S    //TH0=0x1C;   //12.000M  预装初值
+ x8 h- z0 W4 p    //TL0=0x18;        " T8 V& W  F+ f! y3 Q% f3 H6 g
           TH0 = (8192 - 1000)/32;9 a8 l; n$ J1 i
           TL0 = (8192 - 1000)%32        ;1 Q7 J) j" x: b- @8 G
     IE = 0x8A;   //中断        
1 R3 u1 W& Q; ^# z7 Z0 t7 B" O     TR0  = 1;    //开启T0定时器
' m, E; S  Q+ x- o+ w2 M) t- w}
# W9 u0 K, D3 `
9 _$ J' @1 y, l  ~$ N
5 O. g" x6 V5 @" _0 h# ^4 [
/*******************************************************************************
3 P- X( S0 K  c+ h/ W7 Q. f* 函 数 名       : INT0
; M* r  R5 |, s0 G1 l* 函数功能                   : 外部触发中断0的中断函数
$ i  \( b* o/ g* B" L2 k7 j* 输    入       : 无
7 p9 E# U: S, [8 @& {* 输    出       : 无  I! l2 e& |' d1 N% Y3 w
*******************************************************************************/
% ^- g+ N; S: @& i( d+ Ivoid  counter0(void) interrupt 0  using 18 R8 y$ n. K9 B1 ?
{
1 S5 m: e& ^; J% d  
% ]( m6 o1 t: }. p. H   EX0=0;   //关外部中断
8 R! Q1 [2 ]/ S& S9 T. L         if(ANJIAN==0)
$ v: A8 u* |. `" @0 z+ ~+ ^         {
3 Y$ i) Z$ _; q0 ?      Key++;   //按键次数
: W6 R0 V. z' `- s1 W# Y         }* z* o5 @* t  p5 t% h
   EX0=1;   //开外部中断
5 A, q  d& d5 c" F' y1 `}
% {) c! e# b8 p! K  `' Y* A/*******************************************************************************
, i% j6 n2 @6 r* 函 数 名       : Time15 D' h: P. E! o
* 函数功能                   : 定时器1的中断函数
( ~# C9 ?- w% G' G* 输    入       : 无
, l+ e" z# B2 [& P* 输    出       : 无  [1 R! E: Q& c8 P4 e
*******************************************************************************/  x' F, X1 Q& g

% f/ j' q$ `4 f$ k, j8 j7 ?

# }8 I# b- d5 @( m2 C3 }void T0zd(void) interrupt 1      //3定时器1的中断号  1定时器0的中断号 0外部中断1 2外部中断2  4串口中断" X$ W! _# O1 t; i! Z1 v
{4 @6 l- h; r3 y, S0 N/ ?5 {
. Q2 v2 ]5 Z: Q: X* t
/ E7 F7 ~+ O7 S) t
//        TH0 = 0xFE;  //重新赋初值. e" Y* x. `0 x
//        TL0 = 0x0C;  E3 ~& t; J' l8 e
         
5 z! S; ?0 l9 n% B…………限于本文篇幅 余下代码请从论坛下载附件…………! [+ Z! E2 c. H( _/ y9 s
游客,如果您要查看本帖隐藏内容请回复
+ e5 D$ ]9 D0 h! e0 `/ c9 _. h7 j
- ?/ h! {0 K: {( v
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-10 14:13 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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