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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
STC15F104E单片机使用PWM输出控制直流电机的转速 还可以做呼吸灯
5 f" v, V4 T+ K0 E( X: u( C4 f& e/ J% I; Q  y& r, B) c) @
! i4 m) L! e9 ?( P6 v* I( J4 S
源程序:
: H* k+ j- Y8 T) G5 S  V/*******************************************************************************% Z0 A2 e& }6 s) H
*                 " M( w5 b! U" N5 x
* 51hei科技. L8 g6 m, X# F
--------------------------------------------------------------------------------7 O# [9 E/ h- P6 T; d; h8 Y% O
* 实 验 名                 : PWM调速直流电机试验
/ j5 o' i' \) z; V5 i& {6 q, z% I* 实验说明       : 使用PWM输出控制直流电机的转速
. s6 a5 e& ?9 X) i; {* 连接方式       : 见连接图
# M7 r7 t' ~6 o/ N* u. a3 n* 注    意                 : 4 `* R* C/ t$ @6 I) O
*******************************************************************************/
" [# i2 c" G- {5 [#include <reg52.h># U$ K- }3 s+ D, ?7 o
5 _9 H9 A, k2 Y; Y: k+ U/ Y
0 S" p( q  [" p( W8 G  b# d
//--定义使用的IO口--//" L) |- ~5 e6 i
sbit PWM=P3^4;
) k) u+ x& {4 a8 e! O' M2 L9 ]sbit ANJIAN=P3^2;* x+ j+ s9 ^* T: ], `+ `4 {
//--定义一个全局变量--//
9 B- q' t2 F, X3 n- s; Q# {unsigned char timer0; 1 e1 n6 ?2 k* M4 x9 s3 s
unsigned int Key=0;) ~5 e/ D0 _8 v
unsigned int ZKB=0;) ?+ T5 |6 |, L; O' l* d
void Time0_Init();
! g, Y' C( R- [& H) [7 _void Init0_Init();
* F6 X  Y& e2 f3 h. _& O/*******************************************************************************! k4 |# T: u2 k* C
* 函 数 名       : main3 e6 T! @' i* ~' j) y
* 函数功能                 : 主函数( L: @; i+ J) ?
* 输    入       : 无
( D0 |% O3 ^1 d$ A8 @2 S* 输    出       : 无
0 H. C" S4 O9 T$ r' i6 q*******************************************************************************/3 M. X5 ^; z. t$ T4 R& C
; u5 A# C( n1 [' _4 S" R0 b

0 K5 X6 }" z) p0 a! s4 Avoid main(void)  U' f  T* M5 z$ q2 z- z
{
7 d  t7 F$ m) o6 J, N& P: i- _        Init0_Init();# G- p& g) z; S8 q, t7 T0 X, O
        Time0_Init();               
# o' J. W$ [  x; _0 K        
, g; O' q  p; e8 D! o9 i        if(Key==4)
$ r" L8 {$ {0 ?% P; L                {; T/ ]( ^% q1 @4 a# X1 m0 s$ t
                  Key=0;4 i* z, Z4 ~3 T- ~; w2 a# Z
                }
4 C/ M* m4 W4 w                switch(Key). F, i" w1 s0 j9 c
                {        case 1:  ZKB=10;
0 d4 h# |6 [: s! X8 ~3 ~7 @                                break;: E! K, O& \8 H9 z9 ^
                        case 2:  ZKB=40;, i$ V+ u* u9 V) A5 J& s# _
                                break;9 u/ c6 R& K& r! e3 n
                        case 3:  ZKB=80;* N% Q% _7 ^) j$ E5 K; x5 }
                                break;# A8 x9 Y* V1 Q
                }        $ a3 X( v: @! B! k, S# t( h" ]
                / T' m0 `8 v* a3 g
        while(1)
3 D  i; d, s$ d4 i0 t% O        { 4 t- P+ }2 d$ Y( Y
                if(timer0>100)  //PWM周期为100*0.5ms( Q# w" c0 h6 j$ A' N( o9 l2 Z$ _
                {) K1 T$ _7 O+ s: o: a! y
                        timer0=0;
, q' R5 `. b3 }2 f$ c: u                }2 _2 Q0 b# ^  [

4 R/ J* n7 E/ T
; g& R# J# ~. o" [& s+ a8 {
                if(timer0 < ZKB)        //改变30这个值可以改变直流电机的速度
2 a/ Y9 P+ G" u9 ?                {" \0 l( r* |) I+ ~6 A* b
                        PWM=1;
% \' @; s7 o" h# }- Y; ?7 y! _                }
% G# v8 a3 R; r- d1 v  E; G, U                else8 E3 N% E2 |$ H. P, M) B
                {
! r" K1 v# q. r( ]' T                        PWM=0;
+ e/ q3 c6 `& e3 j                }               
- u4 w& b1 |: n' @2 K" U, g' ^( Q" k' r6 q( U
9 y* X. w: \0 Z: T1 w# L1 E
        }4 m( @4 }9 J3 Q4 a& M* x- g
        / F5 V) M* b# e8 o" a( s* S0 j

; ~' h6 e7 x1 n. v( Y1 w$ {# v
2 E  U8 }3 s9 I
}$ E! Y: u0 A; _) b: }
/*******************************************************************************' A- x' V6 Y3 t' C4 U  Y* {
* 函 数 名       : Init0_Init()! y8 d( o2 s  |. y
* 函数功能                   : 外部触发中断初始化
7 D; m  m! {, g9 N# F2 s- g* 输    入       : 无6 W3 B3 M& k8 U7 n" k
* 输    出       : 无  `9 P: a, t5 h: g
*******************************************************************************/
' u( O/ m2 m3 k1 Q4 M6 E& p0 r' g' d% m# f8 q8 @  g$ O6 a

$ q9 Y. M, ^0 C$ f$ Q, ]% zvoid Init0_Init()9 {# l; \! H' ]. C
{
, N6 ?" Q6 z0 i  d5 y        // IT0=0;       //低电平触发# p5 f6 g9 U2 }
   IT0=1;       //下降沿触发
. P9 {, W2 G% a/ Q+ s& |- F! l   EA=1;
: i6 ^4 i) K( m) h* V% k, ~+ f* [   EX0=1;1 S" ^. S9 T: g# E) N% r- H2 P
}
! J3 \+ J! Z2 `' m: V/*******************************************************************************' s! d8 q8 f9 a4 h6 X
* 函 数 名       : Time0_Init()$ _! N, s4 S$ t0 e) \
* 函数功能                   : 定时器初始化( B8 t4 g. O, @  e
* 输    入       : 无- U0 x" d& ~, m: e
* 输    出       : 无1 ^3 ?- Z' L& A7 o
*******************************************************************************/
. p* R( Z2 ~) U( J4 R7 T1 z" a$ x, ^3 {2 v
& Z7 X5 s0 }* C5 M# W! Q
void Time0_Init()' ]; s% I4 I/ g& q0 u) g% c6 L# P8 _! \
{8 A0 [; T1 k$ ^# u0 @9 G
     TMOD = 0x00; //选择模式0  13位计数 最大计数8192
$ ], b% C7 B' U* c/ p! q* A! ^    //TH0=0x1C;   //12.000M  预装初值8 X( d% M! J1 _: x) P
    //TL0=0x18;        2 b4 W' o8 O/ X. t2 X" X4 n. Y0 _1 B+ `
           TH0 = (8192 - 1000)/32;2 ?- m) X. F" W" s2 o
           TL0 = (8192 - 1000)%32        ;
% i7 B7 y) w$ A. i& C     IE = 0x8A;   //中断        0 g! `5 u! Y  F/ L
     TR0  = 1;    //开启T0定时器" z, M- E) i3 ~' w
}
3 E( M2 H! K0 I5 b6 H# c' \7 ]2 `

" g/ R6 I) a1 b  a/ z/*******************************************************************************
9 {8 ?5 j& j( p, `# Z0 B" ]/ \* 函 数 名       : INT0: m: l% @0 Y3 m9 q% i5 I* T
* 函数功能                   : 外部触发中断0的中断函数
- F- ?/ ]9 b* W* 输    入       : 无3 j4 P/ g, s* I, t
* 输    出       : 无
1 O( b0 M5 A( }, d*******************************************************************************/# u1 Q. G5 D- X6 J. v
void  counter0(void) interrupt 0  using 1
9 H7 x) E8 [2 D{
0 I: j: Y- P, M$ [  d/ o6 J( z3 w6 L  ! P8 r; \* h6 n) |* y
   EX0=0;   //关外部中断
) W. X, W/ |  A' Q5 }4 d4 j         if(ANJIAN==0)
" ]! ]: D2 U- k8 ]& O( u9 A; E3 E  ?% @         {* e* K! v' w9 d/ s- \8 I$ X2 ]5 R
      Key++;   //按键次数9 j* `9 R2 A  a  \9 M
         }6 x+ \- x  Y# Y) Y( b! y$ O5 s- D' R) e
   EX0=1;   //开外部中断
$ h6 Y8 C& X# g( }4 E) n) {}
# c7 D) f& l. D$ {. Z9 G/*******************************************************************************, ~( ~2 d! l% g4 ?" m( E& X% N" ]
* 函 数 名       : Time1
- m/ @- z% T" L& L/ R, Z/ p* 函数功能                   : 定时器1的中断函数7 R( a4 I# ]5 J% M  t8 B
* 输    入       : 无
0 h: w/ B+ U4 U" ]9 |' O* 输    出       : 无
" g1 y. U* s* h) ~6 B*******************************************************************************// @$ U- D# D# T9 G! u# K% c
" B* W# c& i! y4 }; [

8 Y4 r+ ]4 y* g4 K8 c5 Evoid T0zd(void) interrupt 1      //3定时器1的中断号  1定时器0的中断号 0外部中断1 2外部中断2  4串口中断
, t' v* j- v  x{
  D' X, [+ [! z& q( N* b  d' L9 Y- K3 }2 l' p9 o0 ]
" E# I5 `6 b6 h2 Y8 |  u
//        TH0 = 0xFE;  //重新赋初值
* O" }; f  d5 w8 a3 D5 W' `//        TL0 = 0x0C;0 J# s& q* X5 @! x5 Y
         
) `/ y# I: G% L…………限于本文篇幅 余下代码请从论坛下载附件…………
: H/ P: t: C6 o' i  z5 w' z
游客,如果您要查看本帖隐藏内容请回复
6 V+ K8 A) a3 p( W

$ I7 ~0 J+ Z5 T! W1 k+ ^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-2 23:13 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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