找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

急求帮助 占空比可调pwm波数两位码管显示占空比

查看数: 6490 | 评论数: 16 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-12-25 17:45

正文摘要:

#include<reg51.h> #define uint unsigned int #define uchar unsigned char                                  &nb ...

回复

ID:465221 发表于 2019-1-9 16:49
请问这个有pcb图吗
ID:393736 发表于 2018-12-30 22:25
大懒猫的可乐 发表于 2018-12-30 19:37
第一:检查一下数码管是共阴还是共阳,代码里面是共阳

是共阳
ID:438568 发表于 2018-12-30 19:37
第一:检查一下数码管是共阴还是共阳,代码里面是共阳
ID:393736 发表于 2018-12-29 21:11
wulin 发表于 2018-12-29 15:58
占空比1~99可调,

谢谢你占空比程序  现在有另外的问题就是  输出电压和占空比不线性  
ID:393736 发表于 2018-12-29 10:44
周超然 发表于 2018-12-28 10:24
先各个部分确认,你的显示有没有问题?数字都正常显示么?
还有就是pwm用个定时器控制频率,01多少控制占 ...

pwm周期20ms pwm端波形没有问题 按键也能控制占空比增减
ID:393736 发表于 2018-12-28 23:00
huiyu 发表于 2018-12-28 15:12
嗯 按键防抖的确没有考虑到 还请这位朋友点拨一下。还有就是现在波形输出无误且可调了。但是数码管不能正常 ...

数码管显示问题需要改中断时间和数码管延时时间  我的分别是 20ms 和 2ms   
按键消抖目前没整明白
ID:456666 发表于 2018-12-28 15:12
嗯 按键防抖的确没有考虑到 还请这位朋友点拨一下。还有就是现在波形输出无误且可调了。但是数码管不能正常显示 只能亮88 00
ID:449525 发表于 2018-12-28 10:24
先各个部分确认,你的显示有没有问题?数字都正常显示么?
还有就是pwm用个定时器控制频率,01多少控制占空比,自己去研究下,不难
ID:453955 发表于 2018-12-27 18:47
还有,朋友你的占空比上下限的设定真的弄反了哈哈哈
ID:453955 发表于 2018-12-27 18:39
void Motor_speed_high(void)
{
        if(Key1==0)
        {
                  Delay(10);
                  if(Key1==0)
                  {
                    count0 += 25;
  
                    if(count0 >= 100)
                    {
                            count0 = 100;
                    }
                  }
                  while(!Key1);
        }
}

这是我用PWM调电机转速时的程序,就比你多了延时防抖
ID:393736 发表于 2018-12-26 14:23
我要上哈工大 发表于 2018-12-26 11:23
你占空比上下限那里有点问题吧。。上下限反了,超过上限应该就是100,不应该是0.。我觉得;还要就是按键防 ...

嗯 按键防抖的确没有考虑到 还请这位朋友点拨一下。还有就是现在波形输出无误且可调了。但是数码管不能正常显示 只能亮88 00,不知道怎么回事
ID:393736 发表于 2018-12-26 14:20
MR_CHEN12 发表于 2018-12-26 12:26
我有PWM输出占空比可调周期可调的程序,通过按键调解,并在1602显示当前PWM的信息,需要吗

首先感谢这位朋友的回答 。占空比可调的程序我已经有了。现在的问题就是两位共阳极数码管显示的问题。不知道这位朋友能不能帮我看一下程序哪里出问题了 或者电路图。谢谢
ID:455286 发表于 2018-12-26 12:26
我有PWM输出占空比可调周期可调的程序,通过按键调解,并在1602显示当前PWM的信息,需要吗
ID:453955 发表于 2018-12-26 11:23
你占空比上下限那里有点问题吧。。上下限反了,超过上限应该就是100,不应该是0.。我觉得;还要就是按键防抖延时我好像没看到。?
ID:453955 发表于 2018-12-25 19:33
啊。我也是初学者。刚刚看了下,我对PWM目前还不是很了解;等我过两天学习了再和你交流~
ID:213173 发表于 2018-12-25 17:45
本帖最后由 wulin 于 2018-12-29 16:41 编辑

占空比1~99可调,



#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;

sbit Key1=P3^0;
sbit Key2=P3^1;
sbit PWM=P1^0;
uchar  code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};
uchar count,time,i;

void delayms(uint k)
{
        uint i,j;
        for(i=k;i>0;i--)
                for(j=110;j>0;j--);
}
void Timer0Init()                //100微秒@12.000MHz
{
        TMOD |= 0x02;                //设置定时器模式
        TL0 = 0x9C;                //设置定时初值
        TH0 = 0x9C;                //设置定时重载值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
        EA=1;
        ET0=1;
}
void display()
{
        static bit num=0;
        P0=0x00;
        if(num)
        {
                P2=~0xfe;
                P0=table[i/10];
                num=~num;
        }
        else
        {
                P2=~0xfd;
                P0=table[i%10];
                num=~num;
        }
}

void main( )
{
        Timer0Init();       
        count=99;
        i=100-count;
        while(1)
        {
                if(!Key1)//
                {
                        delayms(10);
                        if(!Key1)
                        {
                                if(count>1)
                                        count--;               
                                while(!Key1);
                                i=100-count;
                        }
                }
                if(!Key2)
                {
                        delayms(10);
                        if(!Key2)
                        {
                                if(count<99)
                                        count++;               
                                while(!Key2);
                                i=100-count;
                        }
                }
        }
}
void timer0() interrupt        1  
{
        time++;
        if(count>=time)
                PWM=1;
        else   PWM=0;
        if(time>99)
                time=0;
        if(time%10==0)
                display();
}

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

Powered by 单片机教程网

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