LED显示摇棒制作859
摇摇棒的制作流程(附带程序和原件清单)
摇摇棒的制作大家知道,人的眼睛存在视觉暂留现象,正因为眼睛的反应迟钝,才丰富了人的视觉感受。
LED摇摇棒很好地利用了人眼的视觉暂留特性。
下图是基于51单片机控制、16只高亮度LED发光二极管构成的摇摇棒,配合手的左右摇晃就可呈现一幅完整的画面,可以显示字符、图片等。
实物外形图:基本原理与硬件电路设计:16只LED发光管作为画面每一列的显示,左右摇晃起到了扫描的作用,人眼的视觉暂留现象使得看到的是一幅完整的画面。
与LED点阵的显示有几分相仿。
硬件电路如下图(点击可放大)。
系统电源VCC为5V,下载程序和调试时一定要保证5V电压,实际使用时用3节干电池串联4.5V即可。
AT89S52单片机作为控制器,在它的P0、P2口接有16只以共阳的方式连接的高亮度LED,由单片机输出低电平点亮。
P0口的上拉电阻RA1不能少。
串在LED公共端的二极管D1会产生一定的压降,用来保护LED,经实测LED点亮时两端电压为3V左右,在LED的安全承受范围内。
K1是画面切换开关,用于切换显示不同内容;S1为水银开关。
水银开关的作用:棒在摇动时,只能在朝某一方向摇动时显示,否则会出现镜像字或镜像画面,所以通过接一只水银开关来控制,使摇摇棒从左向右摇动时将内容显示出来。
硬件制作:使用的是直径5mm的红色高亮LED,感觉太大了些,远看效果很好但近看时字不够连贯。
建议使用直径为3mm的高亮LED,颜色可根据个人喜好选择。
水银开关里的水银珠很活跃,导致在接通时容易产生抖动,所以将水银开关斜向上放置(尖尖朝斜上方45°角),靠水银珠自身重力的作用减少抖动:IC座里面隐藏元件,既美观又能保护元件:软件设计:/**********************************************************程序名称:LED摇摇棒显示64*16像素简要说明:外部中断方式INT0显示;取模方式:纵向取模、字节倒序编写:最后更新:08/11/15晚**********************************************************/#include <AT89X52.h>#define uchar unsigned char#define uint unsigned int //宏定义#define KEY P3_0 //定义画面切换按键uchar KY; //KY作用在后面说明uchar disp; //显示汉字指针uchar pic=0,num=0; //pic为按键次数;num为中断次数uchar code love[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x20,0x00,0x20 ,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00 ,0xF8,0x0F,0x04,0x10,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x04,0x10,0xF8,0x0F ,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x20 ,0x00,0x10,0x00,0x08,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x82,0x20 ,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,/*LOVE*/};uchar code loveyou[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x78,0x00,0xFC,0x00,0xFE,0x01,0xFE,0x03,0xFE,0x07,0xFE,0x0F,0xFE,0x1F ,0xFC,0x3F,0xF8,0x7F,0xFC,0x3F,0xFE,0x1F,0xFE,0x0F,0xFE,0x07,0xFE,0x03,0xFE,0x01 ,0xFC,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,/*心形图案*/};uchar code hehe[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x40,0x01,0xC0,0x01,0x00,0x00 ,0x00,0x00,0xF0,0x0F,0x08,0x10,0x04,0x20,0x00,0x00,0x00,0x00,0xF0,0x3F,0x08,0x00 ,0x04,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x20 ,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0xF0,0x3F,0x08,0x00 ,0x04,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x04,0x20 ,0x08,0x10,0xF0,0x0F,0x00,0x00,0x00,0x00,0xC0,0x01,0x40,0x01,0xC0,0x01,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,/*呵呵o(∩_∩)o图案*/};unsigned char code hanzi[] = {//-- 欢 --0x04,0x10,0x34,0x08,0xC4,0x06,0x04,0x01,0xC4,0x82,0x3C,0x8C,0x20,0x40,0x10,0x30, 0x0F,0x0C,0xE8,0x03,0x08,0x0C,0x08,0x10, 0x28,0x60,0x18,0xC0,0x00,0x40,0x00,0x00, //-- 迎 --0x40,0x00,0x42,0x40,0x44,0x20,0xC8,0x1F, 0x00,0x20,0xFC,0x47,0x04,0x42,0x02,0x41, 0x82,0x40,0xFC,0x7F,0x04,0x40,0x04,0x42, 0x04,0x44,0xFE,0x63,0x04,0x20,0x00,0x00, //-- 使 --0x40,0x00,0x20,0x00,0xF8,0xFF,0x07,0x00, 0x04,0x80,0xF4,0x43,0x14,0x45,0x14,0x29, 0x14,0x19,0xFF,0x17,0x14,0x21,0x14,0x21, 0x14,0x41,0xF6,0xC3,0x04,0x40,0x00,0x00, //-- 用 --0x00,0x80,0x00,0x60,0xFE,0x1F,0x22,0x02, 0x22,0x02,0x22,0x02,0x22,0x02,0xFE,0x7F, 0x22,0x02,0x22,0x02,0x22,0x42,0x22,0x82, 0xFF,0x7F,0x02,0x00,0x00,0x00,0x00,0x00, //-- 神 --0x08,0x01,0x88,0x00,0x49,0x00,0xEE,0xFF, 0x58,0x00,0x88,0x00,0x00,0x00,0xF8,0x1F, 0x88,0x08,0x88,0x08,0xFF,0xFF,0x88,0x08, 0x88,0x08,0xFC,0x1F,0x08,0x00,0x00,0x00, //-- 奇 --0x40,0x00,0x40,0x00,0x44,0x00,0x44,0x3E, 0x64,0x12,0x54,0x12,0x4C,0x12,0x47,0x12, 0x4C,0x3F,0x54,0x42,0x74,0x80,0xC6,0x7F, 0x44,0x00,0x60,0x00,0x40,0x00,0x00,0x00, //-- 魔 --0x00,0x40,0x00,0x30,0xFE,0x8F,0x4A,0x80, 0xAA,0x5F,0x9A,0x4A,0xFE,0x2A,0xAA,0x1A, 0xCB,0x0F,0xAA,0x7A,0xFE,0x8A,0x9A,0xAA, 0xAA,0x8F,0x6B,0x80,0x22,0xE0,0x00,0x00, //-- 幻 --0x80,0x20,0xC0,0x30,0xA0,0x28,0x98,0x24, 0x87,0x22,0x80,0x21,0xC4,0x30,0x04,0x60, 0x04,0x00,0x04,0x20,0x04,0x40,0x04,0x80, 0x04,0x40,0xFE,0x3F,0x04,0x00,0x00,0x00, //-- 摇 --0x10,0x02,0x10,0x42,0x10,0x81,0xFF,0x7F, 0x90,0x04,0x54,0x05,0xCC,0xF4,0xB4,0x44, 0x84,0x44,0xBC,0x7F,0x82,0x44,0xA2,0x44, 0x9B,0xF4,0x82,0x06,0x00,0x04,0x00,0x00, //-- 摇 --0x10,0x02,0x10,0x42,0x10,0x81,0xFF,0x7F,0x90,0x04,0x54,0x05,0xCC,0xF4,0xB4,0x44,0x84,0x44,0xBC,0x7F,0x82,0x44,0xA2,0x44,0x9B,0xF4,0x82,0x06,0x00,0x04,0x00,0x00,//-- 棒 --0x10,0x04,0x10,0x03,0xD0,0x00,0xFF,0xFF,0x90,0x00,0x54,0x05,0x44,0x12,0xD4,0x15,0x74,0x14,0x5F,0xFF,0xD4,0x14,0x54,0x15,0x56,0x12,0x44,0x06,0x40,0x02,0x00,0x00,//-- ! --0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x10,0xFE,0x3B,0xFE,0x3B,0x7C,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*****函数声明*****/void display1(void);void display2(void);void display3(void);void display4(void);/*****n(us)延时子程序*****/void DelayUs(uint N){uint x;for(x=0; x<=N;x++);}/*****中断服务程序*****/void intersvr0(void) interrupt 0 using 1{KY=~KY; //每个摇动来回水银开关会在摆幅两端分别产生下降沿中断,只提取其中一次(从左向右摇才显示)if(KY==0){num++; //计算中断次数switch(pic) //选择画面{case 0:{display1();}break;case 1:{display2();}break;case 2:{display3();}break;case 3:{display4();}break;default:{display1();}}}}/*****显示子程序1(汉字)*****/void display1(void){uchar i;if(num>10){disp++;num=0;} //12个汉字分为3次显示完(每次显示4个),每中断10次切换if(disp>2)disp=0;DelayUs(5200); //此处延时时间依各硬件差别而各不相同,试着调整使得显示内容居中即可for(i=0;i<64;i++){P0=~hanzi[disp*128+i*2];P2=~hanzi[disp*128+i*2+1];DelayUs(100);}}/*****显示子程序2(LOVE)*****/void display2(void){uchar i;DelayUs(4000);for(i=0;i<64;i++){P0=~love[i*2];P2=~love[i*2+1];DelayUs(120);}}/*****显示子程序3(心形图案)*****/void display3(void){uchar i;DelayUs(4000);for(i=0;i<64;i++){P0=~loveyou[i*2];P2=~loveyou[i*2+1];DelayUs(120);}}/*****显示子程序4(呵呵o(∩_∩)o图案)*****/void display4(void){uchar i;DelayUs(4000);for(i=0;i<64;i++){P0=~hehe[i*2];P2=~hehe[i*2+1];DelayUs(120);}}/*****主函数*****/void main(void){IT0=1;EX0=1;EA=1; //开中断,下降沿中断KY=0;while(1) //主程序中只检测按键{if(KEY==0) //画面切换键按下{DelayUs(10000); //按键去抖if(KEY==0);pic++;}if(pic>3)pic=0;}}/*****END*****/51最小系统制作材料规格数目价格/带串口万用板 1 10 stc89C52 1 7 按键开关 1 0.2常开按钮开关 2 1 发光二极管(红 5mm)(蓝色 3mm)红色10个,蓝色3个0.1电解电容10uF 2电阻220、417K、1K 20 0.0排阻 4.7K*9P 1 0.3瓷片电容104/30 10 0.0三极管8550 1 0.15V蜂鸣器 1 0.5一位数码管共阴 2 2 单排针 2 0.3 USB-A加配套的USB线 1 1 MAX232 1 2紧锁座40P 1 0.2芯片座IC-16P 1 0.4晶振12M 1 0.8蜂鸣器 1串口线 18550 1 红外编码芯片5104 2DA转换器DAC0832 1单股线5M摇摇棒制作芯片座AT89s52或stc型万用板5mm高亮发光二极管16晶振12M 0.8 130p瓷片电容0.05 10电阻10K 0.01 10电解电容10uF 1二极管IN4007 0.1 1按键开关0.2 1水银开关 1 1排阻10k*8 0.3 1导线(最好为排线)40PZUO电阻1k电解电容 220u40p座。
魔幻摇摇棒原理(基于AT89S52单片机)
魔幻摇摇棒设计原理原理:“摇摇棒”是基于人的视觉暂留原理的,通过分时刷新16个发光二极管来显示输出文字或图案等信息的显示装置。
输出信号频率的控制通过单片机来实现,用摇动传感器检测当前摇动状态。
当进行摇动时,由于人的视觉暂留原理,会在发光二极管摇动区域产生一个视觉平面,在视觉平面内的二极管通过不同频率的刷新,会在摇动区域内产生图像,从而达到在该视觉平面上传达信息的作用。
一、引言LED显示棒,又称摇摇棒,是一种利用视觉暂留效应制作的“高科技”玩具。
可以用“静如处子,动如脱兔”来形容它,即当静止时,它只是几个LED发光二极管(后简称LED),而一旦按照一定的频率去摇晃它,它就会随着位置的变化而变化(亮或灭),最终显示一幅图片或字符串。
本设计要求制作完成一个LED的显示棒。
要求LED灯线状排列,通过摇动时形成的亮灯扇形区域能够分辨出如:“你最棒”、“0K”、爱心之类的汉字或图案且可以使用按键对显示内容进行切换。
二、系统设计方案1.设计思路本系统要求设计一个LED显示棒,且需要有按键进行内容切换,它主要是由中央控制部分、LED驱动部分、LED显示部分以及电源部分组成,如图1所示:图1:LED显示棒系统框图单片机将提取的字模进行存储,当接收到按键输入的指令时单片机就将相应的字模代码通过I/O口输出,使LED点亮,利用视觉暂留原理最终使图案完整的显示在摆动的显示屏中。
本题的难点在于送数据的时间间隔以及较长画面或文字的完整显示。
以下将对各模块的方案进行论证与比较:2.模块方案的论证与比较2.1 LED灯的选择方案一:传统LED发光二极管。
颜色多样,在可以同样显示图案的前提下使用它更为经济,但是颜色较为黯淡,不鲜亮。
方案二:高亮LED发光二极管。
正如其名,它的亮度比传统二极管要亮,而且同样也有很多颜色,但是高亮LED的工作电流也要大于传统二极管。
为了使显示的图案清晰、明了,我们选择方案二,经过比较,使用红色的LED使得显示画面更为明显、突出,使用两片CR2032纽扣电池为其供电,提供足够的电流。
单片机——摇摇棒制作
摇摇棒·原创· [图片]2011年05月13日 15:17 阅读(130) 评论(10) 分类:个人日记主题名:摇摇棒背景:想信小时候有玩过香火或者烟花的吧,当香火或者烟花在手中晃动的时候,你会看到什么?对,好看的火花画面···功能:本作品当你拿在手中以较快的速度左右摇摆的时候,由于人眼视觉暂留效应,会在作品经过的幅平面内显示文字,图画,以及发挥你的想象···你想DIY一个么,你想给你的女友一个惊喜么,你想···?想就快快动手吧···前一阵子,应同学邀请,合作了一批32个LED的摇摇棒,其实哥们动机不纯(哈哈··他死不承认··不要告诉他是我说的啊·),为了满足他的心愿,程序+调试,花了一个晚上给他写了,现在将资料整理···发出来···欢迎拍砖···东西简单,鼓励大家自己动手制作,如果哥们有桃花运,不要忘记给我发喜糖啊··抓住时间,超越空间,飞往另一个世界···照片名称:也许,相见不如怀念··照片名称:也许这就是人间的四月天吧··照片名称:爱你,疼你,你会知道么?照片名称:让我们相约同一个地方···照片名称:实物照片名称:电路图(可以联系索取·)/********程序功能:32*32点阵摇摇棒程序版本:2011年4月11日2:35:38 V2.5程序设计者:消失的电波(彭杰)程序修改者:/********/// 此为自定义头文件,具体请参见STC89C52RC/89C54RD+/89C58RD+ 系列芯片// datasheet中PQFP-44/PLCC-44封装关于P4口的引脚定义以及内部地址声明#include <reg58.h>// 内含_nop_();函数#include <intrins.h>// 32*32汉字字模数据头文件#include <data.h>#define DelayTime 10 // 延时时间根据晶体改动此参数unsigned char changeFlag = 1; // 画面切换标志sbit P4_3 = P4^3; // 按键接口,本程序中应用P4^3的第二功能,即外部中断2 // 延时子函数void delay(unsigned int i){while (i--){_nop_ ();}}// 显示子函数 DisAdd:欲显示汉字头地址 delayTime:延时时间void Display(unsigned char *DisAdd,unsigned char delayTime){unsigned int i;// 一个32*32点阵的汉字占64个字节。
LED摇摇棒PPT课件
2019/6/18
泉州信息职业技术学院
第20页
情境 3 第10章 I2C总线
2、 I2C总线的信号时序
SDA
应答位
应答位
SCL 1 2
7 8 91 2
891
开始 信号
结束 信号
注意信号时延,详见表10-1 表10-2
LED摇摇棒设计与制作(16x1单红)
客户要求如下 : 1.使用32x1个LED作为显示输出。 2.使用89C52LE 3.3V低功耗单片机作为主控芯片。 3.采用水银开关作为中断源,产生中断当左右摇 晃时能够产生中断,并能稳定执行中断服务程序。 4.有按键切换功能,当没有触动图案切换按键时, 会间断地显示几个固定的字符或图案。 5.具有存储功能,能在上位机(C++开发)上输 入字符,把字符存储入存储器,并实时读取。
泉州信息学院
15
LOGO
单片机接口技术课件8
张苏嘉
2019/6/18
泉州信息学院
16
情境 3 第10章 I2C总线
第10章I2C总线接口设计
教学目的: 1. I2C总线的基本结构; 2. I2C总线信息传送方式; 3. I2C总线读、写操作; 4. 24C08总线程序编制。
重点难点: 24C08总线程序编制
2019/6/18
泉州信息学院
8
根据客户需求进行分析,开始总体设计
设计需包括: 1、16个LED(布线时,高端在下,例如P2.7在下, P2.0在上) 水银开关(接于外部中断P32或P33,用于控制字 符显示) 按键(用于设置24C08的存储读取) 24c08存储芯片(IIC总线读写程序) 稳压电路(5V 3.3V稳压) 最小系统(复位、电源、P3.0 P3.1烧写)
LED摇摇棒实际制作图文教程【含汇编程序】
LED摇摇棒实际制作图文教程【含汇编程序】LED摇摇棒实际制作图文教程【含汇编程序】总体介绍:大家知道,人的眼睛存在视觉暂留现象,正因为眼睛的反应迟钝,才丰富了人的视觉感受。
意思是时间小于1/24秒人就分辨不出了,LED摇摇棒很好地利用了人眼的视觉暂留特性。
配合手的左右摇晃就可呈现一幅完整的画面,可以显示字符、图片等。
讲白了就和点阵的显示没什么去别,只是你的手摇晃的过程代替了点阵的片选。
下面是总体的设计电路图:D1是电源指示灯,习惯性做法,是为了更好的了解你电路的物理现象。
下面是摇摇棒的效果图:硬件模块:总体电路图有了我就说一下,焊接步骤及需要注意的细节,第一步:焊好16个LED灯,当然个数随喜好而定,LED颜色也随喜好,但最好不要用白光。
(正面) (背面)第二步:焊单片机最小系统元件放在里面一是为了保护元器件;二是为了美观、好看。
这里注意一下:我们可以在单片机的TXD和RXD及地那里接出来三根排针,接到单片机开发板上的TXD、RXD和地。
是为了烧程序方便,不用每烧一次程序就把它取出来,这样既减少了操作也减少了对单片机的损坏。
第三步:接线(正面)反面第四步:完成,还有按键和水银开关没接,等会会介绍。
总体以焊好下面介绍切换按键和水银开关的接发和作用。
1、水银开关在这里起的是防止镜像文字,深沉点给单片机一个下降沿的触发。
镜像文字通俗点讲是希望当文字向左晃动显示,向右晃动时不让其显示。
但如果没有水银开关给个中断的话,文字会一直显示,造成两排文字重叠在一起。
使人看不清。
当然我们要避免这种情况就接了个水银开关。
水银开关的安放最好是与LED成45度角,既容易触发、减少抖动也是为了安全,当装好后,可以用胶把它封起来,这样就避免了水银开关的破碎。
2、按键开关主要是为了切换模式,这个比较简单,端口随便接哪都可以,我接的是P0.2,软件模块:;===================================================== ;=====程序名称:摇摇棒================================ ;=====硬件说明:16个LED分别接P1、P2口,水银开关接P3.2,;===============按键开关接P0.2======================== ;=====软件说明:采用查表方式,外部中断0===============;=====程序编辑时间:2010-11-14-11-15================== ;=====程序编辑人:李阳辉============================== ;=====所用芯片:STC89C52============================== ;=====所用晶振:12MHz================================= ;=====版本:V1.0====================================== ;=====当前进度:完成================================== ;=====程序完成时间:2010-11-16-10-20================== ;================================================== === ;=====分配单元地址==================================== OUTPUT1 EQU 31H ;P2口查表的暂存器OUTPUT2 EQU 30H ;P1口查表的暂存器COUNT1 EQU 32HC1 EQU 33HC2 EQU 34HC3 EQU 35H C4 EQU 36H C5 EQU 37H C6 EQU 38H C7 EQU 39H C8 EQU 3AH C9 EQU 3BH C10 EQU 3CH KEY BIT P0.2ORG 0000H ;起始地址JMP RESETORG 0003H ;外部中断入口地址JMP INTORG 0030H/*===========================================复位程序===========================================*/RESET:MOV C1,#00H ;偏移量MOV C2,#00HMOV C3,#00HMOV C4,#00H/*MOV C5,#00HMOV C6,#00HMOV C7,#00HMOV C8,#00HMOV C9,#00HMOV C10,#00H */MOV OUTPUT1,#00HMOV OUTPUT2,#00HSETB KEY ;把P0.2置高,作为输入口MOV COUNT1,#00HSETB EX0 ;分中断SETB EA ;总中断SETB IT0 ;启动/*========================================== 主程序==========================================*/ MAIN:CALL KEY_SCANCALL NOADLJMP MAIN/*========================================= 按键处理程序只做了两种模式,大家可以再加=========================================*/ KEY_SCAN:JB KEY,KEY_RETLCALL DELAYJB KEY,KEY_RETINC COUNT1INC COUNT1MOV A,COUNT1CJNE A,#4,KEY_DMOV COUNT1,#00HKEY_D:JNB KEY,$KEY_RET:RET/*========================================== 散转程序==========================================*/ NOAD:MOV DPTR,#TAB_B ;设置散转表地址MOV A,COUNT1JMP @A+DPTRTAB_B: ;散转表AJMP OPR_0AJMP OPR_2OPR_0:MOV DPTR,#TAB1MOV A,C1MOVC A,@A+DPTRMOV OUTPUT1,AMOV DPTR,#TAB2MOV A,C2MOVC A,@A+DPTRMOV OUTPUT2,AMOV P2,OUTPUT1 MOV P1,OUTPUT2 CALL DELAYINC C1INC C2MOV A,C2CJNE A,#64,OPR_0 MOV C1,#00H MOV C2,#00H LJMP OPR_RET OPR_2:MOV DPTR,#TAB3 MOV A,C3MOVC A,@A+DPTR MOV OUTPUT1,A MOV DPTR,#TAB4 MOV A,C4MOVC A,@A+DPTR MOV OUTPUT2,A MOV P2,OUTPUT1 MOV P1,OUTPUT2 CALL DELAYINC C3INC C4MOV A,C4CJNE A,#64,OPR_2MOV C3,#00HMOV C4,#00HLJMP OPR_RETOPR_RET:RET/*===========================================中断处理程序===========================================*/ INT:MOV P1,#0FFHMOV P2,#0FFHCALL DELAYRETI/*===========================================延时程序===========================================*/ DELAY:MOV R7,#3D1: MOV R6,#0E0HDJNZ R6,$DJNZ R7,D1RET;===========================真心爱你========================== TAB1: DB0FFH,0F7H,0F3H,0F7H,0F7H,0F7H,0F0H,0F7H,0C7H,0E7H,0B7H,0CBH,0EFH,0 F0H,0FBH,0FDHDB0FFH,0F9H,0F8H,0ABH,0AH,0B2H,0BAH,0A2H,0DBH,0DAH,0C2H,0DAH,0DBH,0E8H ,0F9H,0FFHDB0FFH,0E1H,0DEH,0BFH,0BFH,0BFH,0DFH,0EFH,0EFH,0DFH,0BFH,0BFH,0BFH,0DE H,0E1H,0FFHDB0FFH,0FFH,0DFH,0DFH,0DFH,0D0H,0D5H,0A5H,95H,0D5H,0A5H,0D0H,0DFH,0DFH ,0FFH,0FFHTAB2:DB0FFH,0FFH,0CFH,0BFH,7FH,0FFH,03H,0F7H,0EFH,7FH,0BFH,0DFH,0FFH,03H,0F FH,0FFHDB0FFH,0FFH,0FCH,0FCH,0CCH,0CBH,0C7H,0CBH,5CH,9FH,0EFH,0F7H,0FBH,0FDH, 0FFH,0FFHDB0FFH,0FFH,0FFH,7FH,0BFH,0DFH,0EFH,0F7H,0F7H,0E7H,0DFH,0BFH,7FH,0FFH, 0FFH,0FFHDB0FFH,0DFH,0DFH,0DDH,0DBH,17H,4FH,5FH,5FH,5FH,4FH,07H,0DBH,0DDH,0DFH, 0FFH;=========================新年快乐============================TAB3:DB0FFH,0FFH,0FEH,0FEH,0BEH,0BEH,0DEH,0DEH,0D8H,0DEH,0DEH,0EEH,0EEH,0E0 H,0FFH,0FFHDB0FFH,0FFH,0FFH,0F8H,0FBH,0FBH,0E0H,0FBH,0FBH,0FEH,0FDH,0FBH,80H,0 FFH,0F8H,0FFHDB0FFH,0FFH,0FFH,0F7H,0F7H,0F5H,0F5H,0F0H,0F5H,0F5H,0F5H,0D4H,0E7H,0F7 H,0F8H,0FFHDB0DEH,0DEH,0DEH,0DEH,0EEH,0EEH,0E0H,0FFH,0EEH,0E6H,0EAH,0ECH,0CCH,0AA H,0E6H,0EEHTAB4:DB0FFH,0FFH,0F7H,0EFH,0DFH,0BFH,0FFH,0FFH,01H,0FBH,0F7H,0BFH,0DFH,0EFH ,0F7H,0FFHDB0BFH,0BFH,0BBH,37H,0AFH,9FH,3FH,9FH,0AFH,0B7H,0BBH,0FFH,01H,0FFH,0FF H,0FFHDB0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,0DFH,01H,0DFH,0DFH,0DFH,1FH,0DFH,0DFH, 0DFH,0FFHDB0FFH,0FFH,0FFH,01H,0FFH,0FFH,0FH,0F1H,0FFH,0EFH,8FH,0B0H,03H,0B7H,9F H,0EFH;=======================================================END ;结束。
摇摇棒的设计
系 别: 电 子 信 息 系专 业: 电 子 信 息 工 程 班 级: B110301 学 号: B1030114 姓 名: 刘云飞 指导教师: 张妮 实习题目: 摇摇棒的设计 实习地点: 电子实验室教务处印制2014 年 7 月 9 日生产实习报告指导教师填阅摇摇棒的设计制作及调试一前言:今年暑假学校给我们安排了很多的实习和课程设计。
这次生产实习摇摇棒的制作就是其中一个,本次实习介绍了一种新型的LED彩灯控制系统的设计方法,以单片机作为主控核心,与按键、水银开关等较少的辅助硬件电路相结合,利用软件实现对LED彩灯进行控制。
本系统具有体积小、硬件少、电路结构简单及容易操作等优点。
摇摇棒就是基于人的视觉暂留原理的,通过分时刷新16个发光二极管来显示输出文字或图案等信息的显示装置。
基本原理与硬件电路设计:16只LED发光管作为画面每一列的显示,左右摇晃起到了扫描的作用,人眼的视觉暂留现象使得看到的是一幅完整的画面。
与LED点阵的显示有几分相仿。
本次设计要求制作完成一个LED灯显示的摇摇棒,16个LED灯一字纵向排列,通过摇动时形成的亮灯扇形区域来显示预先设定的汉字或图案,且可以用按键对所显示内容进行切换。
2、水银开关的作用:棒在摇动时,只能在朝某一方向摇动时显示,否则会出现镜像字或镜像画面,所以通过接一只水银开关来控制,使摇摇棒从左向右摇动时将内容显示出来。
3、硬件制作:使用的是直径3mm的红色LED,颜色可根据个人喜好选择。
水银开关里的水银珠很活跃,导致在接通时容易产生抖动,所以将水银开关斜向上放置(尖尖朝斜上方45°角),靠水银珠自身重力的作用减少抖动。
二实习目的1.非常重要的实践教学环节2.培养理论知识与生产实际相结合的能力3.了解单片技术4.锻炼实际动手能力,掌握电子线路焊接、装配的基本技能5.了解并掌握本专业软硬件设计的一些基本问题三实习时间,及进程安排6月28日至6月29日:理论学习及讲座阶段,上午讲座下午及课外时间进行资料收集,查找及学习。
摇摇棒制作
杜洋工作室 DoYoung Studio- SHOOK16摇摇棒- 所需元器件- 电路原理图- 单片机采用STC12C5A60S2(1pcs)- 0805型贴片式LED灯(16pcs)- CR2032钮扣电池(2pcs)- 具有一定弹性的导线和废弃的元器件引脚- 用来包装DIP40脚单片机的塑料壳(1pcs)- 确保单片机可以放入并有较大余地- 用钳子将P0、P2接口所在一侧的引脚全部向外弯折- 目的是保证将单片机放入塑料壳时不会左右乱窜- 弯折时尽量不断放入塑料壳中比对- 擦拭弯折后的引脚表面确保无污物可以顺利上锡- 用摄子取出贴片LED灯并焊接在单片机引脚上- 从P2.0引脚开始焊接左边焊LED负极(P2.0负极、P2.1正极)- 依次焊接16个LED灯到P0.2引脚为止- 将一支废弃元器件引脚对折并焊接在弹性导线上- 弹性导线的另一端焊接在单片机的第20脚上(GND)注意掌握导线长度- 将P1.3引脚弯折至芯片底部再用废弃元器件引脚向上延长P1.2引脚- 使之形成惯性开关的两个触点再把P1.4引脚略向内弯曲形成侧撞触点- 把一支废弃的元器件引脚焊接在单片机的第40脚上(VCC)- 再取一段导线将一端焊接在单片机的第20脚上(GND)- 导线另一端的接头处挂大量的锡- 用胶带固定导线使之在摇动时不易乱窜- 此时在单片机一侧形成了电源的正、负极接口- 将钮扣电池重叠后放入正、负极接口处- 最后将单片机连同电池一并塞进塑料壳中∙- 用透明胶带把开口处包好∙- 因摇动时的离心力向上所以单片机及电池不会向下滑落无需设计下方固定∙- 不用时可取出电池(或把纸片塞在两块电池中间)∙- 可用透明胶带缠绕单片机一圈并在塑料壳开口处留出胶带头以方便拉出电池- 用手握住塑料壳另一端左右匀速摇动即可- 本设计可显示16位字高的汉字或英文字母- 通过纵向敲击摇摇棒来完成字幕的切换- 字幕数量和内容可以在源程序中设计∙- 环境光线较弱时可以达到更好的显示效果∙- 制作说明∙- SHOOK16 V1演示视频∙- SHOOK16摇摇棒字幕修改方法。
摇摇棒制作说明书
摇摇棒焊接教程摇摇棒焊接教程一、说明8个IO驱动32颗高亮发光二极管,程序对上一版本有做改进,显示效果更好,自适应的更好。
另外增加了上位机改字的功能,从而大大减少了改动源程序的麻烦。
也使得改字很方便,上位机功能可支持输入文字,大小任意,只要在32*64这个区域内就行。
支持画图,导入BMP格式图片及保存图片,一共可以配置8张图片,每个图片独立,软件自带各种图案,也可从Word里导出图案,显示图案在范围内随便定义大小。
准备工作:电烙铁一把(功率最好在40W),焊锡丝一卷(直径最好在0.8左右),焊锡膏或松香若干,剪脚钳一把。
准备一个小盒子,把所有的元器放入盒子里备用。
拿到套件的时候先清点元件数量,焊接的时候对照元件清单进行焊接二、元件清单:器件名称标号数量备注3m m发光二极管D1-D3232直插件M C U STC11F04E U11直插件I C座 20PI N1直插件C H340U21表面贴装震动开关S11直插件按键S21表面贴装二极管 SS14D K D K1 D K23表面贴装20pF 电容C2 C32表面贴装0.1uF 电容C1 C82表面贴装电源开关sw1直插件晶振 12M H z Y11直插件M I C RO U SB J11表面贴装注:电阻R1用焊锡短掉即可。
三、原理图:如下图看不清楚的,具体请看PDF文档的原理图四、焊接说明以及注意事项:1、LED具有极性。
焊接前请确认LED管脚正负极,长脚正,短脚负!如果焊接错误,需要拆下容易损坏PCB板,所以为了一次焊接成功请务必分清正负极!根据缺口来确定LED 极性。
焊接时烙铁不能长时间加热器件,那样很容易烧坏led。
长脚靠近芯片一端。
2、先进行usb接口的焊接(注意:注意焊接方向)3、贴片元件的焊接(注意:注意芯片CH340和二极管的极性)4、焊接完成下载口:usb供电口即下载口,安装好驱动即可下载程序。
五、常见问题分析1、摇晃时出现个别LED不亮,请检查是否有断线。
基于89C52的32只三色LED摇摇棒设计
www�ele169�com | 15电子电路设计与方案0 引言摇摇棒是一种通过左右摇晃棒体就可以在所摇晃的区域看到文字或图案的电子产品。
目前,以16个单色高亮LED 制作的摇摇棒在市面上已经很常见,在社会的高速发展下,这种简单的摇摇棒已经无法满足人们的使用需求。
这种摇摇棒由于使用LED 数量过少导致显示清晰度低、显示的图形种类少颜色单一,显示的图文缺乏吸引力。
为了改善单色摇摇棒的这些问题并提高其在人们生活中的使用价值,设计中采用32个三色LED 来作为显示部分。
摇晃起来就会看到比16个LED 摇摇棒显示出的图文更加清晰,显示图形的种类更加多且更加的复杂。
还可以通过颜色选择按键自由1 系统方案设计■1.1 硬件设计思路设计的主要目的在于增强显示的清晰度,增加显示的颜色种类以提高摇摇棒的吸引力。
本设计中摇摇棒是采用32个三色LED 排成一列作为显示部分,使用时只需左右摇晃摇摇棒且摇晃时只有单方向显示即固定从左向右摇晃时显示或者固定从右向左摇晃时显示,使用者能够自由的选择所要显示的图文以及显示的颜色,最后能在摇晃的区域显示出稳定清晰的画面。
■1.2 硬件电路设计(1)按键开关模块:设计中通过按键开关按下的次数基于89C52的32只三色LED 摇摇棒设计何坤,滕璇璇(武汉轻工大学电气与电子工程学院,湖北武汉,430023)摘要:在基于16个单色摇摇棒出现的不足中,为了改善其显示图文简单和显示颜色单调等问题。
本文提出了以STC89C52为主控制器,通过74HC573锁存器扩展I/O口,使用32个三色LED作为显示部分,在摇晃时根据外部设备的状态实现在摇晃区最多可显示七种颜色的图文。
关键词:七色摇摇棒;74HC573锁存器;STC89C5216 | 电子制作 2019年08月关使用,通过P1.0~P1.3四个I/0口进行位选控制三极管的通断从而选通或断开这四组LED。
采用三片74HC573锁存器来扩展I/O 口,每片锁存器单独控制三色LED 的其中一种颜色。
LED摇摇棒设计与制作技术报告
成绩课程论文题目: LED摇摇棒设计与制作学生姓名:张勇学生学号:1008030328系别:电气信息工程专业:电子信息工程年级:10级任课教师:朱士永LED摇摇棒设计与制作张勇1008030328电气信息工程学院电子信息工程(3)2012 年 10月设计主要内容和完成功能:LED摇摇棒很好地利用了人眼的视觉暂留特性。
基于51单片机控制、16只高亮度LED发光二极管构成的摇摇棒,配合手的左右摇晃就可呈现一幅完整的画面,可以显示字符、图片等。
16只LED发光管作为画面每一列的显示,左右摇晃起到了扫描的作用,人眼的视觉暂留现象使得看到的是一幅完整的画面。
与LED 点阵的显示有几分相仿。
摘要本设计以AT89C2051单片机为中央控制器,显示棒摇动时显现的字符或图形由LED 灯显示,LED 灯成线状排列,每个瞬间线阵只能显示数字编码后的文字或图形的一列,利用人眼的视觉暂留原理,将需要显示的字符或图形分成64 列(,一般人手左右摆动的频率为几赫兹到十几赫兹,因此,通过单片机控制LED 线阵以一较低频率扫描显示字符或图形的每一列,摆动显示棒时即可因视觉暂留看出显示的字符或图形;左右摆动一次通过端口电平变化,调用相应的显示子程序,字符切换通过外部中断实现,该系统设计对程序设计的要求较硬件电路要高。
整套系统由中央控制模块、LED显示模块、供电模块等部分构成。
目录1、系统概述----------------------------------------52、硬件设计----------------------------------------62.1单片机选择------------------------------------62.2 外部中断信号产生方式---------------------------62.3LE显示模块-----------------------------------82.单片机最小系统的设计----------------------------9 3软件设计----------------------------------------10 4系统调试----------------------------------------11 5结束语------------------------------------------11 6参考文献----------------------------------------11 7附录--------------------------------------------121、系统概述本系统要求设计一个LED显示棒,它主要是由中央控制部分、LED显示部分以及电源部分组成,如图1-1所示,图1-1 系统组成部分单片机提取的字模进行存储,当接收到指令时单片机就讲字模代码通过I/O口输出,使LED点亮,利用视觉停留原理最终使图案显示在摆动的显示屏中。
多功能数码摇摇棒制作
S1l;cllF∞
匝巫卜
tt
图1总体系统框
万方数据
2.显示部设计 首先,我们根据LED点阵屏的显示原理: 点阵屏的显示分为行扫描与列扫描两种,列扫描 是将我们的字模数组通过点阵屏的行驱动进行输 入,然后通过列对每~行进行扫描,当列为低 (高)电平、行为高(低)电平时则表示该点为 图案的一部分。将其读出、显示。它的顺序可以 总结为:行不断的送数据,每送完设置的信息后 列进行读取,然后行再次送数据,列再次读取…… 依次循环下去。一幅完整的图案就显示在了显示 屏上。 而本次设计的LED显示棒数据传输原理与 LED点阵屏相似。可以把LED显示棒看成是 LED点阵屏中的一列。为了使显示的图案清晰, 我们使用了32个LED管将它们排成一列。整个 屏在静止时也就相当于32行X 1列。数据传输 时我们同样使用行送数据、列扫描。在摆动过程 中。应用视觉暂留原理,我们点亮的列不会很快 的消失,而是随着摆动的方向继续向前移动,只 要移动的速度高于视觉暂留的最短时间显示内容 就不会熄灭,至此,一幅图案也就可以这样被“摆 动”出来了。 显示部分设计原理图如图2所示。
万方数据
ITl=0://中断1为边沿触发方式 IP=0x08;//设置中断嵌套
TMOD=0x20;
//定时器1方式2。8位重装载 THl=0x80;//设定定时器初值
TLl=0x80;
EA=1://开放中断 ETl=1:,,开放定时器1中断 TRl=1:II启动定时器O。开始计时 key=0;//初始化显示第一组文字 while(1) {,/等待中断
IIII I I I广———————————————————————————~———————~制一17作1b1天亩期地一篮淄誓
多功能数码摇摇棒制作
LED显示摇棒全套方案及源程序
LED显示摇棒全套方案及源程序以下是一个基于Arduino的LED显示摇棒的完整方案和源代码:硬件材料:- Arduino UNO- LED灯带(可选择RGB灯带或单色灯带)- 9V电池或电源模块- 电源线- 杜邦线- 面包板- 陶瓷电容- 电阻- 节拍器(可选)连接电路:1. 将Arduino UNO连接到面包板上。
2. 将LED灯带的正极连接到Arduino的5V引脚,负极连接到GND引脚。
如果使用RGB灯带,请将红色、绿色和蓝色引脚连接到Arduino的数字引脚。
3. 将一个陶瓷电容器连接到电路的输入部分,以平滑电源电压。
4. 连接一个电阻并将其连接到Arduino的A0引脚,以测量摇杆所在位置。
源代码:```c++// 引入库#include <FastLED.h>// 定义LED灯带的引脚#define LED_PIN 5// 定义LED灯带的类型#define LED_TYPE WS2812B// 定义LED灯带使用的颜色类型#define COLOR_ORDER GRB// 定义LED灯带上的LED数量#define NUM_LEDS 60// 创建LED灯带对象CRGB leds[NUM_LEDS];// 定义摇杆的引脚const int JOYSTICK_PIN = A0;// 定义灯带的亮度#define BRIGHTNESS 50// 定义摇杆的中心位置#define JOYSTICK_CENTER 512// 定义摇杆的阈值#define JOYSTICK_THRESHOLD 100// 初始化灯带void setup() {// 设置灯带的类型和引脚FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds,NUM_LEDS).setCorrection(TypicalLEDStrip);// 设置灯带的亮度FastLED.setBrightness(BRIGHTNESS);// 启动串行通信Serial.begin(9600);}// 主循环void loop() {// 读取摇杆的值int joystickValue = analogRead(JOYSTICK_PIN);// 判断摇杆的位置if (joystickValue < JOYSTICK_CENTER - JOYSTICK_THRESHOLD) {// 向左移动LEDmoveLeft();}else if (joystickValue > JOYSTICK_CENTER + JOYSTICK_THRESHOLD) { // 向右移动LEDmoveRight();}// 更新LED灯带FastLED.show();}// 向左移动LED灯带void moveLeft() {// 将最后一个LED的颜色复制到第一个LEDleds[0] = leds[NUM_LEDS - 1];// 将所有LED向左移动一个位置for (int i = 1; i < NUM_LEDS; i++) {leds[i] = leds[i - 1];}}// 向右移动LED灯带void moveRight() {// 将第一个LED的颜色复制到最后一个LEDleds[NUM_LEDS - 1] = leds[0];// 将所有LED向右移动一个位置for (int i = NUM_LEDS - 1; i > 0; i--) {leds[i] = leds[i - 1];}}```这个方案可以通过读取摇杆的值,来控制LED灯带的移动方向。
LED显示摇棒制作
LED 显示摇棒制作
下面介绍自己动手做的漂亮玩具。
图形显示的原理:
利用人眼的视觉暂留效应,使手在摆动到不同位置的时候,让位于一条直线上的LED 显示二维图像的不同的列,实现图形扫描显示。
物理机制:
当我们在摆动手臂的时候,短时间内摆动位置和左右幅度不会有太大变化,利用我们手臂的这个运动规律,只要能得到棒从一侧摆动到另一侧的时间,然后把这个时间分成N 份,然后在每一份的时间里显示不同的花样就能实现图形的显示。
当我们在摆动手臂的时候,并不能预先得知此次摆动需要的时间,怎样得到从一侧摆动到另一侧的时间呢?
再想想,短时间内我们手臂的摆动频率也不会有特别大的变化,我们只要能得到前一次摆动所用的时间,然后用这个时间近似得到下一次摆动所需要的时间,然后分N 份就可以了。
得到一次摆动所需的时间的任务由光遮断器完成,在棒上装一个可以摆动的用来遮挡光遮断器光线的细杆,粗细比光遮断器的狭缝稍宽,我用的是整流桥焊后剪下的一段管脚。
每左右摆动一次这个杆就会通过一次光遮断器,使单片机产生一次中断,两次中断之间的时间就是想要得到的时间,实现这个功能用掉2051 的一个定时器T0 和外部中断INT0。
然后用2051 的另一个定时器T1,其定时时间是T0 的N 分之一,每次中断依次显示一列,就是照片上的效果。
再细想一下,手臂摆动的频率大于2Hz 的时候才大概能由视觉暂留看出图形,再快也不过十几Hz,由T0 为16 位定时器的最长计时时间得到2051 的。
基于单片机的显示摇摇棒的设计
基于单片机的LED显示摇摇棒的设计1 引言1.1系统设计要求设计并制作一个依靠摇动能显示字符、图形的LED显示棒。
系统设计的基本要求:设计一个基于LED的显示棒,其中LED灯必须呈线状排列,并至少使用16只,系统采用电池供电,摇动显示棒时形成的亮灯扇形区域能让人分辨出字符“A”、文字“电”以及国际奥委会五环图形,并用按键实现显示的切换。
系统设计的发挥部分:摇动显示棒时形成的亮灯扇形区域能够让人分辨出英文单词“Welcome”、汉字词组“美亚”和北京奥运会会徽图形,并适当增加设计特色与创新。
1.2 系统设计思路及特点该LED显示棒摇动时显现的字符或图形由LED灯显示,LED灯成线状排列,每个瞬间线阵只能显示数字编码后的文字或图形的一列,利用人眼的视觉暂留原理,将需要显示的字符或图形分成N列(N≥16),一般人手左右摆动的频率为几赫兹到十几赫兹,因此,通过单片机控制LED线阵以一较低频率扫描显示字符或图形的每一列,摆动显示棒时即可因视觉暂留看出显示的字符或图形;左右摆动一次通过端口电平变化,调用相应的显示子程序,字符切换通过外部中断实现,该系统设计对程序设计的要求较硬件电路要高。
2 系统理论设计2.1 系统总体方案比较及说明方案一:选用单片机AT89C51作为扫描显示控制核心,由其直接控制LED 线阵的显示,并外加扫描控制开关控制字符或图形的扫描显示,原理框图如图-1所示。
图-1 方案一原理框图基于单片机的LED显示摇摇棒的设计该方案线路简单,扫描控制开关可选择机械开关或编码开关或水银开关,在显示棒摇摆时接通线路控制单片机扫描输出字符或图形的列编码信号;单片机外另接有中断控制按钮用以切换不同字符或图形的显示,LED线阵采用普通三极管驱动,电路采用4节充电电池供电。
此方案的优点是:单片机C51的端口较多,可实现显示数据并行传输,速度较快,且外围电路简单,调试较方便。
缺点是:为了增大显示清晰度,除去可能由背景LED灯占用的端口外,单片机剩余端口无法使线阵中LED灯数量扩展至24只以上;单片机使用的晶振频率较大,软件不易实现对计数的控制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电池盒 0.5元 单面万用板 8元 可以裁成3块,做3个摇棒 陶瓷谐振器 1元 光遮断器 2元 电阻电容导线 2元 外壳* 0.7元 可以裁成2块 可选元件: 电源开关 1元 总成本不超过20元 *外壳我用在家乐福买的半透明文件夹卷成的 此电路电路非常简单,代码短,但是用到了2051的外部中断编程和 T0、T1定时器编 程,非常适合初学者练习。我制 作这个玩具花费了两个晚上的时间。此电路和程序还有扩展改进的空间,如在长时间不摆动的情况下可以使单片机进 入省电模式,显 示不仅限于对称图片等,大家可以试试。 以下是源程序: /*************************************************************************/ // --------------// LED 显示摇棒 // --------------// 作者:nim 于 2005-1-7 // // email: linyige@ // // 本设计版权归作者所有,请勿擅自用于商业目的,转载请注明作者及出处 /*************************************************************************/ #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},
原理图
以下是详细说明: 图形显示的原理: 利用人眼的视觉暂留效应,使手在摆动到不同位置的时候,让位于一条直线上的 LED 显示二维图像的不同的 列,实现图形扫描显示。 物理机制: 当我们在摆动手臂的时候,短时间内摆动位置和左右幅度不会有太大变化,利用我们手臂的这个运动规律,只 要能得到棒从一侧摆动到另一侧的时间,然后把这个时 间分成 N 份,然后在每一份的时间里显示不同的花样就能实 现图形的显示。当我们在摆动手臂的时候,并不能预先得知此次摆动需要的时间,怎样得到从一侧摆动到 另一侧的时 间呢? 再想想,短时间内我们手臂的摆动频率也不会有特别大的变化,我们只要能得到前一次摆动所用的时间,然后 用这个时间近似得到下一次摆动所需要的时间, 然后分 N 份就可以了。 得到一次摆动所需的时间的任务由光遮断器完 成,在棒上装一个可以摆动的用来遮挡光遮断器光线的细杆,粗细比光遮断器的狭缝稍宽,我用的是整 流桥焊后剪下 的一段管脚。每左右摆动一次这个杆就会通过一次光遮断器,使单片机产生一次中断,两次中断之间的时间就是想要 得到的时间,实现这个功能用掉 2051的一个定时器 T0和外部中断 INT0。然后用2051的另一个定时器 T1,其定时时 间是 T0的 N 分之一,每次中断依次显示一列,就是照片上的效 果。 再细想一下,手臂摆动的频率大于2Hz 的时候才大概能由视觉暂留看出图形,再快也不过十几 Hz,由 T0为16 位定时器的最长计时时间得到2051的时钟频率1MHz 最合适,还有遮挡用的细杆的粗细也可以大概估算,使其不会对 计时精度产生太大影响。 所用元件: AT89C2051 8元 高亮 LED 共8个 3.6元
LED 显示摇棒制作
LED 显示摇棒制作
作者:nim email: linyige@ 本设计版权归作者所有,请勿擅自用于商业目的,转载请注明作者及出处。
情人节我们做电的兄弟们送什么礼物给心仪已久的 MM?给大家提供一个适合作为礼物的简单电路, 自己动手 做的漂亮玩具一定会是送给 MM } void Timer1(void) interrupt 3 using 3 { if (phase<SEG) //17段依次显示 { P1=pattern[phase][index]; phase++; TH1=th1; TL1=tl1; } }
{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;