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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
STC15F104E单片机使用PWM输出控制直流电机的转速 还可以做呼吸灯
9 ^! N* c8 H+ n8 D
$ _$ ?4 ]4 A, O7 u* [7 l7 f

6 a/ D  E' }: q源程序:/ G8 m' e% S/ |5 W* d
/*******************************************************************************; l2 D3 U' b; @
*                 
: z( a" a  l) H( ~9 ^* 51hei科技
- \+ ^( x6 i5 J- [* ~--------------------------------------------------------------------------------" k/ z* h7 P8 V2 Q6 O/ I0 l, N! Y
* 实 验 名                 : PWM调速直流电机试验
  x. e* }- ^% ?1 o* 实验说明       : 使用PWM输出控制直流电机的转速
- @7 M: X4 u; s  \* V- Z! }* 连接方式       : 见连接图
0 o$ a0 @2 g) @& f$ k# [* 注    意                 : & h+ y# ]4 C! ]( b1 L* U4 ]# p
*******************************************************************************/, I7 Q% c, z' W& z$ ?2 K
#include <reg52.h>
8 Y: V- l7 G/ p8 O
3 J# U5 U, \( v; ~- q9 W: V: F

/ t2 i* x5 A( E! o% c) q+ A4 |//--定义使用的IO口--//" z. n. P/ X9 ?% \. m
sbit PWM=P3^4;
4 \8 |# t9 Z7 K+ gsbit ANJIAN=P3^2;; M2 ~4 M2 {  [( n* F
//--定义一个全局变量--//
* r% }' L2 x$ R8 E  U; }unsigned char timer0; ) f. @8 k" w1 ?1 `6 _6 `1 S) K
unsigned int Key=0;+ e$ h5 t4 q* l7 G
unsigned int ZKB=0;
$ s# k0 Z( J3 W; \* @void Time0_Init();
5 `7 L3 X4 T' ^void Init0_Init();
% L% d" D) ~: e0 Q) Z" X/*******************************************************************************$ N& Y% K' S5 n  d8 n( T0 b
* 函 数 名       : main
. w5 o+ K4 ~& s! |6 K5 ~5 Y( \% W* 函数功能                 : 主函数2 n8 H9 [3 O- K& R" c" d8 A6 l
* 输    入       : 无5 q( ~4 M( ~1 V# B+ d( `$ N! Z. [: l; x
* 输    出       : 无/ w' I" t- a# l' ?6 n
*******************************************************************************/
3 O& P# h. Q. ^
& u. E. J8 x" u% n4 j# f# r; {2 t

4 p) b8 K5 @7 _: |void main(void)
+ `2 f7 _- l; u2 y5 h, J{
* G9 J( h  o8 W" j' s6 c: Z        Init0_Init();# K0 D/ n3 O3 P: \, W1 G& X+ N
        Time0_Init();                4 E- j) \0 P! y" f1 B2 |4 v) j
        
3 t4 b5 p- [; T: O9 S        if(Key==4): R9 r* ^7 o8 A* D. o% m( x
                {2 ?- [9 ]  E1 [% J1 ^# Y3 p4 i* e  G6 v
                  Key=0;
( k% j2 P" b+ ?  q  u                }9 \' {' H- n% k  x) L; s
                switch(Key)8 H% o) J7 u4 I; ?+ S0 O
                {        case 1:  ZKB=10;# W$ J0 B2 G1 }8 l8 t; F& G
                                break;
3 ?" L; I4 ~% u9 _                        case 2:  ZKB=40;
, M: Z8 P$ ^8 D! M2 n5 [( l2 Y0 ^6 Q                                break;
- N7 {8 c9 D9 f; [* c, l                        case 3:  ZKB=80;0 q  m" ^# }* g: _; B! N
                                break;
5 R: |8 C# J' z1 }                }        
  m, G" U- i2 J$ K% n: L               
! F! R0 S/ h* v        while(1)# R! h: V+ O! h9 D
        { / y0 }: \% \0 l# F: F( R
                if(timer0>100)  //PWM周期为100*0.5ms/ ]. }; ?' \* }* P7 i0 H
                {( b2 L4 Q! G, u3 g0 _
                        timer0=0;- H: @4 k1 @/ F" V- l
                }- ?$ B; e% V3 C3 ?! R2 e8 J

8 M; U7 z& Q9 L* `

: g! S- U- y: _4 m0 r                if(timer0 < ZKB)        //改变30这个值可以改变直流电机的速度
5 @) N3 s6 ^* ^  y% @- P0 o/ m                {
' ]' L- n0 ?: n3 v! @/ A                        PWM=1;
# |9 G' f" O5 A/ I9 C                }- a9 t7 J$ H$ \. K; f2 w1 _
                else
% T2 A) _) _7 _, @                {8 L% v- t- {( d% |! a
                        PWM=0;/ u! q0 `( ?* J8 f; w
                }               
  ~: e1 }0 x8 ?) X9 t& t  {3 H) _/ d

6 Y9 r, Y. l# i        }
% ]$ M: j. n# c% V3 l; M1 E% D        : y! E* A  [7 k" W, l

, S# t  y# Z8 c+ t
* L4 z- A! G6 X9 |$ g6 G! a# M
}
, }- _5 X8 {( N  }, a2 C" m/*******************************************************************************
4 H+ M# x/ w  c& [3 x* 函 数 名       : Init0_Init()
9 k& H& C: d* S/ N$ n3 p9 S* 函数功能                   : 外部触发中断初始化- f# q7 k, ~6 M; \1 M1 v! K
* 输    入       : 无$ D1 ~: G* }% @- l0 ]
* 输    出       : 无
; ]( _' |  N. l, e# c/ G*******************************************************************************/+ }8 O$ f& h5 i6 F; A, ]

! s  g+ U& n. Y0 y& m* P
  Q2 @4 _1 c+ C9 m9 r( B
void Init0_Init()1 Y' z$ G3 P6 S
{
1 ~/ \7 f: h5 f9 P( U& R6 T        // IT0=0;       //低电平触发
+ B8 [. [; k) ]4 n6 P( |8 ~6 @, I   IT0=1;       //下降沿触发, H7 u! ?+ t" X  ~1 x4 ^
   EA=1;
6 g* g$ ~  S% G$ Z& h9 i4 E   EX0=1;2 T2 [6 @" q, T3 S$ W7 S) }
}' u( V4 P6 G2 @: @  {$ a7 r8 F
/*******************************************************************************5 [0 B+ ]8 ]+ ?) a# Q2 C
* 函 数 名       : Time0_Init()" A# i5 X6 q4 c9 u( Z
* 函数功能                   : 定时器初始化0 h" D/ }% m; _. K0 i
* 输    入       : 无6 Z  |6 x0 N6 L) e6 g1 o* j$ ^: ~
* 输    出       : 无
' u& }' M8 |1 |" J8 n*******************************************************************************/5 z9 g1 A0 A( ~9 D
2 P( x8 H% h& R! L
0 N6 j$ `0 }- Z! X0 C
void Time0_Init()6 E/ `- n) r0 a
{
# E& p& W2 o  ?/ M- Q% d* j     TMOD = 0x00; //选择模式0  13位计数 最大计数81923 U9 d4 g  y" f% ?1 T; K
    //TH0=0x1C;   //12.000M  预装初值& _% o& {* o, I! R4 L5 q( v
    //TL0=0x18;        
- K$ _$ I5 K9 L7 g+ G5 X6 B           TH0 = (8192 - 1000)/32;
4 ]7 Y$ N" `( N! h9 w           TL0 = (8192 - 1000)%32        ;
4 L  E3 `/ D" e% R9 @+ D$ ^* [' N* l     IE = 0x8A;   //中断        
5 {6 s. Y+ U8 f3 x* f. O! {- o. h     TR0  = 1;    //开启T0定时器
3 f8 x% C9 f* X2 P}
5 W9 Z' a. I: U; a# H8 h' _( k
* j; Q1 A  s6 a1 s. |
5 e# a4 G4 E+ {8 L; u
/*******************************************************************************- G3 s3 E3 P5 b% h, r6 X
* 函 数 名       : INT0! V6 v! c9 I) F8 P$ |
* 函数功能                   : 外部触发中断0的中断函数' A  m2 a9 G7 J$ l) n' E- t
* 输    入       : 无8 Z: w; `- }! ?5 c4 V7 i* w- @% y$ C
* 输    出       : 无& `. `  {2 M1 S! g. Z
*******************************************************************************/
% J8 _8 p- p% Kvoid  counter0(void) interrupt 0  using 1
, ]8 T, h1 }- ?* M8 i. g{
$ q  a, g: c, \9 |* b  
1 W* Z$ a3 g& M- z   EX0=0;   //关外部中断
3 e6 a2 I( [3 e: e3 z* f1 F% g         if(ANJIAN==0)- [- b8 C! j$ ]+ p% w+ r
         {5 k: t$ M, t1 }, y
      Key++;   //按键次数- D- k/ `) O& m5 i' ^
         }
& [  Y9 A& L4 a2 M0 C   EX0=1;   //开外部中断
# y$ S( k( F' Z1 i' Q; C}
* ?  }+ T. O+ q7 W4 T/*******************************************************************************
; W% r# @3 w% [. n! B* p7 H8 \) p* 函 数 名       : Time1
3 Z9 }. A$ P9 }5 H* 函数功能                   : 定时器1的中断函数
$ V/ ?) P5 T6 E% L5 P+ Q* 输    入       : 无
3 A; ]/ }" d3 t- k* 输    出       : 无- q( \* T( H5 k6 {8 q0 ~
*******************************************************************************/
9 _3 Z7 U5 N3 ^( K/ t
  G# A5 k2 ~% H' {5 R

  Y& p0 o3 B( a) @+ d0 Avoid T0zd(void) interrupt 1      //3定时器1的中断号  1定时器0的中断号 0外部中断1 2外部中断2  4串口中断/ I! ?; C8 j* Q* D% y2 T3 i0 \' j
{- h# O& a4 j1 `

# q  Y0 ]& k+ d; N

* O  b5 j: q9 H* A; s8 C//        TH0 = 0xFE;  //重新赋初值
* m9 |: L/ c: T9 ?+ r//        TL0 = 0x0C;
( E4 Z2 b/ G1 ~% Z. h+ v         
' B# b, _  D/ e3 O…………限于本文篇幅 余下代码请从论坛下载附件…………6 T& [0 M9 B7 R4 W7 S
游客,如果您要查看本帖隐藏内容请回复
) S; ?' ?% Q; `& K

) c, O; p4 {$ S  l
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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