找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这个方波程序怎么通过两个按键控制方波频率?

[复制链接]
跳转到指定楼层
楼主
ID:195175 发表于 2017-5-4 17:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"reg52.h"
sbit PWM=P1^0;
void main()
{
        TMOD=0x01;                                 
        TH0=(65536-1000)/256;         
        TL0=(65536-1000)%256;
        EA=1;                                         
        ET0=1;                                       
        TR0=1;                                       
        while(1);
}

void T0_time(void) interrupt 1
{
        TH0=(65536-1000)/256;         
        TL0=(65536-1000)%256;
        if(PWM)
        PWM=0;   
        else
        PWM=1;
}
这个方波程序怎么通过两个按键控制方波频率?
能不能实现步进电机先正转两周,暂停2秒,再反转五周,然后暂停



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

使用道具 举报

沙发
ID:146949 发表于 2017-5-4 21:11 | 只看该作者
        if(PWM)
        PWM=0;   
        else
        PWM=1;
为什么不直接写成PWM=!PWM;??
还有就是你把P1^0声明做PWM时,下面用"if(PWM)"如果P1.0脚外面接了负载约1K下地时,
可能会导致下次检测if(PWM)时PWM读出状态一直保持为0.
你要改频率的话,
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit PWM=P1^0;
sbit KEY1=P1^1;
sbit KEY2=P1^2;
uint mun;
void Delayms(unsigned int ms)                //1mS@11.0592MHz
{unsigned char i, j;
        while(ms--)
        {       
        i = 11;
        j = 190;
        do
        {
                while (--j);
        } while (--i);}
}
void main()
{
        TMOD=0x01;                                 
        TH0=(65536-1000)/256;         
        TL0=(65536-1000)%256;
        EA=1;                                         
        ET0=1;                                       
        TR0=1;                                       
        while(1)
{
if(!KEY1)
{
Delayms(10);          
   if(!KEY1)
        {       
          num++;
        }
}
if(!KEY2)
{
Delayms(10);          
   if(!KEY2)
        {       
          num--;
        }
}
}

void T0_time(void) interrupt 1
{
        TH0=(65536-mun)/256;         
        TL0=(65536-mun)%256;
        //if(PWM)
        //PWM=0;   
        //else
        //PWM=1;
        PWM=!PWM;
}


回复

使用道具 举报

板凳
ID:195175 发表于 2017-5-4 22:54 | 只看该作者
非常感谢
回复

使用道具 举报

地板
ID:195175 发表于 2017-5-4 22:55 | 只看该作者
我试下
回复

使用道具 举报

5#
ID:194871 发表于 2017-5-4 22:59 | 只看该作者
好厉害
回复

使用道具 举报

6#
ID:195175 发表于 2017-5-5 07:50 | 只看该作者
如果通过这种方波控制让步进电机先正转2圈,暂停5秒再反转5圈然后暂停
怎么操作
回复

使用道具 举报

7#
ID:195175 发表于 2017-5-5 14:22 | 只看该作者
非常感谢,我的硬件是一个步进驱动器,一个42步进电机,一个电源24V
回复

使用道具 举报

8#
ID:195175 发表于 2017-5-5 17:04 | 只看该作者
wosiyabo 发表于 2017-5-4 21:11
if(PWM)
        PWM=0;   
        else

亲,您给的这个程序也没办法实现加减速,和我上面提问的那个差不多,加入num变量之后,步进电机的速度直接就变慢了,并且增加的按钮也是不可调的
回复

使用道具 举报

9#
ID:146949 发表于 2017-5-6 14:16 | 只看该作者
sunshine1973 发表于 2017-5-5 17:04
亲,您给的这个程序也没办法实现加减速,和我上面提问的那个差不多,加入num变量之后,步进电机的速度直 ...

你题目是说控制方波频率,而不是说改变PWM(脉宽占空比)..........
回复

使用道具 举报

10#
ID:146949 发表于 2017-5-6 14:23 | 只看该作者
控制的是那款步进电机?四线还是五线的?
先正转两周? 这个要看步进电机的参数,还有你要的转速多少,一周为360度。有的步进为15度,要跑24次才完成一周。
暂停2秒,再反转五周,然后暂停
回复

使用道具 举报

11#
ID:195175 发表于 2017-5-19 15:20 | 只看该作者
wosiyabo 发表于 2017-5-6 14:23
控制的是那款步进电机?四线还是五线的?
先正转两周? 这个要看步进电机的参数,还有你要的转速多少,一周为3 ...

我的步进电机是四线的
通过步进驱动器控制
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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