找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机pwm多级调试源程序

[复制链接]
跳转到指定楼层
楼主
ID:366678 发表于 2018-7-7 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pwm多级调试
单片机源程序如下:
  1. #include <reg51.h>
  2. #include <math.h>
  3. #include <intrins.h>

  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. /*PWM控制端*/
  7. sbit DIM2 = P1^0;
  8. sbit DIM1 = P1^1;
  9. /*使能端*/
  10. sbit EN1 = P3^7;
  11. sbit EN2 = P3^6;
  12. sbit dianyuan = P1^4;
  13. /*按键*/
  14. sbit key1 = P3^4;
  15. sbit key2 = P3^5;

  16. uchar t = 0;                  //每次定时器溢出加1
  17. uchar PWM = 0;                //占空比控制

  18. void delayms(uint x)
  19. {
  20.         uchar i,j;
  21.         for(i=x;i>0;i--)
  22.          for(j=110;j>0;j--);
  23. }
  24. void Delay10ms()                //@11.0592MHz
  25. {
  26.         unsigned char i, j;

  27.         i = 108;
  28.         j = 145;
  29.         do
  30.         {
  31.                 while (--j);
  32.         } while (--i);
  33. }

  34. void keyscan()
  35. {
  36.         if((key1 == 0)&&(key2 == 0))
  37.                 {
  38.                         delayms(10);
  39.                         if((key1 == 0)&&(key2 == 0))
  40.                         {
  41.                                 PWM = 250;        //0mA
  42.                         }
  43.                 }

  44.         else if((key1 == 0)&&(key2 == 1))
  45.                 {
  46.                         delayms(10);
  47.                         if((key1 == 0)&&(key2 == 1))
  48.                         {
  49.                                 PWM = 125;        //60mA
  50.                         }
  51.                 }
  52.                
  53.         else if((key1 == 1)&&(key2 == 0))
  54.                 {
  55.                         delayms(10);
  56.                         if((key1 == 1)&&(key2 == 0))
  57.                         {
  58.                                 PWM = 83;        //80mA
  59.                         }
  60.                 }

  61.         else
  62.                         PWM = 0;//120mA       

  63. }



  64. void main()
  65. {
  66.         TMOD = 0x00;            //定时器0,工作模式2,8位定时模式
  67.         TH0 = 0xff;              //写入预置初值(取值1-255,数越大PWM频率越高)
  68.         TL0 = 0xf5;              //写入预置值 (取值1-255,数越大PWM频率越高)
  69.         TR0 = 1;                //启动定时器
  70.         ET0 = 1;                //允许定时器0中断
  71.         EA = 1;                 //允许总中断
  72. // PWM = 125;              //初始速度
  73.         EN1 = 1;
  74.         EN2 = 1;
  75.         while(1)
  76.         {
  77. /*                PWM += 1;
  78.                 Delay10ms();
  79.                 Delay10ms();
  80.                 Delay10ms();
  81.                 if(PWM == 250)
  82.                 {
  83.                         PWM=0;
  84.                 }
  85.                 */
  86.                 keyscan();
  87.         }

  88. }
  89. /*定时器0中断模拟PWM*/
  90. void timer0() interrupt 1  
  91. {
  92.          t++;    //每次定时器溢出加1         
  93.          if(t == 250)   //PWM周期 100个单位
  94.                  {
  95.                           t=0;  //使t=0,开始新的PWM周期
  96.                           DIM1=0;  //输出低
  97.                           DIM2=0;  //输出低
  98.                  }         
  99.          if(PWM==t)  //按照当前占空比切换输出为高电平
  100.                  {  
  101.                                 DIM1=1;        //输出高
  102.                                 DIM2=1;
  103.                  }

  104. }
复制代码

所有资料51hei提供下载:
PWM.zip (21.04 KB, 下载次数: 19)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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