历史上的今天
今天是:2025年12月15日(星期一)
2022年12月15日 | 【单片机】心形流水灯——27种流水方式
2022-12-15 来源:zhihu
前言
提示:这里是本篇文章的前言内容
1、视频展示
【单片机】心形流水灯之20种花式流水方式_哔哩哔哩_bilibiliwww.bilibili.com/video/BV1zt4y1G72i?share_source=copy_web&vd_source=bb490f2a1db7d2cc758def7990580710
2、具体流水方式展示

心形流水灯—27种流水方式
提示:以下是本篇文章正文内容
一、原理图部分
总图展示:

具体部分展示:


二、代码部分
代码的 main.c 函数部分:
#include #include "display.h" //主函数 void main() { while(1) { disp0_f_3(); //状态1 所有LED闪烁3次 disp0_f_all();//状态2 所有LED交替闪烁 disp0_f_plus();//状态3 LED灯交替闪烁(频率有慢变快) disp0_f_updown();//状态4 LED上下交替闪烁 disp0_f_left(); //状态5 LED左右交替闪烁 disp0_f_diagonal(); //状态6 LED对角交替闪烁 disp0_f();//状态7 LED(下半部分)一直亮,上半部分LED向外扩张亮,然后闪烁3次 disp1_CW();//状态1 LED顺时针转一圈 disp1_CW_B();//状态2 LED顺时针转一圈(全亮),并且速度会逐步提高 disp1_CCW();//状态3 LED逆时针转一圈 disp1_CCW_B();//状态4 LED顺时针转一圈(全亮),并且速度会逐步提高 disp1_cwcc_4();//状态5 4个LED同时顺时、逆时针移动1/4圈 disp1_CW_4();//状态6 4个LED亮并顺时针旋转 disp1_CW_4B();//状态7 4个LED亮并顺时针旋转(直到全部点亮) disp1_CCW_4();//状态8 4个LED亮并逆时针旋转 disp1_CCW_4B();//状态9 4个LED亮并逆时针旋转(直到全部点亮) disp1_CW_2();//状态10 2个LED同时顺时针移动半圈 disp1_CCW_2();//状态11 2个LED同时逆时针移动半圈 disp1_updown_2();//状态12 LED自上而下逐个点亮 disp1_updown_2B();//状态13 LED自上而下逐个点亮(全亮) disp1_updown_2plus();//状态14 2个LED自上而下逐个点亮(循环5次,且频率渐快,到最快时持续循环16次,然后循环5次频率再逐渐降低) disp1_downup_2();//状态15 LED自下而上逐渐点亮 disp1_downup_2B();//状态16 LED自下而上逐渐点亮(直到全部点亮) disp1_Lout();//状态17 LED从左往右开始点亮(直到全亮),然后从中间往左右边熄灭 disp1_Rout();//状态18 LED从右往左开始点亮(直到全亮),然后从左右两边开始熄灭(直到全部熄灭) disp2_bright_cwout();//状态1 从LED全部亮到全不亮(间断8格的4个LED开始逆时针熄灭) disp2_bright_ccwout();//状态2 从LED全部亮到全不亮(间断8格的4个LED开始顺时针熄灭) } } 代码的 display.c 部分(部分代码): #include //延时函数void delay(uint time) { uint x,y; for(x=time;x>0;x--) for(y=110;y>0;y--);} //状态1 所有LED闪烁3次void disp0_f_3(){ for(i=0;i<3;i++) { P0=0x00; P2=0x00; P1=0x00; P3=0x00; delay(200); P0=0xff; P2=0xff; P1=0xff; P3=0xff; delay(200); }}//状态4 LED上下交替闪烁void disp0_f_updown() { for(i=0;i<8;i++) { P1=0x00; P0=0x00; P2=0xff; P3=0xff; delay(100); P1=0xff; P0=0xff; P2=0x00; P3=0x00; delay(100); }}//状态1 LED顺时针转一圈void disp1_CW(){ for(i=0;i<8;i++) { P0=table0[i]; delay(100); } P0=0xff; for(i=0;i<8;i++) { P2=table0[i]; delay(100); } P2=0xff; for(i=0;i<8;i++) { P3=table1[i]; delay(100); } P3=0xff; for(i=0;i<8;i++) { P1=table1[i]; delay(100); } P1=0xff;} //状态5 4个LED同时顺时、逆时针移动1/4圈void disp1_cwcc_4(){ for(i=0;i<8;i++) { P1=table1[i]; P3=table1[i]; P2=table0[i]; P0=table0[i]; delay(100); } for(i=0;i<8;i++) { P1=table0[i]; P3=table0[i]; P2=table1[i]; P0=table1[i]; delay(100); }}//状态6 4个LED亮并顺时针旋转void disp1_CW_4(){ for(i=0;i<8;i++) { P1=table1[i]; P3=table1[i]; P2=table0[i]; P0=table0[i]; delay(100); } P1=0xff; P3=0xff; P2=0xff; P0=0xff;} 代码的 display.h 部分: #ifndef __DISPLAY_H__ #define __DISPLAY_H__ /*--------闪烁--------*/ void disp0_f_3(); void disp0_f_all(); void disp0_f_plus(); void disp0_f_updown(); void disp0_f_left(); void disp0_f_diagonal(); void disp0_f(); /*--------单个流水--------*/ void disp1_CW(); void disp1_CW_B(); void disp1_CCW(); void disp1_CCW_B(); void disp1_cwcc_4(); void disp1_CW_4(); void disp1_CW_4B(); void disp1_CCW_4(); void disp1_CCW_4B(); void disp1_CW_2(); void disp1_CCW_2(); void disp1_updown_2(); void disp1_updown_2B(); void disp1_updown_2plus(); void disp1_downup_2(); void disp1_downup_2B(); void disp1_Lout(); void disp1_Rout(); /*--------全亮/全灭--------*/ void disp2_bright_cwout(); void disp2_bright_ccwout(); #endif 总结 那么今天的分享就到这里吧 如果觉得博主的这篇文章不错的话麻烦给博主一个三连。需源码的小伙伴可以私信我哦,你的三连就是对我最大的支持。
史海拾趣
|
我整理一份比较表格,方便大家参考. RampageII vs GENE照片如下. Extreme-Vcore GENE-Vcore Extreme-IO GENE-IO PCB Layer compare … 查看全部问答> |
|
使用c#语言,我使用如下语句进行修改datagird中当前选择的记录,可每次都不能成功,请问是怎么回事?我用的是update语句,请帮忙看看写的是否正确。 ........... SqlCeCommand cmd = conn.CreateCommand(); cmd.CommandText = \"update Categories ...… 查看全部问答> |
|
我需要DA输出模拟量,用DAC12的话分辨率刚好到指标(考虑到传感器的非线性等,12位DA就不够了),PWM输出DA的话好像和电源电压的精度关系很大。有没有比较好的方法实现13位DA呢? 用于仪表行业 或者麻烦推荐一款13位的低功耗DA… 查看全部问答> |
|
使运放(电压反馈型)输入接地,输出电压记为V0。问题:1.这个电压V0与运放补偿端的关系?2.运放的补偿原理,希望得到详细点的解释?3.在一篇ADI的关于运放驱动容性负载的文档中看到,它说“实现补偿的方法中有一种应用是对基准电压进行缓冲或反相 ...… 查看全部问答> |




