找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC单片机+DM134实现LED多段控制(16段,8段,4段16级灰度拖尾)源程序+原理图

[复制链接]
跳转到指定楼层
楼主
219程序为:LED七彩跳变+渐变的转换YX-222(LED流星灯8段16段-软件生成生成数据1
YX-225(用DM134实现16段,8段,4段16级灰度拖尾)
YX-231(红外遥控LED跳变渐变定色)


YX-222(LED流星灯8段16段-软件生成生成数据1

电路原理图如下:

单片机源程序如下:
  1. //============================================================================
  2. //================翼芯科技 LED流星灯8段16段==软件生成生成数据=================
  3. //============================================================================   
  4. //  此源码版权属 翼芯科技 全权享有,如欲引用,敬请署名并告知
  5. //          严禁随意用于商业目的,违者必究,后果自负
  6. //程序说明:本程序用于实现LED流星灯8段16段,不同步.IC插到U9位置.      
  7. //文件名称:main.C  
  8. //日期:    2011/01/23   
  9. //版本:    1.0  
  10. //C编译器:  keil 8.05
  11. //=============================================================================                    
  12. #include <STC12C5AXX.H>
  13. #define uchar unsigned char
  14. #define uint unsigned int
  15. #define nop() _nop_();_nop_()


  16. sbit DAT = P3^2;        //DM134数据输出
  17. sbit CLK  = P3^3;    //DM134时钟输出
  18. sbit LE   = P3^4;        //DM134锁存口
  19. sbit EN   = P4^4;        //DM134使能口


  20. /******************************************************************
  21. - 功能描述:ms延时  
  22. - 隶属模块:无
  23. - 函数属性:无
  24. - 参数说明:无      
  25. - 返回说明:无
  26. - 注:.....
  27. ******************************************************************/
  28. void Delay(uint ms)
  29. {
  30.   uint a,b;
  31.     for(a=ms;a!=0;a--)         
  32.          for(b=250;b!=0;b--)        
  33.          ;
  34. }

  35. /******************************************************************
  36. - 功能描述:DM134传送一个字的数据,        高位在前
  37. - 隶属模块:无
  38. - 函数属性:无
  39. - 参数说明:无      
  40. - 返回说明:无
  41. - 注:.....
  42. ******************************************************************/
  43. void DM134(uint dat)
  44. {
  45.   uchar i;
  46.   for(i=16;i!=0;i--)
  47.    {
  48.             CLK=0;        
  49.       DAT=dat&0x01;      //低位在前
  50.       dat=dat>>1;               //左移一位
  51.           CLK=1;                  //上升延数据移入  
  52.    }
  53.   LE=1;                  //寄存器数据更新
  54.   LE=0;
  55. }


  56. /******************************************************************
  57. - 功能描述:实现8段拖尾效果
  58. - 隶属模块:无
  59. - 函数属性:无
  60. - 参数说明:无      
  61. - 返回说明:无
  62. - 注:.....
  63. ******************************************************************/
  64. void Grayscale8(uchar speed)
  65. {
  66.     uchar x,y,f;                               //上半
  67.     uint z=0x8000, gray;

  68.     for(y=8;y>0;y--)
  69.      {  
  70.                 for(f=speed;f>0;f--)    //流动速度
  71.                  {        
  72.                    gray=z;
  73.                    for(x=8;x>0;x--)  
  74.             {   
  75.               DM134(gray);
  76.                           gray>>=1;
  77.               gray&=z;
  78.                         }
  79.                  }
  80.                  z>>=1;
  81.                 z|=0x8000;
  82.      }  

  83.         z=0x7f80;
  84.     for(y=16;y>0;y--)                         //下半
  85.      {  
  86.                 for(f=speed;f>0;f--)    //流动速度
  87.                  {
  88.                   gray=z;
  89.                   for(x=8;x>0;x--)  
  90.             {   
  91.               DM134(gray);
  92.                              gray>>=1;
  93.               gray&=z;
  94.                         }
  95.                  }
  96.                  z>>=1;
  97.      }

  98. }

  99. /******************************************************************
  100. - 功能描述:实现16段拖尾效果
  101. - 隶属模块:无
  102. - 函数属性:无
  103. - 参数说明:无      
  104. - 返回说明:无
  105. - 注:.....
  106. ******************************************************************/
  107. void Grayscale16(uchar speed)
  108. {
  109.     uchar x,y,f;
  110.     uint z=0x8000, gray;
  111.     for(y=16;y>0;y--)
  112.      {  
  113.                 for(f=speed;f>0;f--)      //流动速度
  114.                  {
  115.                    gray=z;
  116.                    for(x=16;x>0;x--)
  117.             {   
  118.               DM134(gray);
  119.                           gray>>=1;
  120.               gray&=z;
  121.                         }
  122.                  }
  123.             z>>=1;        
  124.            z|=0x8000;;
  125.      }  
  126.         z=0x7fff;
  127.     for(y=16;y>0;y--)
  128.      {  
  129.                 for(f=speed;f>0;f--)      //流动速度
  130.                  {
  131.                   gray=z;
  132.                   for(x=16;x>0;x--)
  133.             {   
  134.               DM134(gray);
  135.                           gray>>=1;
  136.               gray&=z;
  137.                         }
  138.                  }
  139.                  z>>=1;
  140.      }  
  141. }

  142. /******************************************************************
  143. - 功能描述:主函数   
  144. - 隶属模块:无
  145. - 函数属性:无
  146. - 参数说明:无      
  147. - 返回说明:无
  148. - 注:.....
  149. ******************************************************************/
  150. void main(void)
  151. {  
  152.     uchar CNT;

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

  156.     P4M1=0X00;                              //P4口设为推挽输出
  157.     P4M0=0XFF;

  158.         EN=0;

  159.         P0=0;
  160.         while(1)
  161.           {
  162.          for(CNT=0;CNT<3;CNT++)
  163.            {
  164.                       Grayscale16(100); //16段
  165.                           Delay(100);
  166.                 }

  167.          for(CNT=0;CNT<3;CNT++)
  168.           {
  169.                       Grayscale8(250);  //8D段
  170.                         Delay(100);
  171.                   }
  172.                           

  173.           }
  174. }
复制代码



  1. //============================================================================
  2. //================翼芯科技 用DM134实现16段,8段,4段16级灰度拖尾================
  3. //============================================================================   
  4. //  此源码版权属 翼芯科技 全权享有,如欲引用,敬请署名并告知
  5. //          严禁随意用于商业目的,违者必究,后果自负
  6. //程序说明:本程序用DM134实现16段,8段,4段16级灰度拖尾,各重复1次,不同步.IC插到U9位置.      
  7. //文件名称:main.C  
  8. //日期:    2011/01/23   
  9. //版本:    1.0  
  10. //C编译器:  keil 8.05
  11. //=============================================================================                    
  12. #include <STC12C5AXX.H>
  13. #define uchar unsigned char
  14. #define uint unsigned int


  15. sbit DAT  = P3^2;        //DM134数据输出
  16. sbit CLK  = P3^3;    //DM134时钟输出
  17. sbit LE   = P3^4;        //DM134锁存口
  18. sbit EN   = P4^4;        //DM134使能口


  19. uchar code MOV_CNT[3]={31,24,20};
  20. uchar code DEC_CNT[3]={1,2,4};
  21. uchar  DAT_BUF[17]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  22. uint   DATA_REG;           //DM134输出数据变量

  23. /******************************************************************
  24. - 功能描述:延时函数
  25. - 隶属模块:无
  26. - 函数属性:无
  27. - 参数说明:无           
  28. - 返回说明:无
  29. - 注:.....
  30. ******************************************************************/
  31. delayms(uint x)
  32. {
  33.          uint t;
  34.         while(x--)
  35.         for(t=1500;t>0;t--);
  36. }

  37. /******************************************************************
  38. - 功能描述:向DM134发送数据   
  39. - 隶属模块:无
  40. - 函数属性:无
  41. - 参数说明:无      
  42. - 返回说明:无
  43. - 注:.....
  44. ******************************************************************/                                                         
  45. void sendbyte(uint byte)
  46. {   
  47.         uint num,i;
  48.         num=byte;      
  49.                    for(i=16;i>0;i--)
  50.         {
  51.                  CLK=0;
  52.          DAT=num&0x8000;
  53.          num=num<<1;      
  54.          CLK=1;               
  55.          }
  56.         LE=1;               
  57.         LE=0;
  58. }
  59. /******************************************************************
  60. - 功能描述:PMW输出
  61. - 隶属模块:无
  62. - 函数属性:无
  63. - 参数说明:无      
  64. - 返回说明:无
  65. - 注:.....
  66. ******************************************************************/
  67. void SCAN(void)
  68. {
  69.     uchar SPEED,PWM;
  70.         for(SPEED=100;SPEED>0;SPEED--)                         //调速度
  71.            {                  
  72.              for(PWM =16;PWM>0;PWM--)
  73.                    {
  74.                      (DAT_BUF[1]  >  PWM)? (DATA_REG |= 0X8000) : (DATA_REG &=0X7FFF);
  75.                      (DAT_BUF[2]  >  PWM)? (DATA_REG |= 0X4000) : (DATA_REG &=0XBFFF);
  76.                      (DAT_BUF[3]  >  PWM)? (DATA_REG |= 0X2000) : (DATA_REG &=0XDFFF);
  77.                  (DAT_BUF[4]  >  PWM)? (DATA_REG |= 0X1000) : (DATA_REG &=0XEFFF);
  78.                  (DAT_BUF[5]  >  PWM)? (DATA_REG |= 0X0800) : (DATA_REG &=0XF7FF);
  79.                  (DAT_BUF[6]  >  PWM)? (DATA_REG |= 0X0400) : (DATA_REG &=0XFBFF);
  80.                      (DAT_BUF[7]  >  PWM)? (DATA_REG |= 0X0200) : (DATA_REG &=0XFDFF);
  81.                      (DAT_BUF[8]  >  PWM)? (DATA_REG |= 0X0100) : (DATA_REG &=0XFEFF);
  82.                      (DAT_BUF[9]  >  PWM)? (DATA_REG |= 0X0080) : (DATA_REG &=0XFF7F);
  83.                      (DAT_BUF[10] >  PWM)? (DATA_REG |= 0X0040) : (DATA_REG &=0XFFBF);
  84.                      (DAT_BUF[11] >  PWM)? (DATA_REG |= 0X0020) : (DATA_REG &=0XFFDF);
  85.                  (DAT_BUF[12] >  PWM)? (DATA_REG |= 0X0010) : (DATA_REG &=0XFFEF);
  86.                  (DAT_BUF[13] >  PWM)? (DATA_REG |= 0X0008) : (DATA_REG &=0XFFF7);
  87.                  (DAT_BUF[14] >  PWM)? (DATA_REG |= 0X0004) : (DATA_REG &=0XFFFB);
  88.                      (DAT_BUF[15] >  PWM)? (DATA_REG |= 0X0002) : (DATA_REG &=0XFFFD);
  89.                      (DAT_BUF[16] >  PWM)? (DATA_REG |= 0X0001) : (DATA_REG &=0XFFFE);
  90.                          sendbyte(DATA_REG);  //输出DM134数据
  91.                    }
  92.            }
  93. }


  94. /******************************************************************
  95. - 功能描述:主函数   
  96. - 隶属模块:无
  97. - 函数属性:无
  98. - 参数说明:无      
  99. - 返回说明:无
  100. - 注:.....
  101. ******************************************************************/
  102. void main(void)
  103. {  
  104.     uchar i,j,SEG,REPEAT;

  105.   //M1:M0  0:0为标准51;0:1输出;1:0输入;1:1开漏输出
  106.     P3M1=0X00;                                   //P0口设为推挽输出
  107.     P3M0=0XFF;
  108.     P4M1=0X00;                              //P4口设为推挽输出
  109.     P4M0=0XFF;
  110.     EN=0;        
  111.                                                   
  112.     P0=0;   



  113.         while(1)
  114.           {
  115.      for(SEG=0;SEG<3;SEG++)                                                //段指针
  116.            {
  117.              for(REPEAT=1;REPEAT>0;REPEAT--)                //重复次数
  118.                   {
  119.                    DAT_BUF[0]=16;                                            //灰度初始化
  120.                    for(i=0;i<MOV_CNT[SEG];i++)                //整个数据左移1次
  121.                      {
  122.                      for(j=16;j>0;j--)                            //16个数据向后移动一位
  123.                     {
  124.                         DAT_BUF[j]=DAT_BUF[j-1];                    
  125.                     }
  126.                        SCAN();                                                    //PWM输出
  127.                        if(DAT_BUF[0]!=0)                            //数据减
  128.                           DAT_BUF[0]-=DEC_CNT[SEG];
  129.                      }
  130.                         delayms(300);                                        //延时
  131.                   }
  132.                 }
  133.          }
  134. }

复制代码
全部程序均可完全编译与使用
所有资料51hei提供下载:
附件.zip (207.64 KB, 下载次数: 175)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:3802 发表于 2018-10-13 15:30 | 只看该作者
多人顶,加放SD控制的
回复

使用道具 举报

板凳
ID:243748 发表于 2019-1-8 21:36 来自手机 | 只看该作者
楼主好强大,我也做一个玩下
回复

使用道具 举报

地板
ID:60026 发表于 2020-2-7 17:33 | 只看该作者
谢谢分享!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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