找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机PWM控制流水灯渐亮渐灭程序

[复制链接]
跳转到指定楼层
楼主
ID:102668 发表于 2016-1-16 05:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. //跳线设置:默认跳线位
  2. #include <reg51.h>      
  3. typedef unsigned char uchar;
  4. #define Ton 40
  5. #define LED P1
  6. sbit leds=P1^4;
  7. sbit LED0 = P1^0;
  8. sbit LED1 = P1^1;
  9. sbit LED2 = P1^2;
  10. sbit LED3 = P1^3;
  11. sbit LED4 = P1^4;
  12. sbit LED5 = P1^5;
  13. sbit LED6 = P1^6;
  14. sbit LED7 = P1^7;
  15.       
  16. unsigned char Maikuan=0;
  17. static unsigned char ledon[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  18. uchar Occupy_led; //占空比越大,灯越亮
  19. bit light;
  20. uchar m;     
  21. void Inittime()
  22.       {
  23.           TMOD = 0x02; //定时器0,工作方式2,自动重装
  24.           TH0 = 256-Ton;
  25.           TL0 = 256-Ton;
  26.           ET0 = 1;
  27.          EA = 1;
  28.          TR0 = 1;
  29.      }
  30. //定时器0中断
  31.      void time0() interrupt 1 using 0
  32.       {
  33.            Maikuan++;
  34.       }
  35. void main()
  36.        {
  37.           unsigned char i = 0,j = 0; //初始化i,j
  38.     leds=0;
  39.           Inittime();
  40.          while (1)
  41.            {
  42.                //第1,3,5,7个灯半亮,其余的全亮。            
  43.             for(i=254; i>0; i--)      
  44.             {
  45.                 while ( Maikuan!=20)
  46.                 {
  47.                         LED = 0x00;
  48.                 }
  49.                 while ( Maikuan!=200)
  50.                 {
  51.                         LED = 0x55;
  52.                 }
  53.    
  54.                Maikuan = 0;
  55.             }

  56.    //最难的:8个灯从第一个开始依次渐亮,直到最后一个。再从最后一个起渐暗,直到第一个。如此循环往复。
  57.    for(j = 0;j<=7;j++)
  58.    {
  59.     i = 0;      
  60.     while(i!=255)     // 由暗变亮
  61.         {
  62.           if( Maikuan == 0) // 点亮
  63.         {
  64.             LED = ledon[j];
  65.        }
  66.        if(Maikuan == i) // 熄灭
  67.         {
  68.            LED = 0xff;
  69.        }
  70.       if( Maikuan== 255)   
  71.         {
  72.             i++;     
  73.           }
  74.        }
  75.    }
  76.    for(j=7;j>=0;j--)
  77.    {
  78.      i = 0;     
  79.     while(i!=255)     // 由亮变暗
  80.    {
  81.      if(Maikuan == 0) // 熄灭
  82.      {
  83.              LED = 0xff;
  84.       }
  85.       if( Maikuan == i) // 点亮
  86.        {
  87.          LED = ledon[j];
  88.        }
  89.     if( Maikuan == 255)
  90.       {
  91.             i++;
  92.      }
  93.    }  
  94. }
  95.   
  96.    //所有的灯逐渐从暗到全亮,再由全亮到暗。

  97.    for (m=254; m>0; m--)
  98.       {            
  99.           while (Maikuan!=Occupy_led)
  100.           {
  101.                   LED = 0x00;
  102.           }

  103.           while (Maikuan!=127)
  104.           {
  105.                   LED = 0xff;
  106.           }
  107.       
  108.          Maikuan = 0;

  109.           if (light)      
  110.           {
  111.                  Occupy_led++;      
  112.           }
  113.           else
  114.           {
  115.                  Occupy_led--;
  116.           }

  117.           if (Occupy_led==128)
  118.           {
  119.                  Occupy_led = 127;
  120.                   light = !light;   
  121.           }
  122.           if (Occupy_led>128)
  123.           {
  124.                   Occupy_led = 0;
  125.                   light = !light;
  126.           }
  127.       }            
  128. }
  129. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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