找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2593|回复: 1
收起左侧

占空比,频率可调PWM波发生器程序

[复制链接]
ID:454945 发表于 2018-12-26 13:09 | 显示全部楼层 |阅读模式
占空比和频率都可调的两对互补的pwm波,其中由四个按钮来分别控制占空比和频率的加减

  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4.   uint shiwan,wan,qian,bai,shi,ge;
  5. //uint D[]={shiwan,wan,qian,bai,shi,ge};
  6. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80}; //共阴极数码管段码表
  7. //uchar code wei[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  8. uint a, b,f=500;
  9.         sbit P1_0=P1^0;
  10.         sbit P1_1=P1^1;
  11.         sbit SegSel=P2^6;                                                        //段选
  12.     sbit BitSel=P2^7;
  13.         sbit P3_6=P3^6;
  14.         sbit P3_7=P3^7;
  15.         void delay_ms(uint x)
  16. {
  17.         uint i,j;
  18.         for(i=x;i>0;i--)
  19.         for(j=240;j>0;j--)
  20.         ;
  21. }
  22. /*void show()
  23. {
  24.         uint i;
  25.         for(i=0;i<6;i++)
  26.         {
  27.                 BitSel=1;P0=wei[i];BitSel=0;SegSel=1;P0=table[D[i]];SegSel=0;delay_ms(1);
  28.         }
  29. }  */
  30. void display(uint a,uint b,uint c,uint d,uint e,uint f) //数码管显示函数
  31.          {
  32.          P2=0xfe;
  33.          P0=table[f];
  34.          delay_ms(2);
  35.          P2=0xfd;
  36.          P0=table[e];
  37.          delay_ms(2);
  38.          P2=0xfb;
  39.          P0=table[d];
  40.          delay_ms(2);
  41.          P2=0xf7;
  42.          P0=table[c];
  43.          delay_ms(2);
  44.          P2=0xef;
  45.          P0=table[b];
  46.          delay_ms(2);
  47.          P2=0xdf;
  48.          P0=table[a];
  49.          delay_ms(2);
  50.          }
  51.     //------------------------------------------
  52.     void main()
  53.     {
  54.              TMOD = 0x01;                 //T0定时方式1
  55.              TH0 = (65536-100000/f) / 256;   //50ms@12MHz
  56.              TL0 = (65536-100000/f) % 256;
  57.              TR0 = 1;

  58.              ET0 = 1;
  59.              EX0 = 1; EX1 = 1;
  60.              IT0 = 1; IT1 = 1;
  61.              EA = 1;

  62.              a = 0;
  63.              b = 5;
  64.                          if(P3_6==1)
  65.                          f=f-500;
  66.                         
  67.                          if(P3_7==1)
  68.                          f=f+500;
  69.                          if(f<500)
  70.                          f=500;
  71.                          if(f>9500)
  72.                      f=9500;
  73.                          shiwan=b/10;
  74.                          wan=table[9];
  75.                          qian=b%10;
  76.                          bai=f/1000;
  77.                          shi=table[9];
  78.                          ge=f%1000/100;
  79.              display(ge,shi,bai,qian,wan,shiwan);
  80.              while(1);
  81.     }
  82.     //------------------------------------------
  83.     void time0() interrupt 1
  84.     {
  85.              TL0 = (65536-100000/f) % 256;
  86.              TH0 = (65536-100000/f) / 256;   //50ms@12MHz
  87.              a++;
  88.              if(a == 10) a = 0;           //在这里调整周期.
  89.              if(a < b)
  90.                          {P1_0 = 0xff;        //在这里调整占空比.
  91.                                    P1_1 =~P1_0;
  92.                                            }
  93.              else   {
  94.                                 P1_0 = 0x00;
  95.                                 P1_1 =~P1_0;}

  96.     }
  97.     //------------------------------------------
  98.     void X0_INT() interrupt 0
  99.     {
  100.              b++;
  101.              if(b > 10) b = 10;           //占空比等级最大为19
  102.     }
  103.     //------------------------------------------
  104.     void X1_INT() interrupt 2
  105.     {
  106.              b--;
  107.              if(b < 1) b = 1;             //占空比等级最小为1.
  108.     }
复制代码

原理图

原理图

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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