这段时间做了个玩具,用彩色LED搭建了一个心形图案,并用STC51单片机驱动,实现心形LED炫彩闪动,超级炫酷的,总工有32个灯,使用了单片机的所有IO口,可以灵活控制每个LED的闪烁,然后配上适合的音乐,绝对是屌丝工程师表白神器,先上两张图看看:
接下来简单说下实现过程:
将32个LED分成4组LED_P0,LED_P1,LED_P3,LED_P2,每一组代表8个LED灯,也就是讲心形分成4个部分, 如下图所示,这样,我们只需操作这些值,然后将这些值对应到相应的IO口上就可以了
为了便于操作,我们对每一组单独做了几个动作,然后将这些动作已多种方式结合起来,就可以啦。
基本动作:
uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
uchar code table4[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
uchar code table5[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
uchar code table6[]={0xfe,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e};
uchar code table7[]={0x7f,0x3f,0x5f,0x6f,0x77,0x7b,0x7d,0x7e};
下面我们将LED顺时针旋转一周,如下:
void disp1()
{
for(i=0;i<8;i++)
{
LED_P2=table1[i];
Display(100);
}
LED_P2=0xff;
for(i=0;i<8;i++)
{
LED_P3=table1[i];
Display(100);
}
LED_P3=0xff;
for(i=0;i<8;i++)
{
LED_P1=table1[i];
Display(100);
}
LED_P1=0xff;
for(i=0;i<8;i++)
{
LED_P0=table1[i];
Display(100);
}
LED_P0=0xff;
}
为了方便布线,我们的LED灯的位置并不是个单片机IO口严格对应的,所以我们要在显示函数里面做好对应关系,一起刷新显示:
void Display(uint time)
{
P0 = ((LED_P0 & 0xfe)>>1) + ((LED_P1 & 0x01)<<7);
P1 = ((LED_P1 & 0xfe)>>1) + ((LED_P3 & 0x01)<<7);
P3 = ((LED_P3 & 0xfe)>>1) + ((LED_P2 & 0x01)<<7);
P2 = ((LED_P2 & 0xfe)>>1) + ((LED_P0 & 0x01)<<7);
Delayms(time);
}
将LED顺时针旋转一周只是一周场景,这里可以t提供40多种场景,可以自由搭配顺序哦,实现方法也是很简单的:
#define SCENE_COUNT 20
uchar scene[SCENE_COUNT] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
选择要显示的场景函数:
void DispStatus(unsigned char index)
{
switch(index)
{
case 0:disp0();break;
case 1:disp1();break;
case 2:disp2();break;
case 3:disp3();break;
case 4:disp4();break;
case 5:disp5();break;
case 6:disp6();break;
case 7:disp7();break;
case 8:disp8();break;
case 9:disp9();break;
case 10:disp10();break;
case 11:disp11();break;
case 12:disp12();break;
case 13:disp13();break;
case 14:disp14();break;
case 15:disp15();break;
case 16:disp16();break;
case 17:disp17();break;
case 18:disp18();break;
case 19:disp19();break;
case 20:disp20();break;
case 21:disp21();break;
case 22:disp22();break;
case 23:disp23();break;
case 24:disp24();break;
case 25:disp25();break;
case 26:disp26();break;
case 27:disp27();break;
case 28:disp28();break;
case 29:disp29();break;
case 30:disp30();break;
case 31:disp31();break;
case 32:disp32();break;
case 33:disp33();break;
case 34:disp34();break;
case 35:disp35();break;
case 36:disp36();break;
case 37:disp37();break;
case 38:disp38();break;
case 39:disp39();break;
case 40:disp40();break;
case 41:disp41();break;
default: break;
}
}
主函数循环播放设定好的场景
void main()
{
int i;
while(1)
{
for(i=0;i<SCENE_COUNT;i++)
{
DispStatus(scene[i]);
}
}
}
这样一个表白神器就完成了,有需要的或者有其他问题的亲猿们,如果有需要可以直接评论我就好了哦。
git下载地址:https://github.com/zhui-ying/HeartColorLEDDIYcode.git
相关知识
表白神器
python仿抖音表白神器资源
表白神器 & 爱的告白
玫瑰花一键生成软件(七夕表白神器)
双十一求婚表白神器,特一助你脱单的求婚攻略
新开业开张花篮会议专用花深情传达表白神器花束
技术宅情人节:用HTML编写浪漫玫瑰花表白神器
《超级迷你世界》迷你世界汤米生存:表白神器玫瑰花,现在你会做了吗?
情人节表白神器(成功率100%)在情人节的当天不知道有没有想要向心仪的对象表白的人,如果有的话,下面这一款神器可千万不要
切花的神器有哪些
网址: 工程师表白神器 https://m.huajiangbk.com/newsview958639.html
上一篇: 无法拒绝的道歉表白神器(更新版) |
下一篇: 草莓什么时间移栽合适?又有哪些移 |