找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机控制RGB LED七彩跳变+渐变的转换电路原理图+源程序

[复制链接]
跳转到指定楼层
楼主
ID:403439 发表于 2018-10-14 15:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

单片机源程序如下:
  1. //============================================================================
  2. //======翼芯科技 LED七彩跳变+渐变转换=======指拨开关SW2的1位拨向上============
  3. //============================================================================   
  4. //  此源码版权属 翼芯科技 全权享有,如欲引用,敬请署名并告知
  5. //程序说明:本程序用于实现LED七彩跳变+渐变转换,按KEY3为跳变,按KEY4为渐变,不同步.IC插到U9位置.指拨开关SW2的1位拨向上.      
  6. //文件名称:main.C  
  7. //日期:    2011/01/23   
  8. //版本:    1.0  
  9. //C编译器:  keil 8.05
  10. //=============================================================================                    
  11. #include <STC12C5AXX.H>
  12. #define uchar unsigned char
  13. #define uint unsigned int

  14. sbit  RED1   = P0^0;               //红色IO口定义
  15. sbit  GREEN1 = P0^1;               //绿色IO口定义  
  16. sbit  BLUE1  = P0^2;               //蓝色IO口定义





  17. sbit  KEY3   = P3^2;                           //按键3
  18. sbit  KEY4   = P3^3;                           //按键4

  19. bit   FLAG_MODE;

  20. uchar T_CNT3;
  21. uchar T_CNT4;
  22. uchar MODE;


  23. uchar code TAB1[7]={1,2,4,3,6,5,7};                       //跳变数据
  24. uchar code TAB2[14]={1,3,3,2,2,6,6,4,4,5,5,7,7,1};        //跳变数据  {1,3,2,6,4,5,7,1};        //跳变数据
  25. uchar DPTR;   
  26. uchar PWM_HL;
  27. uchar REPEAT;
  28. uchar PWM_H;  
  29. uchar PWM_L;



  30. /******************************************************************
  31. - 功能描述:定时器0中断,中断时间为1MS,实现按键检测.
  32. - 隶属模块:无
  33. - 函数属性:无
  34. - 参数说明:无           
  35. - 返回说明:无
  36. - 注:.....
  37. ******************************************************************/
  38. void TIME0_INT() interrupt 1
  39. {
  40.         TH0  = (65535-2000)/256;
  41.         TL0  = (65535-2000)%256;
  42.     if (T_CNT3 !=0)
  43.            {                                 
  44.         T_CNT3--;                        
  45.         if (T_CNT3==0 && KEY3==0)        
  46.                    {         
  47.                         MODE=0;
  48.                         FLAG_MODE=1;
  49.            }
  50.        }
  51.           else if (KEY3==0) T_CNT3=10;                                             
  52.       if (T_CNT4 !=0)
  53.              {                              
  54.           T_CNT4--;                     
  55.           if (T_CNT4==0 && KEY4==0)
  56.                     {                           
  57.                         MODE=1;
  58.                         FLAG_MODE=1;
  59.             }
  60.          }
  61.             else if (KEY4==0) T_CNT4=10;   
  62.                                           
  63. }


  64. /******************************************************************
  65. - 功能描述:红绿蓝LED输出
  66. - 隶属模块:无
  67. - 函数属性:无
  68. - 参数说明:无           
  69. - 返回说明:无
  70. - 注:.....
  71. ******************************************************************/
  72. SET_RGB(uchar LED_REG)
  73. {
  74.     uchar LEDDATA;
  75.         LEDDATA=LED_REG;
  76.         if(LEDDATA&0X01)
  77.             RED1=1;
  78.         else
  79.             RED1=0;
  80.         if(LEDDATA&0X02)
  81.             GREEN1=1;
  82.         else
  83.             GREEN1=0;
  84.         if(LEDDATA&0X04)
  85.             BLUE1=1;
  86.         else
  87.             BLUE1=0;
  88. }


  89. /******************************************************************
  90. - 功能描述:延时函数
  91. - 隶属模块:无
  92. - 函数属性:无
  93. - 参数说明:无           
  94. - 返回说明:无
  95. - 注:.....
  96. ******************************************************************/
  97. delayms(uint x)
  98. {
  99.         uint t;
  100.         while(x--)
  101.         for(t=1500;t>0;t--)
  102.           {
  103.                 if(FLAG_MODE)
  104.           {
  105.            return;
  106.           }
  107.           }


  108. }

  109. /******************************************************************
  110. - 功能描述:延时函数
  111. - 隶属模块:无
  112. - 函数属性:无
  113. - 参数说明:无           
  114. - 返回说明:无
  115. - 注:.....
  116. ******************************************************************/
  117. delayus(uint x)
  118. {
  119.         uint t;
  120.         while(x--)
  121.         for(t=15;t>0;t--);
  122. }

  123. /******************************************************************
  124. - 功能描述: PWM输出
  125. - 隶属模块:无
  126. - 函数属性:无
  127. - 参数说明:无   
  128. - 返回说明:无
  129. - 注:.....
  130. ******************************************************************/
  131. SHADE()
  132.    {
  133.       uchar i,j;
  134.       for(i=REPEAT;i>0;i--)                   //重复次数
  135.        {

  136.             for(j=PWM_HL;j>0;j--)             //PWM减
  137.              {
  138.                            if(FLAG_MODE)
  139.                   {
  140.                     return;
  141.                   }
  142.                PWM_H=j;                       //PWM_H值
  143.                PWM_L=PWM_HL-j+1;              //PWM_L值
  144.                SET_RGB(TAB2[DPTR]);
  145.                for(;PWM_H>0;PWM_H--)
  146.                                delayus(1);      
  147.                            SET_RGB(TAB2[DPTR+1]);         //输出            
  148.                for(;PWM_L>0;PWM_L--)
  149.                                delayus(1);
  150.              }  //j
  151.        }  //i     

  152.    }


  153. /******************************************************************
  154. - 功能描述:主函数
  155. - 隶属模块:无
  156. - 函数属性:无
  157. - 参数说明:无      
  158. - 返回说明:无
  159. - 注:.....
  160. ******************************************************************/
  161. void  main()
  162.     {


  163.              TMOD = 0x01;                          //定时器0工作在16位的定时模式.
  164.             TH0  = (65535-2000)/256;  //定时器0高位设定
  165.             TL0  = (65535-2000)%256;  //定时器0低位设定
  166.             IE   = 0x82;                          //开总中断和定时器0中断
  167.         TR0  = 1;                                  //开定时器0

  168. //M1:M0  0:0为标准51;0:1输出;1:0输入;1:1开漏输出
  169.          P0M1=0X00;                              //P0口设为推挽输出
  170.          P0M0=0XFF;


  171.          P0=0;
  172.          MODE=0;
  173.                  FLAG_MODE=0;

  174.          PWM_HL=250;
  175.          REPEAT=1;
  176.          while(1)
  177.           {
  178.                     switch  (MODE)
  179.               {
  180.                            case 0:
  181.                for(DPTR=0;DPTR<7;DPTR++)           //跳变
  182.                   {
  183.                    SET_RGB(TAB1[DPTR]);         
  184.                    delayms(1000);                  //延时1秒
  185.                                    if(FLAG_MODE)
  186.                      {
  187.                       FLAG_MODE=0;
  188.                       break;
  189.                      }                           
  190.                    }break;                        
  191.                            case 1:   
  192.                for(DPTR=0;DPTR<14;DPTR=DPTR+2)     //渐变
  193.                    {
  194.                      SHADE();         
  195.                      delayms(1000);                //延时1秒
  196.                                          if(FLAG_MODE)
  197.                      {
  198.                       FLAG_MODE=0;
  199.                       break;
  200.                      }                           
  201.                    }break;
  202.                                 
  203.                            }
  204.           }
  205.     }
复制代码

所有资料51hei提供下载(原理图):
http://www.51hei.com/bbs/dpj-137471-1.html


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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