找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机RGB流水灯控制12个LED灯的程序怎么写

  [复制链接]
跳转到指定楼层
楼主
刚入单片机的小白,请高手帮忙指点一二,流水灯左半边P0.0口低位流向高位P0.7口,再从P0.7流向P1.0口再流向P1.3结束,                                                                             右半边P2.7口低位流向高位P2.0口,再从P2.0流向P1.7口再流向P1.4结束,
                                                                  或左右两边同时流向P0.0到P1.3              P2.7到P1.4

51hei图片20191204215112.jpg (3.1 MB, 下载次数: 63)

51hei图片20191204215112.jpg

51hei图片20191204215127.jpg (3.65 MB, 下载次数: 63)

51hei图片20191204215127.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:96682 发表于 2019-12-5 02:31 来自手机 | 只看该作者
心形流水灯程序大把,花样繁多,修改一下就能实现楼主想要的效果
回复

使用道具 举报

板凳
ID:150776 发表于 2019-12-5 07:16 来自手机 | 只看该作者
网上搜索一下,很多这样的例
回复

使用道具 举报

地板
ID:584814 发表于 2019-12-5 09:15 | 只看该作者
网上免费的程序很多抄一下就可以,如果不想动手可以直接挂价招标。
回复

使用道具 举报

5#
ID:235200 发表于 2019-12-5 13:14 | 只看该作者
如果刚学单片机,建议用顺序程序去实现你的每一步,如
P0=0xFE;   第一步
P2=0x7F;
延时;
P0=0xFD;   第二步
P2=0xBF;
延时;
P0=0xFB;   第三步
P2=0xDF;
延时;
P0=0xF7;   第四步
P2=0xEF;
延时;
……
回复

使用道具 举报

6#
ID:608007 发表于 2019-12-5 16:14 | 只看该作者
csmyldl 发表于 2019-12-5 13:14
如果刚学单片机,建议用顺序程序去实现你的每一步,如
P0=0xFE;   第一步
P2=0x7F;

那样写太麻烦 ,还是只想P0口8个LED灯 怎么接P1口的低4位LED灯程序,  还是感谢你
回复

使用道具 举报

7#
ID:608007 发表于 2019-12-5 16:17 | 只看该作者
man1234567 发表于 2019-12-5 09:15
网上免费的程序很多抄一下就可以,如果不想动手可以直接挂价招标。

用的位选P3口控制RGB三色 P0,P1,P2,段选,程序不好找
回复

使用道具 举报

8#
ID:608007 发表于 2019-12-5 16:19 | 只看该作者
wc86110 发表于 2019-12-5 02:31
心形流水灯程序大把,花样繁多,修改一下就能实现楼主想要的效果

单色灯程序都好找 ,P0口怎么接P1口的低4位的程序
回复

使用道具 举报

9#
ID:606366 发表于 2019-12-13 17:09 | 只看该作者
我寻思你这也不是写RGB灯的思路啊
回复

使用道具 举报

10#
ID:591676 发表于 2019-12-13 19:33 | 只看该作者
网上有很多这种的,只不过是led灯数量多少的问题,修改一下就能满足你的要求
回复

使用道具 举报

11#
ID:608007 发表于 2019-12-16 15:40 | 只看该作者
张x小呀 发表于 2019-12-13 19:33
网上有很多这种的,只不过是led灯数量多少的问题,修改一下就能满足你的要求

求高手给我一个程序
回复

使用道具 举报

12#
ID:635583 发表于 2019-12-16 16:04 | 只看该作者
这个很简单,,其那不久才做过。。刚才看了一下,没有了,删掉了。。你可以去看看51单片机论坛,,可以找到,程序和仿真都有
回复

使用道具 举报

13#
ID:608007 发表于 2019-12-27 17:24 | 只看该作者
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar i;         //////i=100///////
uchar a;
unsigned char table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff};///高到低位P0,P2口/////
unsigned char table2[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0X00};////高到低位P0,P2口////
unsigned char table3[]={0x80,0xc0,0xe0,0xf0,0x00,0x00,0x00,0x00};/////高4位依次点亮每个灯P1口//////
unsigned char table4[]={0x01,0x03,0x07,0x0f,0x00,0x00,0x00,0x00};//////低4位依次点亮每个灯P1口///
unsigned char table5[]={0x81,0xc3,0xe7,0xff};//////高和低位往中间亮P1口/////
unsigned char table6[]={0xfe,0xfc,0xf8,0xf0,0x7ff};
unsigned char table7[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};/////依次高位到低位每个点灯亮/////
unsigned char table8[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};/////依次低位到高位每个点灯亮/////

sbit RR=P3^5;
sbit GG=P3^6;/////P0,P1,P2,输出低电平时////////
sbit BB=P3^7;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);//////Y=110///////
}

void main()
{

while(1)
{
/////////////////P2,P1,P0,高位往低位逐个循环点亮3次////////
        for(a=0;a<=2;a++) ///////循环次数(a<=2),3次///////
          {
         RR=0;
                 GG=1;        ///////红色/////
                 BB=1;
       P2=0x01;
          
        for(i=0;i<8;i++)
          {
            
                P2=_cror_(P2,1);
                P1=0x00;
                P0=0x00;
                delay(100);
          }

                 RR=1;
                 GG=0; //////绿色///////
                 BB=1;
           P1=0x01;
   
        for(i=0;i<8;i++)
          {
                          
                   P2=0x00;
                P1=_cror_(P1,1);
                P0=0x00;
                delay(100);
          }

                    RR=1;
                 GG=1;        /////////蓝色/////
                 BB=0;                 
            P0=0x01;

        for(i=0;i<8;i++)
          {
            
                P2=0x00;
                   P1=0x00;
                P0=_cror_(P0,1);               
                delay(100);
          }
          }
/////////////////P0,P1,P2低位到高位逐个点亮/////////
         RR=0;
                 GG=1;         //////红色//////
                 BB=1;
       P0=0x80;
     
        for(i=0;i<8;i++)
          {
            
                P0=_crol_(P0,1);
                P1=0x00;
                P2=0x00;
                delay(100);
          }

                 RR=1;
                 GG=0;        //////绿色///////
                 BB=1;
           P1=0x80;
   
        for(i=0;i<8;i++)
          {
                          
                   P0=0x00;
                P1=_crol_(P1,1);
                P2=0x00;
                delay(100);
          }

                    RR=1;
                 GG=1; //////蓝色//////
                 BB=0;                 
            P2=0x80;

        for(i=0;i<8;i++)
          {
            
                P0=0x00;
                   P1=0x00;
                P2=_crol_(P2,1);               
                delay(100);
          }       
////////////////P2,P1,P0,高位到低位逐个灭,变颜色///////
         RR=0;
                 GG=0; ////////黄色/////////
                 BB=1;
       P2=0xfe;
     
        for(i=0;i<8;i++)
          {
            
                P2=_cror_(P2,1);
                P1=0xff;
                P0=0xff;
                delay(200);
          }

                 RR=0;
                 GG=1;        ////////紫色/////////
                 BB=0;
           P1=0xfe;
   
        for(i=0;i<8;i++)
          {
                          
                   P2=0xff;
                P1=_cror_(P1,1);
                P0=0xff;
                delay(200);
          }
       
               
                    RR=1;
                 GG=0; /////天蓝色//////
                 BB=0;                 
            P0=0xfe;
        for(i=0;i<8;i++)
          {
            
                P2=0xff;
                   P1=0xff;
                P0=_cror_(P0,1);               
                delay(200);
          }       
/////////P2,P1,P0,高位到低位依次每个点亮,循环2次/////////////

   for(a=0;a<=1;a++)//////循环次数程序(a<=1)循环2次//////
          {
             RR=0;
                 GG=1; ////////紫色///////
                 BB=0;
        for(i=0;i<8;i++)
          {
             P2=table7[i];
             P1=0x00;
             P0=0x00;
             delay(50);
          }
          for(i=0;i<8;i++)
          {
            P2=0xff;
            P1=table7[i];
            P0=0x00;
            delay(50);
          }
          for(i=0;i<8;i++)
          {
            P2=0xff;
            P1=0xff;
            P0=table7[i];
            delay(50);
          }
          

/////////P0,P1,P2,低位到高位依次每个点亮,循环/////////////

                 RR=0;
                 GG=0;         ////////白色//////////
                 BB=0;
        for(i=0;i<8;i++)
          {
            P0=table8[i];
                P1=0x00;
                P2=0x00;
                delay(50);
          }
          for(i=0;i<8;i++)
          {
            P0=0xff;
                P1=table8[i];
                P2=0x00;
                delay(50);
          }
          for(i=0;i<8;i++)
          {
            P0=0xff;
                P1=0xff;
                P2=table8[i];
                delay(50);
          }
          }

////////////////两侧往下流,先左后右流//////////

             RR=0;
                 GG=0;  /////白色
                 BB=0;
        for(i=0;i<8;i++)
          {
            P0=table8[i];
                P1=0x00;
                P2=0x00;
                delay(200);
          }
        for(i=0;i<8;i++)
          {
            P0=0xff;
            P1=table4[i];               
                P1=0x0f;
                delay(200);
          }       

         RR=0;
                 GG=1;   //////紫色
                 BB=0;
        for(i=0;i<8;i++)
          {
            P2=table7[i];
                P1=0x00;
                P0=0x00;
                delay(200);
          }
        for(i=0;i<8;i++)
          {
            P2=0xff;
            P1=table3[i];       
                P1=0xf0;
                delay(200);
          }

/////////////////两侧循环闪烁4次///////////

   for(a=0;a<=3;a++)/////循环4次////
         {
             RR=1;
                 GG=0;   //////天蓝色
                 BB=0;
   for(i=0;i<8;i++)
          {
            P2=0xff;
                P1=0xf0;
                P0=0x00;
                delay(100);
          }
                 RR=0;
                 GG=0;   //////黄色
                 BB=1;
   for(i=0;i<8;i++)
          {
            P0=0xff;
                P1=0x0f;
                P2=0x00;
                delay(100);
          }
          }
             RR=0;
                 GG=0;   //////白色
                 BB=0;
        for(i=0;i<8;i++)
          {
            P0=0xff;
                P1=0xff;
                P2=0xff;
                delay(200);
          }  
          
  
}
}
回复

使用道具 举报

14#
ID:410230 发表于 2020-6-8 22:12 | 只看该作者
楼主,可以让我看一下你的电路图吗,我用的52芯片做的爱心流水灯,但是一直实现不了流水,一直都是全亮的,还有颜色也不懂怎么控制,可以加个扣扣交流一下吗
回复

使用道具 举报

15#
ID:744327 发表于 2020-6-9 10:54 | 只看该作者
流水灯程序
int8 a;
for(a=0;e<3;a++)//////循环次数程序(e<3)循环3次
          {
             RED=0;
                 GG=1; //紫色
                 BB=0;
        for(i=0;i<8;i++)
          {
               P2=0xFF;
            P1=0xFF;
            P0=Table[i];
            Delay(50);
          }
          for(i=0;i<8;i++)
          {
             P2=0xFF;
            P1=0xFF;
            P0=Table[i];
            Delay(50);
          }
          for(i=0;i<8;i++)
          {
            P2=0xFF;
            P1=0xFF;
            P0=Table[i];
            Delay(50);
          }
回复

使用道具 举报

16#
ID:773367 发表于 2020-6-9 13:54 | 只看该作者
一般通过延迟程序,0.02-2s都可,可以从网上复制一些借鉴
回复

使用道具 举报

17#
ID:56002 发表于 2020-6-10 09:37 | 只看该作者
有几种算法,需要往里面填函数
模式1:顺序点亮

顺序单个点亮LED  for (i = 0; i < 8; i++)
逆序单个点亮LED  for (i = 6; i > 0; i--)
/*************************************************************/
模式2:顺序单个间隔点亮

顺序间隔点亮LED  for (i = 0; i < 8; i += 2)
逆序间隔点亮LED  for (i = 7; i > 0; i -= 2)
/*************************************************************/
模式3:间隔点亮

间隔顺序同时点亮 for (i = 2; i < 8; i ++ )
间隔逆序同时点亮 for (i = 6; i > 2; i -- )
/**************************************************************/
模式4:相临点亮

相临顺序同时点亮  for (i = 1; i < 8; i++ )
相临逆序同时点亮  for (i = 6; i > 1; i-- )
/************************************************************/
模式5:发散聚集点亮

发散点亮          for (i = 0; i < 4; i++ )
聚集点亮          for (i = 2; i > 0; i-- )
/************************************************************/
模式6:四四点亮

四四顺序点亮      for ( i= 0; i < 4; i++ )
四四逆序点亮      for ( i= 2; i > 0; i-- )
/************************************************************/
模式7:四四点亮

四四顺序点亮      for ( i = 0; i < 2; i++ )
/************************************************************/
模式8:全部点亮熄灭

                  for ( j = 0; j < 10; j++)
                   LED_on(); LED_off();
/***********************************************************/
延时程序计算方法
计数个数j = 延时时间/6*晶振频率 - 1
方式一:
void Delay(void)                        
{
    unsigned char a, b, c;
    for (a = 1; a; a++)
        for (b = 1; b; b++)
            for (c = 0; c<10; c++):  //循环次数=255*255*10
}
方式二:1ms延时,准确性较Delay();高
void DelayMs(unsigned int i)               
{
    while(i--)
    {                          
        unsigned int j;               
        for(j=1;j<=613;j++);               
    }                       
}
例:
void LED_04(int i)                 //发散聚集点亮
    {
        switch(i)
         {
         case 0:P1=0xE7;DelayMs(100);break;    //延时100ms
         case 1:P1=0xDB;DelayMs(100);break;
         case 2:P1=0xBD;DelayMs(100);break;
         case 3:P1=0x7E;DelayMs(100);break;
         default:break;
         }
        }
for(p=0;p<5;p++) //模式5:发散聚集点亮
{
for(i=0;i<4;i++)//发散点亮
LED_04(i);
for(i=2;i>0;i--)//聚集点亮
LED_04(i);       
回复

使用道具 举报

18#
ID:896273 发表于 2021-3-27 10:00 | 只看该作者
效果来自创意
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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