历史上的今天
返回首页

历史上的今天

今天是: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#include#define uint unsigned int#define uchar unsigned charuchar i,j,k;//定义循环变量uint tt=70;//定义时间指数uint time=200;uint time1=80;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个全亮到一个都不亮(从高位往低位)



 //延时函数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


总结

那么今天的分享就到这里吧 如果觉得博主的这篇文章不错的话麻烦给博主一个三连。需源码的小伙伴可以私信我哦,你的三连就是对我最大的支持。


推荐阅读

史海拾趣

品赞(G-Switch)公司的发展小趣事
首先检查电源是否正常供电,线路是否连接良好。
帝特(DTECH)公司的发展小趣事

广州帝特电子科技有限公司成立于2000年4月,公司创始团队凭借对市场趋势的敏锐洞察和坚定信心,决定将主营业务定位于电脑外设产品的研发和生产。在创立初期,帝特就注重产品质量和技术创新,通过不断的技术研发和产品优化,逐渐在电脑外设领域崭露头角。

Chipcera Technology Co Ltd公司的发展小趣事

在电子行业中,供应链管理和成本控制对于企业的生存和发展至关重要。Chipcera深知这一点,因此在供应链方面进行了精细化管理。公司与供应商建立了长期稳定的合作关系,确保原材料的稳定供应和质量的可靠性。同时,公司还通过优化生产流程、提高生产效率等方式,有效降低了生产成本。这些措施使得Chipcera能够在激烈的市场竞争中保持价格优势,提升市场竞争力。

DCD [Digital Core Design]公司的发展小趣事

在市场竞争日益激烈的情况下,DCD公司意识到单打独斗难以取得更大的发展。因此,公司开始寻求与其他企业建立战略合作关系。通过与上下游企业的紧密合作,DCD公司实现了资源共享和优势互补,进一步提升了自身的竞争力。同时,公司还积极参与行业标准的制定和推广工作,为行业的健康发展贡献了自己的力量。

ALCOA公司的发展小趣事

第一次世界大战期间,铝因其轻质且强度高的特性,被广泛应用于航空和汽车工业。ALCOA公司借此机会迅速发展壮大,为军方和汽车制造商提供了大量的铝材。这种需求推动了公司的技术进步和生产规模的扩大,也奠定了ALCOA在电子行业中的领先地位。

广东奥科公司的发展小趣事

随着电子技术的快速发展,广东奥科公司意识到只有不断创新才能在市场中立足。公司加大了对研发的投入,引进了一批高素质的研发人才,并建立了完善的研发体系。经过多次尝试和实验,广东奥科公司成功开发出了多款具有创新性和竞争力的电子产品,这些产品不仅性能卓越,而且设计独特,深受消费者的喜爱。这些技术突破和产品创新为广东奥科公司赢得了市场的认可,也推动了公司的快速发展。

问答坊 | AI 解惑

原件封装尺寸图

原件封装尺寸图.pdf…

查看全部问答>

脉宽调制基本原理及其应用实例

脉宽调制基本原理及其应用实例…

查看全部问答>

基于LABVIEW与DSP串口的数据采集系统

基于LABVIEW与DSP串口的数据采集系统…

查看全部问答>

LED白光荧光粉的配比XY轴的决定

replyreload += \',\' + 381214;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

定时同步域时间

如何定时同步域时间? …

查看全部问答>

【转载】ASUS RampageII vs GENE

我整理一份比较表格,方便大家参考. RampageII vs GENE照片如下. Extreme-Vcore GENE-Vcore Extreme-IO GENE-IO PCB Layer compare …

查看全部问答>

怎样修改datagird中的数据?

使用c#语言,我使用如下语句进行修改datagird中当前选择的记录,可每次都不能成功,请问是怎么回事?我用的是update语句,请帮忙看看写的是否正确。 ........... SqlCeCommand cmd = conn.CreateCommand(); cmd.CommandText = \"update Categories ...…

查看全部问答>

【求助】F169的12位DA不够用,怎么解决?

我需要DA输出模拟量,用DAC12的话分辨率刚好到指标(考虑到传感器的非线性等,12位DA就不够了),PWM输出DA的话好像和电源电压的精度关系很大。有没有比较好的方法实现13位DA呢? 用于仪表行业 或者麻烦推荐一款13位的低功耗DA…

查看全部问答>

运放补偿与容性负载的问题

使运放(电压反馈型)输入接地,输出电压记为V0。问题:1.这个电压V0与运放补偿端的关系?2.运放的补偿原理,希望得到详细点的解释?3.在一篇ADI的关于运放驱动容性负载的文档中看到,它说“实现补偿的方法中有一种应用是对基准电压进行缓冲或反相 ...…

查看全部问答>