| 效果来自创意 |
|
有几种算法,需要往里面填函数 模式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); ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
| 一般通过延迟程序,0.02-2s都可,可以从网上复制一些借鉴 |
|
流水灯程序 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); } |
| 楼主,可以让我看一下你的电路图吗,我用的52芯片做的爱心流水灯,但是一直实现不了流水,一直都是全亮的,还有颜色也不懂怎么控制,可以加个扣扣交流一下吗 |
|
#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); } } } |
| 这个很简单,,其那不久才做过。。刚才看了一下,没有了,删掉了。。你可以去看看51单片机论坛,,可以找到,程序和仿真都有 |
张x小呀 发表于 2019-12-13 19:33 求高手给我一个程序 |
| 网上有很多这种的,只不过是led灯数量多少的问题,修改一下就能满足你的要求 |
| 我寻思你这也不是写RGB灯的思路啊 |
wc86110 发表于 2019-12-5 02:31 单色灯程序都好找 ,P0口怎么接P1口的低4位的程序 |
man1234567 发表于 2019-12-5 09:15 用的位选P3口控制RGB三色 P0,P1,P2,段选,程序不好找 |
csmyldl 发表于 2019-12-5 13:14 那样写太麻烦 ,还是只想P0口8个LED灯 怎么接P1口的低4位LED灯程序, 还是感谢你 |
|
如果刚学单片机,建议用顺序程序去实现你的每一步,如 P0=0xFE; 第一步 P2=0x7F; 延时; P0=0xFD; 第二步 P2=0xBF; 延时; P0=0xFB; 第三步 P2=0xDF; 延时; P0=0xF7; 第四步 P2=0xEF; 延时; …… |
| 网上免费的程序很多抄一下就可以,如果不想动手可以直接挂价招标。 |
| 网上搜索一下,很多这样的例 |
| 心形流水灯程序大把,花样繁多,修改一下就能实现楼主想要的效果 |