最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

当前位置: 主页 > 电子DIY > 单片机 >

制作LED显示摇棒制作

时间:2013-01-13 18:25来源:网络 作者:网络整理 点击:
免费提供各种电子制作文章、资料、图纸
恋人节我们做电的兄弟们送什么礼品给心仪已久的MM?给各人提供一个适相助为礼品的简朴电路,本身下手做的大度玩具必然会是送给MM的最好的礼品。

表现结果图片

 

制作LED显示摇棒制作

 

 道理图

 

制作LED显示摇棒制作

 

 以下是具体声名:

图形表现的道理:
       操作人眼的视觉暂留效应,使手在摆动到差异位置的时辰,让位于一条直线上的LED表现二维图像的差异的列,实现图形扫描表现。

物理机制:
       当我们在摆下手臂的时辰,短时刻内摆动位置和阁下幅度不会有太大变革,操作我们手臂的这个行为纪律,只要能获得棒从一侧摆动到另一侧的时刻,然后把这个时刻分成N份,然后在每一份的时刻里表现差异的格式就能实现图形的表现。当我们在摆下手臂的时辰,并不能预先得知此次摆动必要的时刻,奈何获得从一侧摆动到另一侧的时刻呢?
       再想想,短时刻内我们手臂的摆动频率也不会有出格大的变革,我们只要能获得前一次摆动所用的时刻,然后用这个时刻近似获得下一次摆动所必要的时刻,然后分N份就可以了。获得一次摆动所需的时刻的使命由光遮断器完成,在棒上装一个可以摆动的用来遮挡光遮断器光泽的细杆,粗细比光遮断器的狭缝稍宽,我用的是整流桥焊后剪下的一段管脚。每阁下摆动一次这个杆就会通过一次光遮断器,使单片机发生一次间断,两次间断之间的时刻就是想要获得的时刻,实现这个成果用掉2051的一个按时器T0和外部间断INT0。然后用2051的另一个按时器T1,其按时时刻是T0的N分之一,每次间断依次表现一列,就是照片上的结果。
       再细想一下,手臂摆动的频率大于2Hz的时辰才或许能由视觉暂留看出图形,再快也不外十几Hz,由T0为16位按时器的最长计时时刻获得2051的时钟频率1MHz最吻合,尚有遮挡用的细杆的粗细也能够估算,使其不会对计时精度发生太大影响。

所用元件:
AT89C2051 8元
高亮LED共8个 3.6元
电池盒 0.5元
单面万用板 8元 可以裁成3块,做3个摇棒
陶瓷谐振器 1元
光遮断器 2元
电阻电容导线 2元
外壳* 0.7元 可以裁成2块

可选元件:
电源开关 1元

总本钱不高出20元

*外壳我用在家乐福买的半透明文件夹卷成的

此电路电路很是简朴,代码短,可是用到了2051的外部间断编程和T0、T1按时器编程,很是得当初学者操练。我制作这个玩具耗费了两个晚上的时刻。此电路和措施尚有扩展改造的空间,如在长时刻不摆动的环境下可以使单片机进入省电模式,表现不只限于对称图片等,各人可以试试。

以下是源措施:
#include <reg51.h>
#define SEG 17 //每帧图片分成17列来表现
#define INTERVAL 20 //每幅图片在阁下摇晃20次后换下一幅

typedef unsigned char uchar;
typedef unsigned int uint;

code char pattern[17][3]={ //3幅图片的字模
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0x9f,0xff},
{0xff,0x6f,0xf9},
{0xff,0x77,0x65},
{0xfe,0xbb,0x1e},
{0x7e,0xdd,0xfe},
{0x00,0xee,0xfe},
{0x7e,0xdd,0xfe},
{0xfe,0xbb,0x1e},
{0xff,0x77,0x65},
{0xff,0x6f,0xf9},
{0xff,0x9f,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
};


uchar phase,th1,tl1,index,count;


main()
{
EA=0;
EX0=1;
ET1=1;
PX0=1;
IT0=1;
TMOD=0x11;
index=0;
EA=1;
while(1)
{
}
}

void Int0_Handle(void) interrupt 0 using 2
{
uint t0_time;
TR0=0;
TR1=0;
TF1=0;
t0_time=TH0<<8|TL0;
TL0=0;
TH0=0;
TR0=1;
t0_time=65535-t0_time/SEG;
th1=t0_time/256;
TH1=th1;
tl1=t0_time % 256;
TL1=tl1;
if (count<3*INTERVAL){ //3幅图片轮回
count++;
}
else{
count=0;
}
index=count/INTERVAL;
if (th1!=0xff || tl1!=0xff){ //假如摆动出格慢,按时器溢出就不表现
phase=0;
TR1=1;
}
else{
TR1=0;
}
}

void Timer1(void) interrupt 3 using 3
{
if (phase<SEG) //17段依次表现
{
P1=pattern[phase][index];
phase++;
TH1=th1;
TL1=tl1;
}
}

 

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容