找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4359|回复: 4
打印 上一主题 下一主题
收起左侧

STC15F104W单片机实现编码器调节两路PWM输出程序

  [复制链接]
跳转到指定楼层
楼主
ID:486426 发表于 2020-2-2 14:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <STC15F104E_PLUS.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. //#define uint unsigned int
  5. sbit VD=P3^3;  //红色LED 0.50v=10v ;1.00=27v ;3.85=73v;
  6. sbit CD=P3^4;  //绿色LED
  7. sbit ZS=P3^5;  //指示LED转换  0 - 红色LED调整;1 - 绿色LED调整
  8. sbit BA=P3^0;  //编码器的a脚接P3.0
  9. sbit BB=P3^1;  //编码器的b脚接P3.1
  10. sbit QH=P3^2;  //编码器的按键接P3.2 电压调整或电流调整249=5.00V
  11. uchar v_temp = 128,c_temp = 109,XZ = 0,flag,a0,b0,c0;//占空比 189=3.70V;109=0.75V;128=1.00V
  12. //延时函数,大约延时10ms.此处未用到
  13. /*void Delay10ms()        //@11.0592MHz
  14. {
  15.     unsigned char i, j;
  16.     i = 108;
  17.     j = 145;
  18.     do
  19.     {
  20.     while (--j);
  21.     } while (--i);
  22. }*/
  23. void bianmaqi(void)//捕捉EC11按下和旋转信息
  24. {
  25.   unsigned char a, b, c;
  26.         a = BA;  
  27.         b = BB;
  28.    if (a != a0)     // A changed
  29.   {
  30.         a0 = a;
  31.     if (b != b0)    // B changed
  32.      {
  33.         b0 = b;
  34.         if (a == b)        
  35.             {
  36.            if  (XZ == 0)
  37.          {
  38.             if (v_temp < 249) v_temp++;
  39.           }
  40.            else  if ( XZ == 1)
  41.          {   
  42.             if (c_temp < 208)c_temp++;;
  43.           }
  44.             }
  45.    else         if (a != b)   
  46.      {  
  47.       if ( XZ == 0)
  48.         {                     
  49.           if (v_temp > 85)v_temp--;
  50.         }
  51.          else   if ( XZ == 1)
  52.         {
  53.           if (c_temp > 1)c_temp--;
  54.         }
  55.       }
  56.      }
  57.     }
  58.   c = QH;
  59.   if (!c && c0)
  60.         {
  61.         if (XZ == 0 )
  62.       {
  63.         XZ = 1;
  64.         ZS = 1;
  65.         }
  66.     else if(XZ == 1)//切换
  67.       {
  68.         XZ = 0;
  69.         ZS = 0;
  70.        }
  71.     }
  72.     c0 = c;
  73. }
  74. void InitTimer0() interrupt 1  // 0.5毫秒@11.0592MHz  //定时器T0 16位自动模式定时1ms 控制灯灭时间 频率 2000HZ
  75. {
  76.     IE2 = 0x00;    //关闭定时器2中断
  77.     AUXR = 0XE4;   //关闭定时器2计数
  78.     TL0 = 0xCD;
  79.     TH0 = 0xD4;
  80.     VD = 1;
  81.     CD = 1;
  82. //    blue=1;
  83.     flag = 1;
  84.     AUXR = 0xF4;   //开启定时器2计数
  85.     IE2 = 0x04;    //开启定时器2中断允许
  86. }

  87. void InitTimer2() interrupt 12    //     2.5微秒@11.0592MHz  //定时器T2 16位自动模式定时4us    控制灯亮时间
  88. {
  89.     flag++;
  90.     T2L = 0xD4;    //设置定时初值
  91.     T2H = 0xFF;    //设置定时初值
  92.     if(v_temp == flag) VD=0;
  93.     if(c_temp == flag) CD=0;
  94. //    if(b_temp == flag) blue=0;
  95. }
  96. void init()
  97. {
  98.     AUXR = 0XE4;   //设置定时器0和2为1T模式
  99.     TMOD = 0x00;
  100.     TL0 = 0xCD;
  101.     TH0 = 0xD4;
  102.     T2L = 0xD4;    //设置定时初值
  103.     T2H = 0xFF;    //设置定时初值
  104.     EA = 1;
  105.     ET0 = 1;
  106.     TR0 = 1;
  107.     P3M1 &= 0xF7;
  108.     P3M0 |= 0x08;  //P3.3(推挽)
  109.     P3M1 &= 0xEF;
  110.     P3M0 |= 0x10;  //P3.4(推挽)
  111.     P3M1 &= 0xDF;
  112.     P3M0 |= 0x20;  //P3.5(推挽)
  113.     VD = 0;
  114.     CD = 0;
  115.     ZS = 0;        // 0 - 电压调整状态;1 - 电流调整状态
  116.     a0 = BA;
  117.     b0 = BB;
  118.     c0 = QH;
  119.         
  120. }
  121. void main()
  122. {
  123. init();
  124. while(1)
  125.    {
  126.    bianmaqi();  
  127.    }
  128. }
复制代码


STC15F104W实现编码器调节两路PWM输出.rar

33.85 KB, 下载次数: 128, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏13 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:137005 发表于 2020-2-3 16:40 | 只看该作者
没有工程文件;只有一个C文件,其中也没有头文件STC15F104E_PLUS.h
回复

使用道具 举报

板凳
ID:438886 发表于 2022-2-28 22:59 来自手机 | 只看该作者
刚刚试了楼主的文件,好像没成功,调整频率和占空比无反应,不知道问题在那
回复

使用道具 举报

地板
ID:983641 发表于 2022-3-1 11:07 | 只看该作者
楼主能不能介绍一下实现过程?
回复

使用道具 举报

5#
ID:848299 发表于 2022-4-6 00:27 | 只看该作者
楼主能不能介绍一下实现过程?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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