找回密码
 立即注册

QQ登录

只需一步,快速开始

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

发个我用了很久的单片机PWM调节程序,0-9共10档调节。

[复制链接]
跳转到指定楼层
楼主
是基于51单片机制作的,此pwm程序注释的很多,特别适合新手学习。本程序使用定时实现定时,使用开关语句实现档位调节。上电时档位0,停止时档位0,最大可加至档位9。 PWM-十档增减.rar (54.38 KB, 下载次数: 63)
仿真是新弄的Proteus 8 的文件。


单片机源程序如下:
  1. /*直流输出的脉宽调整,0-9共
  2. 10档9为最大输出,0-9的变
  3. 化规律为最小-最大,用两键实现增和减。
  4. 朱旭东  
  5. 2011年11月4日 使用STC15F104E时,无显示, 而且只有P3口 */

  6. #include <reg52.h>
  7. sbit KEY2 = P3^2;
  8. sbit KEY1 = P3^3;
  9. sbit KEY3 = P3^4;
  10. sbit PWM =P3^5;
  11. sbit PWM1 = P3^1;
  12. unsigned char CYCLE; //定义周期 如果是10 则周期是10 x 定时时间
  13. unsigned char PWM_ON ;//定义高电平时间
  14. void delay(unsigned int cnt)
  15. {
  16. while(--cnt);
  17. }

  18. main()
  19. {
  20. unsigned char PWM_Num=0;//定义档位

  21. P0=0x3f;
  22. P3=0xff;//因为104E上电时P3.3为低电平
  23. TMOD |=0x01;//定时器设置 1ms in 12M crystal
  24. TH0=(65536-1000)/256;
  25. TL0=(65536-1000)%256;//定时1mS

  26. IE= 0x82;  //打开中断
  27. TR0=1;

  28. CYCLE = 20;// 时间可以调整 这个是20步调整 周期20ms 如果闪烁可减小定时或周期
  29. while(1)
  30.   {
  31. if(!KEY1)//加
  32.   {
  33.    delay(60000);//104延时, 使用51时需要60000/12
  34.    if(!KEY1)
  35.      {
  36.       while(!KEY1);//松手检查
  37.       PWM_Num++;
  38.           if(PWM_Num==10)PWM_Num=9;
  39.        switch(PWM_Num){
  40.        case 0:P0=0x3f;PWM_ON=0;break;//高电平时长
  41.        case 1:P0=0x06;PWM_ON=2;break;
  42.        case 2:P0=0x5b;PWM_ON=4;break;
  43.        case 3:P0=0x4f;PWM_ON=6;break;
  44.        case 4:P0=0x66;PWM_ON=8;break;
  45.        case 5:P0=0x6d;PWM_ON=10;break;
  46.        case 6:P0=0x7d;PWM_ON=12;break;
  47.        case 7:P0=0x07;PWM_ON=16;break;
  48.        case 8:P0=0x7f;PWM_ON=18;break;
  49.        case 9:P0=0x6f;PWM_ON=20;break;
  50.        default:break;
  51.      }
  52.    }
  53.   }

  54. if(!KEY2)//减
  55.   {
  56.    delay(60000);//104延时, 使用51时需要60000/12
  57.    if(!KEY2)
  58.      {
  59.       while(!KEY2);//松手检查
  60.       PWM_Num--;
  61.           if(PWM_Num==-1)PWM_Num=0;
  62.        switch(PWM_Num){
  63.        case 0:P0=0x3f;PWM_ON=0;break;//高电平时长
  64.        case 1:P0=0x06;PWM_ON=2;break;
  65.        case 2:P0=0x5b;PWM_ON=4;break;
  66.        case 3:P0=0x4f;PWM_ON=6;break;
  67.        case 4:P0=0x66;PWM_ON=8;break;
  68.        case 5:P0=0x6d;PWM_ON=10;break;
  69.        case 6:P0=0x7d;PWM_ON=12;break;
  70.        case 7:P0=0x07;PWM_ON=16;break;
  71.        case 8:P0=0x7f;PWM_ON=18;break;
  72.        case 9:P0=0x6f;PWM_ON=20;break;
  73.        default:break;
  74.      }
  75.    }
  76.   }

  77.   if(!KEY3)  //停止
  78.   {
  79.    delay(60000);//104延时, 使用51时需要60000/12
  80.    if(!KEY3)
  81.      {
  82.       while(!KEY3);//松手检查
  83.       PWM_ON=0;
  84.       PWM_Num=0;
  85.       P0=0x3f;
  86.      }
  87.      }

  88. }
  89. }


  90. /********************************/
  91. /*      定时中断                */
  92. /********************************/
  93. void tim(void) interrupt 1 using 1
  94. {
  95. unsigned char count; //
  96. TH0=(65536-1000)/256;
  97. TL0=(65536-1000)%256;//定时1mS

  98. if (count==PWM_ON)//达到所设高电平次数
  99. ……………………

  100. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码



评分

参与人数 2黑币 +55 收起 理由
yh2393105053 + 5 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:196311 发表于 2017-6-21 21:30 | 只看该作者
刚好想搞pwm,下载参考一下,谢谢
回复

使用道具 举报

板凳
ID:211296 发表于 2017-6-28 22:37 来自手机 | 只看该作者
jxdianqi 发表于 2017-6-21 21:30
刚好想搞pwm,下载参考一下,谢谢

谢谢,好东西
回复

使用道具 举报

地板
ID:215255 发表于 2018-1-8 16:56 | 只看该作者
Proteus 8的原理图没有给出啊
回复

使用道具 举报

5#
ID:248394 发表于 2018-1-13 16:56 | 只看该作者
MAKR 刚好想找相关的资料
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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