找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7184|回复: 7
收起左侧

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

[复制链接]
ID:187113 发表于 2017-4-7 14:24 | 显示全部楼层 |阅读模式
STC15F104E单片机  控制呼吸灯 电机

源程序:
  1. /*******************************************************************************
  2. *                 
  3. * 51hei科技
  4. --------------------------------------------------------------------------------
  5. * 实 验 名                 : PWM调速直流电机试验
  6. * 实验说明       : 使用PWM输出控制直流电机的转速
  7. * 连接方式       : 见连接图
  8. * 注    意                 :
  9. *******************************************************************************/
  10. #include <reg52.h>

  11. //--定义使用的IO口--//
  12. sbit PWM=P3^4;
  13. sbit ANJIAN=P3^2;
  14. //--定义一个全局变量--//
  15. unsigned char timer0;
  16. unsigned int Key=0;
  17. unsigned int ZKB=0;
  18. void Time0_Init();
  19. void Init0_Init();
  20. /*******************************************************************************
  21. * 函 数 名       : main
  22. * 函数功能                 : 主函数
  23. * 输    入       : 无
  24. * 输    出       : 无
  25. *******************************************************************************/

  26. void main(void)
  27. {
  28.         Init0_Init();
  29.         Time0_Init();               
  30.         
  31.         if(Key==4)
  32.                 {
  33.                   Key=0;
  34.                 }
  35.                 switch(Key)
  36.                 {        case 1:  ZKB=10;
  37.                                 break;
  38.                         case 2:  ZKB=40;
  39.                                 break;
  40.                         case 3:  ZKB=80;
  41.                                 break;
  42.                 }        
  43.                
  44.         while(1)
  45.         {
  46.                 if(timer0>100)  //PWM周期为100*0.5ms
  47.                 {
  48.                         timer0=0;
  49.                 }

  50.                 if(timer0 < ZKB)        //改变30这个值可以改变直流电机的速度
  51.                 {
  52.                         PWM=1;
  53.                 }
  54.                 else
  55.                 {
  56.                         PWM=0;
  57.                 }               

  58.         }
  59.         

  60. }
  61. /*******************************************************************************
  62. * 函 数 名       : Init0_Init()
  63. * 函数功能                   : 外部触发中断初始化
  64. * 输    入       : 无
  65. * 输    出       : 无
  66. *******************************************************************************/

  67. void Init0_Init()
  68. {
  69.         // IT0=0;       //低电平触发
  70.    IT0=1;       //下降沿触发
  71.    EA=1;
  72.    EX0=1;
  73. }
  74. /*******************************************************************************
  75. * 函 数 名       : Time0_Init()
  76. * 函数功能                   : 定时器初始化
  77. * 输    入       : 无
  78. * 输    出       : 无
  79. *******************************************************************************/

  80. void Time0_Init()
  81. {
  82.      TMOD = 0x00; //选择模式0  13位计数 最大计数8192
  83.     //TH0=0x1C;   //12.000M  预装初值
  84.     //TL0=0x18;        
  85.            TH0 = (8192 - 1000)/32;
  86.            TL0 = (8192 - 1000)%32        ;
  87.      IE = 0x8A;   //中断        
  88.      TR0  = 1;    //开启T0定时器
  89. }

  90. /*******************************************************************************
  91. * 函 数 名       : INT0
  92. * 函数功能                   : 外部触发中断0的中断函数
  93. * 输    入       : 无
  94. * 输    出       : 无
  95. *******************************************************************************/
  96. void  counter0(void) interrupt 0  using 1
  97. {
  98.   
  99.    EX0=0;   //关外部中断
  100.          if(ANJIAN==0)
  101.          {
  102.       Key++;   //按键次数
  103.          }
  104.    EX0=1;   //开外部中断
  105. }
  106. /*******************************************************************************
  107. * 函 数 名       : Time1
  108. * 函数功能                   : 定时器1的中断函数
  109. * 输    入       : 无
  110. * 输    出       : 无
  111. *******************************************************************************/

  112. void T0zd(void) interrupt 1      //3定时器1的中断号  1定时器0的中断号 0外部中断1 2外部中断2  4串口中断
  113. {

  114. //        TH0 = 0xFE;  //重新赋初值
  115. //        TL0 = 0x0C;
  116.          
  117. …………限于本文篇幅 余下代码请从51黑下载附件…………

复制代码
0.png
下载:
009、STC15F104E系列单片机之产生PWM信号测试程序.rar (80.95 KB, 下载次数: 178)
回复

使用道具 举报

ID:234823 发表于 2017-11-8 10:21 | 显示全部楼层
最近正在接触stc15f104,感谢楼主
回复

使用道具 举报

ID:234823 发表于 2017-11-8 10:27 | 显示全部楼层
连接图好像没有附上?
回复

使用道具 举报

ID:260128 发表于 2018-1-31 10:09 | 显示全部楼层
谢谢分享;学习下
回复

使用道具 举报

ID:254251 发表于 2018-5-25 17:05 | 显示全部楼层
这程序不能用
回复

使用道具 举报

ID:394663 发表于 2018-9-6 17:43 | 显示全部楼层
很好,学习下。
回复

使用道具 举报

ID:393670 发表于 2018-9-6 21:28 | 显示全部楼层
感谢楼主很好,学习下。
回复

使用道具 举报

ID:70769 发表于 2019-5-22 03:05 | 显示全部楼层
THANK  YOU !!!   GOOD  IDEA~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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