@TOC 最开始接触POV的制作应该是在大学一年级的时候,看到师兄们做的摇摇棒,感觉好有意思,那个时候只会用STC89C52,当时用一块大的洞洞板 分成几份,又细又长的洞洞板,全用插件手工焊接,那个时候有兴趣的支撑,焊接都不怕麻烦。那个时候做出来摇晃起来就能看到自己设定的图案,后来慢慢的得知这个原理其实就是POV。
如果你在网上搜索“POVled”一词(POV即persistancd of vision),会找到世界各地的各种ED旋转屏的制作介绍,那些摇晃出的空中图案,漂浮在车轮上的动画,以及形态各异的时钟,一定给你留下深刻印象。看到这些千奇百怪、创意无限的电子作品,除了羡慕、敬佩、感叹外,你是否想过自己亲自动手也做一个,做一个属于你自己的LED旋转屏呢?其实,无论你看到的LED旋转屏如何神奇,如何复杂,其原理都一样,也很简单,说白了就是一个晃动的流水灯。
下面就来分享一款基于STC89C52制作的十字单色旋转LED!
考虑到旋转的电路板要尽量轻一些,如果主板上背个电池,就显得太重了,因此我们采用无线供电的方式,现如今无线供电技术已经非常成熟了,我们选择一个成本比较低的方案来设计制作,这种电流小一点的无线供电淘宝大概就3元左右
接下来就要选则一个电机,我用了配套的370电机
最后,还需要一个电机带动旋转板子的结构件
制作POV系列 必须要买的就是以上3种配件,剩下的就是画板和采购元件了
先来画无线供电的电路板
这是一个自激震荡电路,线圈出来是交流电压,2个线圈感应得电供给旋转主板整流稳压。
接下来我们还是采用STC89C52 LQFP44脚的 单片机来设计旋转板和灯板
图画好后就可以发给嘉立创白嫖一次打样了,因此有免费打样的可以不需要花钱做电路板了,把需要的元件淘宝买一下,焊接制作过程忽略了,
对了亚克力直径淘宝找人做一下,或者用3D打印一个,又或者找个铁盒子来当底座用,能固定住电机就可以了
接下来是程序的编写了
#include "NEW_8051.H"
#include "task.h"
#include <stddef.h>
bit BIT_timeout=0;
uint i=0,j=0;
#define ucNumRows 176 //定义一周显示字个数 一个字16列 160/16=10个字
/*********延时子程序**********/
/*****n(us)延时子程序*****/
void DelayUs(uint N)
{
uint x ;
for(x=0;x<=N;x++);
}
/*********中断子程序**********/
void int0() interrupt 0 //使用外部中断0
{
BIT_timeout=1; //起点标志位
}
/********************************/
void start(void)
{
P1=0XFF;
P2=0XFF;
P0=0XFF;
P3=0XFF;
}
/***************************************/
void OS_ALLRun(void)
{
if(BIT_timeout) //起点判断
{
BIT_timeout=0; //清零
j++;
if( j>1920 )//显示完文字后 循环; j=16*需要显示的字数 这里大概有120个字符 所以120*16=1920
{
j=0 ;
}
for(i=j;i<ucNumRows+j;i++) //立体显示176列 数据 176/16=11个字
{
P2=zimo[i*2]; //送数据低位显示
P0=zimo[i*2+1];//送数据高位显示
DelayUs(15);
P0=P2=0XFF;
if(BIT_timeout)//这里如果没有显示完一圈的数据 回到起点了
//直接跳出 就不会出现头吃尾的现象 而且盲点很小
{
return;
}
}
}
}
#include "NEW_8051.H"
#include "task.h"
bit BIT_10MS;
extern void OS_ALLRun(void);
extern void start(void);
/*********************************************************************************************************
** 函数名称: init
** 功能描述: 初始化程序,此处包含定时器0、串行口初始化
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者:
** 日 期:
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void init()
{
//"系统初始化"
//IE = 0x00; //"清除中断"
EA = 1; //总中断
//ES = 1; //4"串行中断允许"
//EX0 = 1; //0"外部中断0允许"
//ET0 = 1; //1"定时器0中断允许"
//EX1 = 1; //2"外部中断1允许"
//ET1 = 1; //3"定时器1中断允许"
//ET2 = 1;
//IP = 0; //"清除中断优先级"
//PS = 1; //"串行中断优先"
//PX0 = 1; //"外部中断0"
//PT0 = 1; //"定时器中断0"
//PX1 = 1; //"外部中断1"
//PT1 = 0; //"定时器中断1"
//TCON-------- "定时器控制寄存器", TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0
//TCON = 0;
//TF1 "T1溢出标志"
//TR1 = 1; //"T1运行控制"
//TF0 "T0溢出标志"
//TR0 = 1; //"T0运行控制"
//IE1 "外部中断1申请标志"
//IT1 = 1; //"外部中断1触发方式 0=电平 1=边沿"
//IE0 "外部中断0申请标志"
//IT0 = 1; //"外部中断0触发方式 0=电平 1=边沿"
//TMOD-------- "定时器模式控制寄存器"
// | GATE | C//T | M0 | M1 | GATE | C//T | M0 | M1 |
//"高4位用于T1 低4位用于T0"
//TMOD = 0x21;
//SCON "串行控制"
//| SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
//"| SM0 SM1 | 工作方式 | 说 明 | 波 特 率 |"
//"| 0 0 | 方 式 0 |? 同步移位 | fosc/12 |"
//"| 0 1 | 方 式 1 | 10位异步收发 | 定时器控制 |"
//"| 1 0 | 方 式 2 | 11位异步收发 |fosc/32|fosc/64|"
//"| 1 1 | 方 式 3 | 11位异步收发 | 定时器控制 |"
//"SM2 多机通讯允许"
//"REN 接收允许控制"
//"TB8 发送数据第9位"
//"RB8 接收数据第9位"
//"TI 发送中断标志"
//"RI 接受中断标志"
//SCON = 0x50;
//PCON "电源控制寄存器"
//SMOD"波特率选择位 =1 方式1,2,3 波特率加倍"
//"波特率=2^(sod)*fosc/(32*12*(256-初值))"
//T2CON = 0x0;
//TR2 = 1;
//ET2 = 1;
//-----------中斷初始化------------------------------------------------- BELL
//INT0 init
#ifdef EN_OS_INT0
IT0 = 1; //外部中断为边沿触发
EX0 = 1; //允许外部中断
#endif
#ifdef EN_OS_INT1
// PX1 = 1; //"外部中断1"
IT1 = 1; //外部中断为边沿触发
EX1 = 1; //允许外部中断
#endif
#ifdef EN_OS_SERIAL
SCON = 0x50;
//TMOD|= 0x20;
//BRT = 0xfb; //0xfb: 18.432MHz,12T,SMOD=0,9600bps
AUXR |= 0x11;
TH1 = 0xFB;
TL1 = 0xFB;
TR1 = 1;
ES = 1; //允許串口中斷
PS = 1; //"串行中断优先"
PSH;
#endif
#ifdef EN_OS_TIMER0
/****************定时器0初始化****************/
TMOD|=0X02;
ET0=1;
TH0=0x000; //设定定时器初值 20US
TL0=0x0E1; //
TR0=1;
#endif
/****************定时器1初始化****************/
#ifdef EN_OS_TIMER1
TMOD|=0X20;//8位自动重载模式
ET1=1; //定时器0开中断
TH1=0x00;//定时160us 晶振18.432M
TL1=0x00;
#endif
/***************************/
#ifdef EN_OS_UART2
S2CON = 0x50; //0101,0000 8位可变波特率,无奇偶校验位,允许接收
BRT = 0xfb; //0xfb: 18.432MHz,12T,SMOD=0,9600bps
AUXR |= 0x11; //T0x12,T1x12,UART_M0x6,BRTR,S2SMOD,BRTx12,EXTRAM,S1BRS
IE2 = 0x01; //允许串口2中断,ES2=1
#endif
/***/
#ifdef EN_OS_PCA0 //用于16位定时
CMOD = 0x80; //12分频
CCON = 0x00; //清中断标志
CL = 0;
CH = 0;
CCAP0H = 0xEF; //40ms定时
CCAP0L = 0xD8;
// CCAPM0 = 0x49; //设置PCA0为16位定时器,允许PCA模块0中断
//CR=1; //启动PCA计数
#endif
/*******************************************/
#ifdef EN_OS_PCA1 //用于16位定时
CMOD = 0x80; //12分频
CCON = 0x00; //清中断标志
CL = 0;
CH = 0;
CCAP1H =0x01;
CCAP1L =0x68; //us定时
//CCAPM1 = 0x49; 允许PCA模块1中断
#endif
/***********************************************************************/
}
/*********************************************************************************************************
** 函数名称: main
** 功能描述: 主函数,用户程序从这里执行
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: init()
**
** 作 者:
** 日 期:
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void main(void)
{
init();
start();
while(1)
{
OS_ALLRun();
}
}
#include "NEW_8051.H"
#include "task.h"
//PC2002字幕软件 配置 (逐列 阳码 逆向)
uchar code zimo[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",0*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",1*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",2*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",3*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",4*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xBF,0xFE,0xDF,0xFD,
0x6F,0xFB,0xB7,0xF6,0xDB,0xED,0xED,0xDB,0xF6,0xB7,0xFB,0x6F,0xFD,0xDF,0xFF,0xFF,/*"《",0*/
0xEF,0xFD,0xF7,0xFE,0x7B,0xFF,0x39,0x00,0x8C,0xFF,0xDD,0xFF,0xBF,0xFF,0xBB,0xFF,
0xBB,0xBF,0xBB,0x7F,0x3B,0x80,0xBB,0xFF,0xBB,0xFF,0xBB,0xFF,0xBF,0xFF,0xFF,0xFF,/*"行",1*/
0xEF,0xFD,0xF7,0xFE,0x7B,0xFF,0x39,0x00,0x8C,0xFF,0xDD,0xFF,0xBF,0xFF,0xBB,0xFF,
0xBB,0xBF,0xBB,0x7F,0x3B,0x80,0xBB,0xFF,0xBB,0xFF,0xBB,0xFF,0xBF,0xFF,0xFF,0xFF,/*"行",2*/
0xF7,0xBF,0xF7,0xBF,0xF5,0xB7,0x15,0xB4,0x55,0xB5,0x55,0xB5,0x55,0xB5,0x00,0x80,
0x56,0xB5,0x56,0xB5,0x56,0xB5,0x16,0xB4,0xF7,0xB7,0xF7,0xBF,0xF7,0xBF,0xFF,0xFF,/*"重",3*/
0xEF,0xFD,0xF7,0xFE,0x7B,0xFF,0x39,0x00,0x8C,0xFF,0xDD,0xFF,0xBF,0xFF,0xBB,0xFF,
0xBB,0xBF,0xBB,0x7F,0x3B,0x80,0xBB,0xFF,0xBB,0xFF,0xBB,0xFF,0xBF,0xFF,0xFF,0xFF,/*"行",4*/
0xEF,0xFD,0xF7,0xFE,0x7B,0xFF,0x39,0x00,0x8C,0xFF,0xDD,0xFF,0xBF,0xFF,0xBB,0xFF,
0xBB,0xBF,0xBB,0x7F,0x3B,0x80,0xBB,0xFF,0xBB,0xFF,0xBB,0xFF,0xBF,0xFF,0xFF,0xFF,/*"行",5*/
0xFD,0xDF,0xFB,0x6F,0xF6,0xB7,0xED,0xDB,0xDB,0xED,0xB7,0xF6,0x6F,0xFB,0xDF,0xFD,
0xBF,0xFE,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"》",6*/
0xFF,0xDF,0xF7,0x9F,0xF7,0xCF,0xF7,0xF7,0xF7,0xE7,0xF7,0xDB,0xF6,0xDB,0xF5,0xDD,
0xF3,0xBE,0x77,0xBF,0xB7,0xBF,0xD7,0xBF,0xE3,0xBF,0xF7,0xBF,0xFF,0xBF,0xFF,0xFF,/*"之",7*/
0xFF,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,
0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x3F,0xFF,0x7F,0xFF,0xFF,0xFF,/*"一",8*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",9*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",10*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",11*/
0xEF,0xFD,0xF7,0xFE,0x7B,0xFF,0x39,0x00,0x8C,0xFF,0xDD,0xFF,0xBF,0xFF,0xBB,0xFF,
0xBB,0xBF,0xBB,0x7F,0x3B,0x80,0xBB,0xFF,0xBB,0xFF,0xBB,0xFF,0xBF,0xFF,0xFF,0xFF,/*"行",12*/
0xEF,0xFD,0xF7,0xFE,0x7B,0xFF,0x39,0x00,0x8C,0xFF,0xDD,0xFF,0xBF,0xFF,0xBB,0xFF,
0xBB,0xBF,0xBB,0x7F,0x3B,0x80,0xBB,0xFF,0xBB,0xFF,0xBB,0xFF,0xBF,0xFF,0xFF,0xFF,/*"行",13*/
0xF7,0xBF,0xF7,0xBF,0xF5,0xB7,0x15,0xB4,0x55,0xB5,0x55,0xB5,0x55,0xB5,0x00,0x80,
0x56,0xB5,0x56,0xB5,0x56,0xB5,0x16,0xB4,0xF7,0xB7,0xF7,0xBF,0xF7,0xBF,0xFF,0xFF,/*"重",14*/
0xEF,0xFD,0xF7,0xFE,0x7B,0xFF,0x39,0x00,0x8C,0xFF,0xDD,0xFF,0xBF,0xFF,0xBB,0xFF,
0xBB,0xBF,0xBB,0x7F,0x3B,0x80,0xBB,0xFF,0xBB,0xFF,0xBB,0xFF,0xBF,0xFF,0xFF,0xFF,/*"行",15*/
0xEF,0xFD,0xF7,0xFE,0x7B,0xFF,0x39,0x00,0x8C,0xFF,0xDD,0xFF,0xBF,0xFF,0xBB,0xFF,
0xBB,0xBF,0xBB,0x7F,0x3B,0x80,0xBB,0xFF,0xBB,0xFF,0xBB,0xFF,0xBF,0xFF,0xFF,0xFF,/*"行",16*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xA7,0xFF,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*",",17*/
};
字幕软件PC2002设置参考图
程序比较简单,成本也不高,适合大学的学生入门制作,用兴趣来引导单片机的学习,我觉得是最好的!
旋转的效果如下
十字旋转LED POV制作
下面我将制作资料打包分享给大家!!
链接:https://pan.baidu.com/s/1SaaE3l9ksqv6uKFYNREHKg?pwd=ugxx
提取码:ugxx