找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机PWM脉宽调制控制AC220V白炽灯程序

[复制链接]
跳转到指定楼层
楼主
用脉宽调制控制AC220V白炽灯程序,本人经过试验,基本正确。控制部分用普中开发板,SCR部分外接。详见硬件连接图:


单片机源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit K1=P1^0;           //按键1,PWM脉冲宽度值增加
  5. sbit K2=P1^1;           //按键2,PWM脉冲宽度值减少
  6. sbit LED=P1^3;          //LED显示
  7. sbit PWM_OUT=P1^4;      //PWM输出,SCR控制

  8. uchar PWM,num;          //PWM设定脉冲宽度值,num计算中断次数;
  9. void delay(uint ms)     //1ms延时
  10. {
  11.         uchar i;
  12.         while(ms--)
  13.         {
  14.                 for(i=0;i<120;i++);
  15.         }
  16. }

  17. void keyscan()          //按键扫描函数
  18. {
  19.         if(K1==0)             //按键1是否按下
  20.         {
  21.                 delay(50);          //去抖延时
  22.                 if(K1==0)           //按键1是否继续按下
  23.                 {
  24.                         if(PWM<32)        //PWM设定脉冲宽度值是否小于32
  25.                         {
  26.                                 PWM++;          //PWM设定脉冲宽度值加1
  27.                                 delay(100);
  28.                         }

  29.                 }
  30.         }
  31.         if(K2==0)             //按键2是否按下
  32.         {
  33.                 delay(50);          //去抖延时
  34.                 if(K2==0)           //按键2是否继续按下
  35.                 {
  36.                         if(PWM>1)         //PWM设定脉冲宽度值是否大于1
  37.                         {
  38.                                 PWM--;          //PWM设定脉冲宽度值减1
  39.                                 delay(100);
  40.                         }

  41.                 }
  42.         }
  43. }
  44. void init_t0()          //定时器T0初始化
  45. {
  46.         TMOD=0x01;            //方式1,16位定时器
  47.         TH0=(65536-500)/256;  //0,5ms定时
  48.         TL0=(65536-500)%256;  //0,5ms定时
  49.         EA=1;                 //开总中断
  50.         ET0=1;                //开定时器T0
  51.         TR0=1;                //启动定时器T0
  52. }
  53. void t0() interrupt 1   //T0中断服务函数
  54. {
  55.         TR0=0;                //停止T0定时器
  56.         TH0=(65536-500)/256;  //0,5ms定时
  57.         TL0=(65536-500)%256;  //0,5ms定时
  58.         num++;                //num计算中断次数+1
  59.         if(num>32)            //中断次数大于32
  60.         {
  61.                 num=0;              //中断次数=0
  62.         }
  63.         if(num<=PWM)          //中断次数<=PWM脉冲宽度
  64.         {
  65.                 LED=0x01;           //输出高电平,小灯灭
  66.     PWM_OUT=0x00;       //输出低电平,关闭SCR
  67.    
  68.         }
  69.         else
  70.         {
  71.                 LED=0x00;           //输出低电平,小灯亮
  72.     PWM_OUT=0x01;       //输出高电平,启动SCR
  73.         }
  74.         TR0=1;                //启动T0定时器,等待下一次中断
  75. ……………………

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

所有资料51hei提供下载:
PWM_键调LED显示脉宽控制SCR.rar (71.82 KB, 下载次数: 21)




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

使用道具 举报

沙发
ID:1 发表于 2017-6-29 22:36 | 只看该作者
楼主这样控制灯会闪吗?
回复

使用道具 举报

板凳
ID:149988 发表于 2017-6-30 06:46 | 只看该作者

RE: 单片机PWM脉宽调制控制AC220V白炽灯程序

admin 发表于 2017-6-29 22:36
楼主这样控制灯会闪吗?

程序还有待于改进,灯实际上还是以减低频率的方式进行亮度调整,只有脉宽最大时,灯的亮度是不闪烁的。如果是用来调整温度还是没有问题的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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