找回密码
 立即注册

QQ登录

只需一步,快速开始

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

正在制作方波发生器,要求周期和占空比可调。

[复制链接]
跳转到指定楼层
楼主
ID:112850 发表于 2016-4-7 22:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基本要求:以51单片机为核心,设计一个方波发生器,方波的占空比在1%~99%三档可调,一档步进10%,二档步进5%,三档步进1%。方波占空比可以直观显示。方波周期可调,调节范围20ms~2s之间,且周期可直观显示。
请问:周期和占空比之间有什么关系?具体怎么用程序来编写?还有下面的这个程序有什么问题?我用仿真软件做仿真,只能显示周期为25ms以下的方波,程序中“temp=30”的周期是显示不出来的。请各位指教!!!
#include <reg51.h>
sbit out=P1^6;
sbit key0=P1^0;//+_-
sbit key1=P1^1;//50ms
sbit led0=P2^0;
sbit led1=P2^1;
sbit key4=P1^3;                //50ms
sbit com3=P2^4;                //周期个位显示
sbit com4=P2^5;                //周期十位显示
sbit com5=P2^6;                //周期百位显示
sbit com6=P2^7;                //周期千位显示
unsigned int flag,num=10,temp=30;        //占空比,周期
unsigned char table[]=
{
        0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};        //0~9
void delay();
void keyscan();
void display_zq();
void main()
{
        TMOD=0x01;
        TH0=(65536-100)/256;
        TL0=(65536-100)%256;
        TR0=1;
        ET0=1;
        EA=1;
        while (1)
        {       
                keyscan();
                display_zq();
                if (key0==0)
                        delay();
                        if (key0==0)
                        {
                                flag++;
                                while (!key0);
                                if (flag==2)
                                        flag=0;               
                        }
                switch (flag)
                {
                        case 0:led0=0;led1=1;break;
                        case 1:led1=0;led0=1;break;
                }                       
        }       
}
void int0() interrupt 1
{
        unsigned char n;
        TH0=(65536-100)/256+TH0;
        TL0=(65536-100)%256+TL0;
        n++;                          
        if (n==temp*10*num/100)
                out=1;
        if (n==temp*10)
        {
                out=0;
                n=0;
        }       
}
void delay()
{
        unsigned char i,j,k;
        for (i=0;i<100;i++)
                        for (j=0;j<10;j++)
                                        for (k=0;i<1;k++);
}
void keyscan()
{
        if(flag==0)
        {
                if (key1==0)
                        delay();
                        if (key1==0)
                        {
                                temp+=50;
                                if(temp>2000)
                                        temp=2000;
                                while (!key1);
                        }       
        }
        else if (flag==1)
        {
                if (key1==0)
                        delay();
                        if(key1==0)
                        {
                                temp-=50;
                                if(temp<20)
                                        temp=20;
                                while (!key1);
                        }
        }               
}
void display_zq()
{
        signed char a2,b2,c2,d2;
        com3=1;                //周期的千位显示
        a2=temp/1000;
        P3=table[a2];
        delay();
        com3=0;
       
        com4=1;                 //周期的百位显示
        b2=temp%1000/100;
        P3=table[b2];
        delay();
        com4=0;
       
        com5=1;                  //周期的十位显示
        c2=temp%100/10;
        P3=table[c2];
        delay();
        com5=0;
       
        com6=1;                   //周期的个位显示
        d2=temp%10;
        P3=table[d2];
        delay();
        com6=0;       
}                                                                                                                                                                         


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

使用道具 举报

沙发
ID:1 发表于 2016-4-7 22:54 来自手机 | 只看该作者
先回答这个问题,周期和占空比之间有什么关系,你要产生一个方波,必然就会有一个高电平和一个低电平,周期,就是指,高电平和低电平加起来一共所用的时间,了解了这个那占空比就好理解了,就是低电平时间和周期的比值。
回复

使用道具 举报

板凳
ID:112850 发表于 2016-4-8 22:38 | 只看该作者
那么这个程序有什么问题呢,为什么部分方波是仿真不出来
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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