【无标题】51单片机定时器生成PWM

实验原理及内容:

【实验要求】

利用定时器的方式生成PWM,通过两个按键控制占空比,这两个按键由定时器中断实现,按下按键1,占空比变大,按下按键2,占空比变小。

  1.新建一个文件夹,以名字拼音命名,将工程放到文件夹内。

  2.画出仿真图,做出仿真效果。

【实验原理】

1.对IO口进行相应的硬件连接,通过判断相应的IO口电平是否被拉高来确定按键是否被按下,当按键按下时根据按键的按键执行相应的程序。

2.原理图

3edd4873683e423095b75437a169c1eb.png

 

3.程序设计思路

(1)硬件部分原理

按键一端接地,一端接入IO口,当IO口无输入时默认为低电平,按键按下后IO口电平被拉高,其相应寄存器位会变1,通过判断相应位是否为1来确定按键是否被按下。PWM的输出端接另一IO口。

(2)软件部分原理

①首先定义两个按键的位置分别为P2.0、P2.1通过这两个按键来调节占空比,通过定时器T0来生成PWM信号,PWM的输出接P1.0,另外定义一个变量temp来存储占空比。

②设置定时器T0为模式1,16位定时器,设置定时器的初值为0xFF,以实现最大的计数范围,启动定时器。

③判断按键1是否按下,如果按下了则占空比temp增加,每按下一次按键1,按键1都会在原来的基础上增加10%,即通过temp+=10来实现,如果占空比增加到了100%,就让它保持在100%;判断按键2是否按下,如果按下了则占空比temp减小,每按下一次按键2,按键2都会在原来的基础上减小10%,即通过temp-=10来实现,如果占空比减到了0%,就让它保持在0。

④最后通过占空比的值与T0的值来控制PWM输出引脚的状态,当定时器T0的值小于占空比的值,那么PWM就输出高电平,否则输出低电平。

主程序流程

   步骤1)未按下按键时,输出占空比为50%的PWM

     步骤2)判断按键1是否按下,若按键1按下,则占空比增加10% ,占空比大于100,保持在100。   

     步骤3)判断按键2是否按下,若按键2按下,则占空比减小10% ,占空比减到0,则保持在0。

【实验内容与步骤】

一、程序注释

```

#include <reg51.h>

sbit PWM_OUT=P1^0; // 定义PWM输出引脚为P1.0

sbit key1=P2^0; //定义按键1引脚为P2.0

sbit key2=P2^1; /定义按键2引脚为P2.1

unsigned int temp=50; // 初始占空比为50%

void delay(unsigned int ms)// 延时函数

 {

    unsigned int i, j;

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

       {

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

         {  

 

     }

    }

 }

void main() 

 {

  TMOD=0x01; //设置定时器T0为模式1,16位定时器

  TH0=0xFF; //设置定时器初值

  TL0=0xFF;

  TR0=1; //启动定时器

  while(1) 

  { 

  if(key1==0) //检测按键1是否按下

    {

   delay(10); //延时消除抖动

   temp+=10; //每按一次按键占空比增加10

   if(temp>100) //若占空比大于100

       {

     temp=100; //占空比保持在100

    }

  }

  if(key2==0) //检测按键2是否按下

   {

   delay(10); //延时一段时间,用于消除按键抖动

   temp-=10; //每按一次按键占空比减小10

   if(temp<0) //若占空比等于100

        {

     temp=0; //占空比保持在0

     }

  }     

   if(TH0<temp)//生成PWM信号

      {

     PWM_OUT=1;

    } 

        else 

        {

     PWM_OUT=0;

    }

  }

}

```

二、仿真和现象分析

初始状态

2ec5f6106ff040c6b0f214e568a5ffb1.png

 

按下按键1增加占空比

22e1cd33262c431ca8f2c4b5755f7da9.png

 

按下按键2减小占空比

acf40a9aaa84408cb38797ba3bc16440.png

 

占空比增加到100

a2c657a3f20f42b2b18ff2c4794a6daa.png

 

占空比减小到0

3f612d2439424a60946b3ae237a72876.png

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值