旋转LED制作(立体和平面一体板)

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

立体&平面旋转式LED 制作

由6V变压器驱动电机自动旋转,显字宽度能自适应转速的快慢自动调节,采用无线供电方式为显示部分供电,采用STC12C5A32S2单片机控制,频率特性及稳定性比普通单片机更好,有显字和时钟功能,硬件电路图绘制和软件编程都由本店工程制作并调试成功,主要针对电子爱好者需要进行设计,并能为顾客提供硬件和软件的技术支持。

/v_show/id_XMzI3MjA3NzEy.html优酷视频

本店出售的是旋转LED套件,提供电路板所需的所有元件和焊接电路图,各元件参数都是自己通过多次验证调试出来,能使产品发挥

最优的性能。如果你是电子DIY爱好者,学会焊接是相当重要的,

电路板元件大多数都是贴片元件,体积很小,所以对焊接贴片元件还不熟的朋友,建议有摄子辅助焊接,由于单片机引脚较密,焊接有难度,如果初学者有要求本店工程师帮忙焊接的,请拍下产品后与店主联系。/

旋转LED能实现的功能:

1. 平面显字功能。

2. 平面显示数字时钟功能。

3. 平面显示指针式时钟功能。

4. 立体显字功能。

5. 红外遥控功能,能实现立体和平面切换显示,字体宽度和显字宽度调节,时钟较准,复位等功能。

6.能一定范围自适应旋转速度

7. 直流电供给电机自动旋转,无需人工操作。

遥控器使用说明:按键7是立体显示字模式

按键8是平面旋转时钟模式此模式下按OK键开始进行调时间,秒不可调。年,月,日,星期,时分都可调,其中“#”号键是时钟初始化用的。

按键9是模拟指针表盘模式效果比较一般后续会继续改进。

原理图:

单片机使用资源情况:40个IO口全用上了,其中P3.5 P3.6 P3.7用于DS1302的通信外部中断0 ( P3.2 )用于旋转起点检测,外部中断1 (P3.3) 用于红外接收。其他35个IO全都独立控制LED,使得旋转的时候字体上下不会有偏差的现象。

程序下载:下载软件用STC-ISP软件,高点的版本都有STC12C5A32S2的型号,选择好型号后,就可以通过P3.0 P3.1下载程序了板上已引出4P线了,只需把实验班上的P3.0 P3.1电源和地接上就可以下载,跟普通的89C51一样。

程序:程序比较长就不全放上来了,部分说明如下:

红外接收处理:

这里笔者用了很多方式去解红外遥控器的码,但是发现前几个版本都不太稳定,关键是旋转LED用的中断比较多,对红外接收有一定影响,所以通过努力看红外码的原理,选择一种更好的方式去解码,由于解码时通过外面中断1触发,定时器计时来完成解码的。为了提高稳定性,这里让定时器在外部中断1触发后才开始计时,而且计时到

定时器1溢出计数变量加1,当然定时器1是用重装模式的。算算18.432M的晶振定时器1溢出时间是160US 所以根据这个时间来算1还是0比较容易成功,遥控器也灵敏多了。具体实现可以看程序部分店里有详细注视的程序,如果需要可到/购买技术支持程序如下:

#include "NEW_8051.H"

#include "task.h"

uchar irtime;//红外用全局变量

bit new_code;

uchar IRcord[2];

uchar irdata[17];

uchar key_code;

/************************************************/

void tim1_isr (void) interrupt 3 using 1//定时器1中断服务函数

{

irtime++;

}

/********************************************************** ***/

//外部中断1解码程序

void ex1_isr (void) interrupt 2 using 2//外部中断1服务函数

{

static uchar i,p,z;

static bit startflag;

TR1=1;

if(startflag)

{

if(irtime<100&&irtime>=53)//引导码TC9012的头码{

i=0;

p=1;

z=0;

irdata[i]=irtime;

irtime=0;

}

z++;

if(z>=18)

{

irdata[p]=irtime;

irtime=0;

p++;

if(p==17)

{

new_code=1;

p=0;

TR1=0;

}

}

else

irtime=0;

}

else

{

irtime=0;

startflag=1;

}

}

/************************************************/ void Ircordpro(void)//红外码值处理函数

{

uchar i, j, k;

uchar cord,value;

k=1;

for(i=0;i<2;i++)//处理4个字节

{

for(j=1;j<=8;j++) //处理1个字节8位{

cord=irdata[k];

if(cord>11)//大于某值为1

{

value=value|0x80;

}

else

{

value=value;

}

if(j<8)

{

value=value>>1;

}

k++;

}

IRcord[i]=value;

value=0;

}

key_code=IRcord[0];

相关文档
最新文档