找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机按键改变输出方波的频率,有大神能帮我看看错在哪里吗

[复制链接]
跳转到指定楼层
楼主
ID:330707 发表于 2018-5-15 20:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写了一个定时器输出方波的程序,然后通过按键改变输出方波的频率,但是实际使用没效果,频率没在变,请大神们看下问题出在哪里
(K1,K2是调频率的)求大神们指点一下

单片机源码:
  1. #include<reg52.h>

  2. sbit qw=P1^1;
  3. sbit OUT=P1^2;
  4. sbit K1=P2^0;
  5. sbit K2=P2^1;
  6. sbit K3=P2^2;
  7. sbit K4=P2^3;
  8. int i=0,t=5;

  9. void main(void)           
  10. {
  11.   TMOD=0x01;  
  12.   EA=1;        
  13.   ET0=1;      
  14.   TR0=1;      
  15.   TH0=(65536-20)/256;      
  16.   TL0=(65536-20)%256;     
  17.   qw=0;                    
  18.     while(1)
  19.         {               
  20.            if(K1==0)  
  21.            {
  22.                  {
  23.                    t--;
  24.                    if(t==0)   
  25.                    {
  26.                      t=9;     
  27.                    }
  28.                  while(!K1);  
  29.                  }
  30.            }
  31.            if(K2==0)      
  32.            {
  33.             
  34.                  {
  35.                    t++;      
  36.                    if(t==10)   
  37.                    {
  38.                      t=1;     
  39.                    }
  40.                  while(!K2);   
  41.                  }
  42.            }
  43.       if(K4==0)     
  44. {
  45.    
  46. {
  47. TR0=0;
  48.      OUT=0;      
  49.     }
  50. while(!K4);   
  51.    }
  52.            if(K3==0)     
  53.            {

  54.                  {
  55.                    qw=~qw;   
  56.                  }
  57.              while(!K3);   
  58.            }                                       
  59.         }
  60. }

  61. void Time0_serve(void)        interrupt 1      
  62. {
  63.   TH0=(65536-20)/256;               
  64.   TL0=(65536-20)%256;               
  65.   i++;
  66.   if(i==t)
  67.   {
  68.         OUT=0;
  69.   }
  70.   if(i==10)
  71.   {
  72.     i=0;
  73.     OUT=1;
  74.   }
  75. }

复制代码


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

使用道具 举报

沙发
ID:190832 发表于 2018-5-15 22:39 | 只看该作者
写程序要养成良好的备注习惯,不然别人怎么看的懂你的代码
回复

使用道具 举报

板凳
ID:330707 发表于 2018-5-15 23:09 | 只看该作者
hange_v 发表于 2018-5-15 22:39
写程序要养成良好的备注习惯,不然别人怎么看的懂你的代码

include<reg52.h>

sbit qw=P1^1; 方向输出
sbit OUT=P1^2;调速输出
sbit K1=P2^0; 减速
sbit K2=P2^1; 加速
sbit K3=P2^2; 方向按键
sbit K4=P2^3;停止按键
int i=0,t=5;

void main(void)           
{
  TMOD=0x01;  使用定时器T0模式1
  EA=1;        开总中断
  ET0=1;       定时器T0中断允许
  TR0=1;       启动定时器T0
  TH0=(65536-20)/256;      定时器T0赋初值
  TL0=(65536-20)%256;     定时器T0赋初值
  qw=0;                    取反初值
    while(1)
        {               
           if(K1==0)  减速
           {
                 {
                   t--;
                   if(t==0)    当速度最低
                   {
                     t=9;     循环为最高
                   }
            while(!K1);  松手检测
                 }
           }
           if(K2==0)      加速
           {
                 {
                   t++;      
                   if(t==10)   当速度最高
                   {
                     t=1;     循环为最低
                   }
          while(!K2);   松手检测
                 }
           }
      if(K4==0)     停止键
{
    {
     OUT=0;      输出0
    }
while(!K4);    松手检测停止
   }
           if(K3==0)     反转键
           {
                 {
                   qw=~qw;    电平取反 ,换向
                 }
    while(!K3);    松手检测
           }                                       
        }
}

void Time0_serve(void)        interrupt 1        定时器中断
{
  TH0=(65536-20)/256;                定时器高八位赋值
  TL0=(65536-20)%256;        定时器低八位赋值       
  i++;/0-10循环
  if(i==t)
  {
        OUT=0;/
  }
  if(i==10)
  {
    i=0;
    OUT=1;/
  }
}

不好意思
回复

使用道具 举报

地板
ID:248733 发表于 2018-5-16 00:00 | 只看该作者
while(!K1);
while(!K2);
while(!K3);
while(!K4);
这个样操作会进入死循环,让你找不到错误的地方
回复

使用道具 举报

5#
ID:158375 发表于 2018-5-16 08:40 | 只看该作者
你的程序结构需要斟酌,现在的,按键太快了吧。
回复

使用道具 举报

6#
ID:330707 发表于 2018-5-16 09:30 | 只看该作者
笨笨兔 发表于 2018-5-16 08:40
你的程序结构需要斟酌,现在的,按键太快了吧。

是的,按键按下去,转速几乎没变化,不知道怎么修改好
回复

使用道具 举报

7#
ID:330707 发表于 2018-5-16 09:35 | 只看该作者
polo_angel 发表于 2018-5-16 00:00
while(!K1);
while(!K2);
while(!K3);

请问如何修改啊
回复

使用道具 举报

8#
ID:330198 发表于 2018-5-16 12:03 | 只看该作者
你的程序改变的是占空比。要想改变频率就要给定时器重新赋变化的值。
回复

使用道具 举报

9#
ID:330707 发表于 2018-5-16 13:40 | 只看该作者
zhanghyg 发表于 2018-5-16 12:03
你的程序改变的是占空比。要想改变频率就要给定时器重新赋变化的值。

请问大神改频率怎么写?
回复

使用道具 举报

10#
ID:331240 发表于 2018-5-16 13:52 | 只看该作者
你这代码写的,格式完全不对
回复

使用道具 举报

11#
ID:331422 发表于 2018-5-16 16:58 | 只看该作者
建议通过PCA寄存器实现频率和占空比可变的PWM波输出
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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