前言
提示:这里是本篇文章的前言内容
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
总结
那么今天的分享就到这里吧 如果觉得博主的这篇文章不错的话麻烦给博主一个三连。需源码的小伙伴可以私信我哦,你的三连就是对我最大的支持。