心形流水灯

您所在的位置:网站首页 51单片机心形流水灯说明书 心形流水灯

心形流水灯

2023-09-10 12:20| 来源: 网络整理| 查看: 265

V X:F9986858

       这个心形流水灯是我在大一时候学的,那会学的是在51开发板上面实现点亮一个灯,或是实现8个流水灯闪烁。在经过深度学习和理解后,把8个灯扩展为32个。        刚开始是拿洞洞焊接的,经过实验可以实现后,绘制心形PCB做心形流水灯。        在这个过程中不仅提高了焊接技术,而且学会了绘制异性PCB的方法,还提高了编程的能力。

个人思路: 我这个流水灯共有40多种流水方式,在main函数去while循环这40多个方式。        ①程序中采用模块化函数,把没一种流水方式都进行一层封装。main函数只放这40个函数的名称,函数体放在其他处。        ②建立一些基本的流水方式数组。        ③在其他处写这40多个函数体。        ④用for循环依次去查询数组的第i个数据,然后对端口进行赋值,达到控制I/O端口的目的,进而控制LED灯。 灯采用共阳接法 ,因为P0口是漏极开路,如果要它输出高电平的话必须接上拉电阻。 代码工程在我上传的资源自取

心形流水灯

在这里插入图片描述在这里插入图片描述

这个是PCB的实物和演示视频。 视频在网盘: 百度网盘链接  (点击蓝色字体即可跳转) 提取码:31bl 在这里插入图片描述在这里插入图片描述

原理图和PCB 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

       这个是手工焊接的实物和演示视频。 视频在网盘: 链接:https://pan.baidu.com/s/1RDgoBSlWNCEFJxVNofPUeA 提取码:qa4n

部分代码:

#include #define uint unsigned int #define uchar unsigned char #include unsigned char LedKey[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //对应IO口值 uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED从低位往高位移 uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED从高位往低位移 uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//LED从1个亮到8个都点亮(从低位往高位) uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//LED从1个亮到8个都点亮(从高位往低位) uchar code table4[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//LED从8个全亮到一个都不亮(从低位往高位) uchar code table5[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//LED从8个全亮到一个都不亮(从高位往低位) uchar code table6[]={0xfe,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e};//LED从低位往高位移(最低位始终为0) uchar code table7[]={0x7f,0x3f,0x5f,0x6f,0x77,0x7b,0x7d,0x7e};//LED从高位往低位移(最高位始终为0) uchar i,j; //定义循环变量 uint tt=70; //定义时间指数 void delay(uint time) //延时函数 { uint x,y; for(x=time;x>0;x--) for(y=110;y>0;y--); } void disp0() //状态0 所有LED闪烁3次 { for(i=0;i for(i=0;i P3=table1[i]; delay(100); } P3=0xff; for(i=0;i P0=table0[i]; delay(100); } P0=0xff; } void disp2() //状态2 LED逆时针转一圈 { for(i=0;i P1=table0[i]; delay(100); } P1=0xff; for(i=0;i P2=table0[i]; delay(100); } P2=0xff; } void disp3() //状态3 4个LED同时顺时、逆时针移动1/4圈 { for(i=0;i P0=table0[i]; P1=table0[i]; P2=table0[i]; P3=table1[i]; delay(100); } P3=0xff; P0=0xff; } ... ... ... void main() { unsigned char i=0; while(1) { led_inii(); disp22(); //装态22 2个LED自上而下移动(循环5次,且频率渐快,到最快时持续循环16次,然后循环5次频率再逐渐降低) disp0(); //状态0 所有LED闪烁3次 led_init(); //LED全亮 延时1000ms=1s LED全灭 延时1000MS=1ms disp1(); //状态1 LED顺时针转一圈 disp2(); //状态2 LED逆时针转一圈 disp3(); //状态3 4个LED同时顺时、逆时针移动1/4圈 disp4(); //状态4 2个LED同时顺时针移动半圈 disp5(); //状态5 2个LED同时逆时针移动半圈 disp6(); //状态6 LED自上而下逐渐点亮(一半点亮一半不亮) disp7(); //状态7 LED自下而上逐渐点亮(直到全部点亮) disp0(); //状态0 所有LED闪烁3次 disp8(); //状态8 间断8格的4个LED亮并逆时针旋转 disp9(); //状态9 间断8格的4个LED亮,然后逆时针逐渐点亮(直到全部点亮) disp10(); //状态10 从LED全部亮到全不亮(间断8格的4个LED开始逆时针熄灭) disp11(); //状态11 间断8格的4个LED亮并顺时针旋转 disp12(); //间断8格的4个LED亮,然后顺时针逐渐点亮(直到全部点亮) disp13(); //状态13 从LED全部亮到全不亮(间断8格的4个LED开始顺时针熄灭) disp14(); //状态14 从LED不亮到全亮(从P0.0、P1.0、P2.0、P3.7开始逐布点亮) disp15(); //状态15 从LED全亮到全不亮(从P0.7、P1.7、P2.7、P3.0开始逐步熄灭) disp16(); //状态16 LED灯交替闪烁(频率有慢变快) disp17(); //状态17 LED从P0.7开始逆时针逐步点亮,并且速度会逐步提高 disp18(); //状态18 LED从P0.7开始逆时针逐步点亮(每亮8位后就熄灭) disp19(); //状态19 LED从P2.7开始顺时针逐步点亮,(循环2次)并且速度会逐步提高 disp20(); //状态20 LED从P2.7开始顺时针逐步点亮(每亮8位后就熄灭) disp21(); //状态21 2个LED开始上下移动半圈 disp22(); //装态22 2个LED自上而下移动(循环5次,且频率渐快,到最快时持续循环16次,然后循环5次频率再逐渐降低 disp23(); //状态23 LED上下交替闪烁 disp39(); //状态39 P1、P3LED(下半部分)一直亮,上半部分LED向外扩张亮,然后闪烁3次 disp24(); //状态24 LED左右交替闪烁 disp25(); //状态25 LED交替闪烁 disp8(); //状态8 间断8格的4个LED亮并逆时针旋转 disp9(); //状态9 间断8格的4个LED亮,然后逆时针逐渐点亮(直到全部点亮) disp10(); //状态10 从LED全部亮到全不亮(间断8格的4个LED开始逆时针熄灭) disp26(); //状态26 2个LED开始上下移动半圈(LED不亮流水) disp27(); //状态27 逐步顺时针点亮P2、P1的LED,熄灭后,再顺时针点亮P0、P3的LED disp28(); //状态28 P1、P2和P0、P3交替闪烁 disp38(); //状态38 逐步顺时针点亮P2、P1的LED,熄灭后,再顺时针点亮P0、P3的LED disp29(); //状态29 逐步顺时针点亮P2、P1的LED,再顺时熄灭后,再顺时针点亮P0、P3的LED,再顺时熄灭 disp30(); //状态30 逐步逆时针点亮P2、P1的LED,熄灭后,再逆时针点亮P0、P3的LED disp31(); //状态31 逐步逆时针点亮P2、P1的LED,再逆时熄灭后,再逆时针点亮P0、P3的LED,再逆时熄灭 disp32(); //状态32 LED自上而下逐步点亮,然后从下往上逐步熄灭 disp33(); //状态33 LED从左往右开始点亮(直到全亮),然后从左右两边开始熄灭(直到全部熄灭) disp37(); //状态37 2个LED自上而下移动,并点亮最下2个LED,然后2个LED再自下而上回去,同时4个LED(上下各2个LED)再来回移动一次 disp36(); //状态36 从P0.7、P3.0开始同时逆时针旋转,直到LED全亮 disp40(); //状态40 LED从P3.0、P0.7开始逆时针同时熄灭,直到LED全部熄灭 disp35(); //状态35 从P2.7、P1.7开始同时顺时针旋转,直到LED全亮 disp41(); //状态41 LED从P2.7、P1.7开始顺时针同时熄灭,直到全部熄灭 disp34(); //状态34 LED从左往右开始点亮(直到全亮),然后从中间往左右边熄灭 disp28(); //状态28 P1、P2和P0、P3交替闪烁 disp42(); //逆时针点亮 }

                                                                                                                                                                    2019/12/3                                                                                                                                                           晴



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3