找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 7541|回复: 4
收起左侧

单片机一键PWM调光+开关源程序

  [复制链接]
ID:140489 发表于 2018-6-29 09:23 | 显示全部楼层 |阅读模式
频率370Hz,用手机摄像头看,没有频闪
仿真LED会闪烁,主要看波形;实物不会闪烁,很稳定;代码简短
QQ截图20180629091959.jpg
有完整代码如下
  1. /***********************************************************************/
  2. /***功能:按键控制PWM对LED灯调光,短按开关,长按调光 亮---暗 ----亮 循环 ***********/
  3. /***改变j的值就改变了占空比,初值50%      */

  4. /*** STC89C52  @ 12MHz                    */
  5. /***********************************************************************/
  6. #include<reg52.h>
  7. typedef unsigned char U8;
  8. typedef unsigned int  U16;
  9. /*---------------------------------------------------------------------*/
  10. /*--   端口定义                 ---------------------------------------*/
  11. /*---------------------------------------------------------------------*/
  12. #define PORT_1 P1
  13. sbit KEY1 = P3^0;
  14. U8 j,knum,temp=127;        

  15. /*----------按键扫描--------------------*/
  16. void keyscan()
  17. {
  18.         static        U16 x;        //消抖延时变量
  19.         
  20.         if(KEY1==0)         //
  21.         {
  22.                 x++;        //按键消抖
  23.                 if(x>500)                //长按亮度调节
  24.                 {        knum=0;
  25.                         
  26.                         if(knum==0)
  27.                         {
  28.                                 if(j<251)
  29.                                         j+=5;
  30.                                 else
  31.                                         j=3;        //写j=3;加到最大亮度后回到最小亮度,又开始加,如此循环
  32.                                 temp=j;
  33.                         }
  34.                         x=450;
  35.                 }
  36.                
  37.         }
  38.         else
  39.         {
  40.                 if(x>50 && x<500) //短按 开关灯
  41.                 {
  42.                         x=0;
  43.                         if(knum==1)
  44.                         {
  45.                                 if(j>3)
  46.                                 { j=0;}             //关灯
  47.                                 else j=temp;        //开灯,保持前次设置的亮度
  48.                         }
  49.                         knum ++;
  50.                         if(knum>1)
  51.                                 knum=1;
  52.                 }
  53.         }

  54. }

  55. /*---------------------------------------------------------------------*/
  56. /*--   主程序                   ---------------------------------------*/
  57. /*---------------------------------------------------------------------*/
  58. void main()
  59. {
  60.         U8 i;
  61.         PORT_1=0Xff;
  62.         j=127;                                                          //改变j的值就改变了占空比,初值50%
  63.         while(1)
  64.         {
  65.                 for(i=255;i>0;i--)
  66.                 //        PORT_1=(j<i)?0x00:0xff;           //三目运算  这句用在拉电流
  67.                         PORT_1=(j<i)?0xff:0x00;           //这句用在灌电流
  68.                 keyscan();

  69.         }
  70. }
  71. /*---------------------------------------------------------------------*/
  72. /*--   程序结束                 ---------------------------------------*/
  73. /*---------------------------------------------------------------------*/
复制代码

评分

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

查看全部评分

回复

举报

ID:386381 发表于 2018-8-20 11:54 来自触屏版 | 显示全部楼层
谢谢分享
回复

举报

ID:388099 发表于 2018-8-20 14:11 | 显示全部楼层
实用资料,谢谢。
回复

举报

ID:407566 发表于 2018-11-27 16:27 | 显示全部楼层
那接线是只接按键嘛,那灯怎么接
回复

举报

ID:140183 发表于 2021-5-9 07:21 | 显示全部楼层
过过过儿 发表于 2018-11-27 16:27
那接线是只接按键嘛,那灯怎么接

P1接灯
回复

举报

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

本版积分规则

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

Powered by 单片机教程网

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