单片机pwm频率和周期可调

发布者:LIGANG888最新更新时间:2020-02-20 来源: 51hei关键字:单片机  pwm频率  周期可调 手机看文章 扫描二维码
随时随地手机看文章

//------------------------------------------------------------------------------------

//程序功能简介:本程序产生15HZ~~~50KHZ的方波,并且实现频率和脉宽的独立调制,即可

//在改变频率的同时不改变脉宽,再改变脉宽的同时不改变频率;同时设置

//两个调节步长------在KEY键按下时,粗调,没有按下时,细调;

//程序思路: 本程序用到两个定时器------定时器0和定时器1,其中定时器0工作在定时方式下,

//决定方波的频率;定时器1,同样工作在定时方式下,用于设定脉宽;

//------------------------------------------------------------------------------------ 

  #include

#include

#define  uchar unsigned char

#define  uint unsigned int

#define  ALL  65536             //定时器工作方式1时,最大基数长度 65536;

#define  F_osc 12000000         //晶振频率12M;


sbit KEY_F_UP=P0^2;             //频率上调按钮;

sbit KEY_F_DOWN=P0^3;           //频率下调按钮;

sbit KEY_W_UP=P0^4;             //脉宽上调按钮;

sbit KEY_W_DOWN=P0^5;           //脉宽下调按钮;

sbit KEY=P0^6;                  //粗细调节按钮-----按下为粗调,否则为细调;

sbit OUTPUT=P1^0;               //波形输出;


uchar TIMER0_H,TIMER0_L,TIMER1_H,TIMER1_L;//定时器0和定时器1的初值设置;

uchar PERCENT=50;               //初始占空比;

uchar FLAG_F=0,FLAG_W=0;//频率调节标志和脉宽调制标志;

uint  FREQ=50000;               //初始频率;

float temp;                     //临时全局变量,用于数据传递;

void delay(uchar t);           //延时函数,用于按键去抖;

void init();                      //初始化函数,用于定时器的初始化;

void calculate_F();     

//频率计算函数,当频率变化,计算出定时器0初值;

void calculate_W();     

//脉宽计算函数,脉宽变化时,计算出定时器1初值;

void key_scan();             //按键扫描函数;

void timer0();                //定时器0中断函数;

void timer1();                //定时器1中断函数;

void delay(uchar t)

{

    uchar i,j;

    while(t--)             //每个脉冲为1us

     {

      for(i=0;i<100;i++)

       for(j=0;j<100;j++);

     }

  }

void calculate_F()

{

    TIMER0_H = (uint)temp/256;

    TIMER0_L = (uint)temp%256;

}

void calculate_W()

{

    float TEMP;

    TEMP = (1 - PERCENT/100.0)*ALL + temp*PERCENT/100.0;

    TIMER1_H = (uint)TEMP/256;

    TIMER1_L = (uint)TEMP%256;

  }

  void key_scan()

  {

    delay(4);

    if(!KEY_F_UP)     //频率上调键按下;

    {

      FLAG_F=1;    //置标志位;

      if(!KEY)

        FREQ+=10;

      else

        FREQ++;

      if(FREQ>50000)

        FREQ=1;

    }

    else if(!KEY_F_DOWN)   //频率下调键按下;

    {

      FLAG_F=1;    //置标志位;

      if(!KEY)

        FREQ-=10;

      else

        FREQ--;

      if(FREQ<1)

        FREQ=50000;

     }

     else if(!KEY_W_UP)    //脉宽上调键按下;

     {

       FLAG_W=1;    //置标志位;

       if(!KEY)

         PERCENT+=5;

       else

         PERCENT++;

       if(PERCENT>49)

         PERCENT=1;

      }

     else if(!KEY_W_DOWN)   //脉宽下调键按下;

     {

       FLAG_W=1;    //置标志位;

       if(!KEY)

         PERCENT-=5;

       else

         PERCENT--;

       if(PERCENT<1)

         PERCENT=49;

      } 

      else ;

      }

  void timer0() interrupt 1      //决定频率

   {

     TH0=TIMER0_H;

     TL0=TIMER0_L;

     TR1=1;           //开定时器1;

     OUTPUT=1;

   }

   void timer1() interrupt 3     //决定脉宽

   {

     TH1=TIMER1_H;

     TL1=TIMER1_L;

     TR1=0; //关定时器1,一定要这一步,因为定时器1的定时短于定时器0;

     OUTPUT=0;

   }

   void init()

   {

     TMOD=0x11;      //定时器0和定时器1都工作在方式1,16位计数器;

     calculate_F();  //初始为1KHZ,占空比为50%;

     calculate_W();

     TH0=TIMER0_H;

     TL0=TIMER0_L;

     TH1=TIMER1_H;

     TL1=TIMER1_L;

     ET0=1;

     ET1=1;

     EA=1;

     TR0=1;

     TR1=1;


   }

main()

{

    init();

    while(1)

    {

       key_scan();

       if(FLAG_F)     //改变频率时要注意要进行脉宽的重新设置;

       {

         calculate_F();

         calculate_W();

         FLAG_F=0;

       }

       if(FLAG_W)     // 脉宽改变,频率不改变;

       {

         calculate_W();

         FLAG_W=0;

       }

     }

}


关键字:单片机  pwm频率  周期可调 引用地址:单片机pwm频率和周期可调

上一篇:基于51单片机的排队叫号系统仿真与程序源码设计
下一篇:基于单片机的电机测速proteus仿真+代码

推荐阅读最新更新时间:2024-11-07 08:38

控制单个单片机IO的按键+定时器10ms定时器程序
/*刚刚开始学习AVR单片机, *把学习到的知识和大家分享。有错误或者更好的写法,欢迎交流。 *方便新手学习,我都尽可能的注释 */ #include iom16v.h #include macros.h #include stdio.h //标准输入输出头文件 #define LED_DDR DDRA //LED接PA0~PA7 #define LED_P0RT PORTA //指示灯 /********************************* *按键定义 *******************************/ #define K1 PINC & (1 P
[单片机]
基于单片机的学生公寓用电管理系统设计
近年来,我国高等教育规模迅速扩大,在校生成倍增加,而后勤发展相对滞后,高校学生宿舍用电管理难等问题格外突出。一是大量学生宿舍电量计费仍然停留在老式的电度表计量阶段,计量精度低,人工抄表效率低、易出错,且对欠费用户很难有效管理。二是对学生使用违禁电器无法自动识别,产生很大的安全隐患。因此设计一种带有精确计量、智能控制、恶性负载识别、分时段限功率送电等功能的智能控电系统有着十分重要的意义。本文给出了采用福星晓程PL3000单片机的具有上述功能的控制系统设计方案,本产品已在本地进入了推广阶段。 1 硬件电路设计 1.1 控制系统总体方案 每个用户端由一个多功能电表完成用电计量计费和管理,上位计算机将相关用电控制参数传送到用
[单片机]
基于单片机的飞机航向控制显示教学模型设计与实现
0 引言 直观教学是增强飞行学员理论联系实际的有效手段,伴随着多媒体技术的发展,如何提升传统教学模型不可替代的演示功能,成为制约教学质量的关键。 传统教学模型存在数量多、结构简单、功能单一的缺点,但是其演示功能强,学员可以动手操作的优点是现代多媒体教学方式无法替代的。飞机航向控制显示系统是利用MCS-51单片机控制功能,将系统内多个模型综合,采用机电控制方式实现系统多功能教学和学员操作功能。一方面可以提高教学效果,同时还可以增强教员解决教学问题的动手能力,为将来从事相关科学研究打下坚实的基础。 1 系统功能要求 飞机航向控制显示系统为多功能教学系统,本文只探讨其中飞机航向控制及其相关显示部分功能设计与实现。仿真模型仿
[单片机]
基于<font color='red'>单片机</font>的飞机航向控制显示教学模型设计与实现
单片机看门狗的描述
下面是关于STC89C5XX-51 单片机看门狗的描述 WDT_CONTR 位置0xE1; EN_WDT: 看门狗允许位,置 1 启动看门狗,看门狗不能自动启动,需要设置该位后启动,一旦启动不能关闭(只能系统重新上电和看门狗复位可以关闭) CLR_WDT: 看门狗计数器清零位,置1 清零看门狗计数器,当计数器开始重新计数,硬件清零该位。 IDLE_WDT: 单片机IDLE 模式看门狗允许位,当IDLE_WDT=1时,单片机在 IDLE 模式(空闲模式)依然启用看门狗 PS2~PS0: 看门狗定时器预分频器,下表中 Prescale 表示预分频数 PS2 PS1 PS0 Prescale 0 0 0 2 0
[单片机]
基于DDS与MCU的运算放大器参数测量系统设计
引言 在现代科研机构电路设计、大专院校的电子系统教学中,集成运算放大器作为信号处理的基本器件,应用非常广泛,准确的掌握集成运放的参数是进行电子系统设计的基本前提。为了方便用户准确掌握手中运放的各项参数,本文提供了一种采用可编程DDS芯片和MCU的测量系统,可自动测量集成运放的5项基本参数,以小液晶屏显示测量结果,并可根据需要打印测量的结果,与现有的BJ3195等昂贵测试仪相比,该测量系统功能精简、操作智能化、人机接口友好。 系统总体设计 系统框图如图1所示。系统以SPCE061单片机为控制核心,采用主从结构,从单片机负责外围的液晶显示、打印、语音提示等功能。主单片机负责接收红外键盘的输入信息,根据当前用户输入,将参数测试部分
[测试测量]
单片机软件滤波方法对比
1、限幅滤波法(又称程序判断滤波法) A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效。如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值 B、优点:能有效克服因偶然因素引起的脉冲干扰。 C、缺点:无法抑制那种周期性的干扰,平滑度差。 2、中位值滤波法 A、方法:连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值。 B、优点:能有效克服因偶然因素引起的波动干扰,对温度、液 位的变化缓慢的被测参数有良好的滤波效果。 C、缺点:对流量、速度等快速变化的参数不宜。 3、算术平均滤波法 A、方法:连
[单片机]
如何由单片机升级到DSP
  在过去的几十年里,单片机的广泛应用实现了简单的智能控制功能。随着信息化的进程和计算机科学与技术、信号处理理论与方法等的迅速发展,需要处理的数据量越来越大,对实时性和精度的要求越来越高,低档单片机已不再能满足要求。近年来,各种集成化的单片DSP的性能得到很大改善,软件和开发工具也越来越多,越来越好;价格却大幅度下滑,从而使得DSP器件及技术更容易使用,价格也能够为广大用户接受;越来越多的单片机用户开始选用DSP器件来提高产品性能,DSP器件取代高档单片机的时机已经成熟。   本文将从性能、价格等方面对单片机和DSP器件进行比较,在此基础上,以TI的TMS320C2XX系列DSP器件为例,探讨DSP器件取代单片机的可行性。  
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved