LED显示棒制作教程Word格式文档下载.docx
《LED显示棒制作教程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《LED显示棒制作教程Word格式文档下载.docx(15页珍藏版)》请在冰点文库上搜索。
2.3避免重影
3系统设计方案
3.1总体设计
3.2单元电路设计
3.2.1LED显示模块
3.2.2水银开关模块
3.2.3单片机最小系统模块
4软件设计
4.1软件设计思路
4.2软件设计流程图
4.3动态图片的实现
5系统测试
5.1设计要求部分的测试
5.2发挥部分的测试
6附录
6.1参考文献
6.2元器件统计表
6.3整体电路图
6.4程序清单
根据题目的要求,设计一个LED显示棒,而且要有按键进行内容的切换,它的系统主要由中央控制部分、LED驱动部分、LED显示部分以及电源组成,如图1所示:
图1:
LED显示棒系统图
单片机将提取的字模进行存储,当接收到按键输入的指令时单片机就将相应的字模代码通过I/O口输出,使LED灯点亮,利用人视觉暂留原理最终使图案完整的显示在摇摆的扇形区域中。
2.设计方案比较与论证
2.1LED灯的选择
方案一:
传统LED发光二极管,颜色多样,在可以同样显示图案的前提下使用它更为经济,只是颜色暗淡,不是很鲜亮,效果不佳。
方案二:
高亮LED发光二极管的亮度比传统二极管要亮,而且同样有很多种颜色,但是高亮LED的工作电流要比传统二极管大。
为了使显示的图案清晰、明了,我们选择高亮LED。
使用白色发绿色光的LED使得显示画面新鲜、平静、和平、安逸,用2节3V电池通过电阻分压后为其供电,提供足够的电流。
2.2外部中断信号的产生
方案一:
使用水银开关。
通过摇晃使得水银接通电路,利用这种接通方式产生的高低电平变化来触发中断,结合软件控制显示,制作简单,使用也方便。
使用光遮断器,在棒上安装一个可以摇摆的用来遮挡光遮断器光线的细杆,细杆每左右摇摆一次这个杆就会通过一次光遮断器,发生高低电平变化,同样通过这种电平变化,结合软件控制显示。
本次任务中产生的中断时为了实现数据的单程传输。
如果使用光遮断器,其触发单片机的时刻处于中间,不能解决画面因返回与原来画面重叠的现象。
而使用水银开关,棒在摇动时,只能在朝某一方向摇动时显示,否则会出现镜像字或镜像画面,所以通过接一只水银开关来控制,使摇摇棒从左向右摇动时将内容显示出来。
2.3避免重影
使用外部中断开关控制数据传输时刻。
外部中断信号由中断开关产生,触发方式为下降沿触发。
水银开关与单片机的外部中断接口P3.2相连,水银开关是否接通决定是单片机是否产生中断,从而决定何时送数据。
该方案简单易行,可以保证数据时单程传输的,还避免了重影。
方案二:
使用定时器与外部中断。
当我们在摆动手臂的时候,短时间内摆动位置和左右幅度不会有太大变化,利用我们手臂的这个运动规律,只要能得到棒从一侧摆动到另外一侧的时间,然后把这个时间分成N份,在每一份的时间里显示不同的花样就能实现图形的显示。
设计中摇动的摆子与左右两个触点接触各一次的时间可以通过外部中断和定时器计算出来,然后用单片机的另外一个定时器T1,其定时时间为T0的N分之一,每次中断依次显示一列,就可以得到预期显示的图案了。
该法可以控制摇动频率低的时候不显示的图案。
但是程序的稳定性不高,图案之间的间隔不易确定。
本次任务要求显示的字符、图案长度较短,使用方案一中的外部中断方法只要控制好延时就可以达到完整显示图案的目的,而且方案一中只使用外部中断,它所占用的内存比方案二少。
所以选用方案一。
3.1总体设计
经过前面的分析,我们确定了最终的方案,流程图如下:
图2:
LED显示棒系统原理图
整套系统以AT89S52单片机为核心控制系统,使用16只LED灯作为显示输出,前八只与P0.0~P0.7口连接,前提是P0.0~P0.7口必须接10K的上拉电阻,后八只直接与P2.0~P2.7口相连,当水银开关触发中断T0时,单片机向16只LED传数据,根据人体的视觉暂留原理,随着显示棒的摆动前进,输出数据的列也不会立刻消失而是随着摆动逐渐显示在了形成扇形区域。
(整体电路图见附录6.2)
3.2单元电路设计
任务中LED显示棒数据输出原理与LED点阵屏相似,可以把LED显示棒看成是LED点阵屏中的一列。
为了使显示图案清晰,我们使用了16个LED管,将它们排成一列,整个屏静止的时候就相当于16行×
1列。
数据传输时我们同样使用行送数据、列扫描。
在摆动过程中,应用视觉暂留原理,我们点亮的列不会很快消失,而是随着摆动的方向继续前移,只要移动的速度高于视觉暂留的最短时间显示内容就不会熄灭,至此,一幅图案也就可以这样被“摆动“出来。
LED点阵屏原理:
点阵屏的显示分为行扫描与列扫描两种,列扫描是将我们的字模组通过点阵屏的行驱动进行输入,然后通过列对每一行进行扫描,当列为低(高)电平、行为高(低)电平时则表示该点位图案的一部分,将其读出、显示。
它的顺序可以总结为:
行不断的送数据,每送完设置的信息后列进行读取,然后行再次送数据,列再次读取……一次循环下去,一幅完整的图案就显示出来。
3.2.2水银开关模块
棒在摇动时,只能在朝某一方向摇动时显示,否则会出现镜像字
或镜像画面,所以通过接一只水银开关来控制,使摇摇棒从左向右摇动时将内容显示出来。
水银开关里的水银珠很活跃,导致在接通时容易产生抖动,所以将水银开关斜向上放置(尖尖朝斜上方45°
角),靠水银珠自身重力的作用减少抖动。
这样解决了传输时产生的从影,使得画面更加清晰、明了。
3.2.3单片机最小系统模块
因为本次设计是一个显示棒,是拿在手上的,所以设计的结果要小巧、轻便。
则需要将单片机的系统简单化。
它的最小系统包括晶体振荡电路、复位开关和电源部分,图3就是AT89S52单片机的最小系统。
图3;
AT89S52单片机最小系统
4软件设计
4.1软件设计思路
在摇动LED棒的时候单片机必须单程传输数据,否则就会出现从影,影响视觉效果。
因此当系统工作后通过水银开关的接通与否来实现是单片机单程传输数据给LED。
如果水银开关接通,则进入外部中断T0并将一变量置1。
在变量为1期间让单片机以一定的频率将数据传输给LED。
如果水银开关没有接通,则进入外部中断T0并将变量置0,在这期间单片机不会给LED传输数据。
在传输数据时,数据送完后应延时一点时间,这样在扇形的区域内显示的字符不会太
“拥堵”,影响效果。
之后再立刻熄灭LED并开始重新判断水银开关的状态。
3.2软件设计流程图(如图4)
图4:
软件流程图
4.3动态图片的实现
设计实现单个图形或者一个词组的显示方法是将要显示的内容一次性送出,延时一段时间后再进行第二次传送数据。
5系统测试
5.1基本要求部分的测试
能够清新的显示并能辨认出“电子”汉字、“Wlecome”字符,可以通过按键进行内容的切换。
能都能够清新的显示并能辨认出国际奥委会五环图形,以及在电机旋动过程中可以清晰的显示“电信学院”,而且还可以显示时期。
6.1参考文献
[1].杨清德、康娅编著·
《LED及其工程应用》—北京:
人民邮电出版社,2007.12
[2].阎石主编、清华大学电子学教研组编·
《数字电子技术基础》—5版·
北京:
高等教育出版社,2005
[3].谭浩强著·
《C语言程序设计》—三版·
清华大学出版社,2005
[4].谢维成、杨加国主编·
《单片机原理与应用及C51程序设计》—北京:
清华大学出版社,2006
[5].http:
//cn.ic-on-.电子技术资料中文网站
6.2元器件统计表
名称
规格
大小
数量
单片机
AT89S52
1片
水银开关
LED
高亮白色发绿色光
Ø
3mm
16只
晶振
11.0592MHZ
1个
电阻
10K
11个
电容
30P×
2、10uf×
1
3个
注:
万能电路板一块,按键开关1个,导线锡丝若干。
6.3整体电路图
6.4程序清单
#include<
AT89X52.h>
#defineucharunsignedchar
#defineuintunsignedint//宏定义
#defineKEYP3_0//定义画面切换按键
ucharKY;
//KY作用在后面说明
ucharpic=0,num=0;
//pic为按键次数;
num为中断次数
ucharcodedianzi[64]={
0x00,0x00,0xF8,0x07,0x48,0x02,0x48,0x02,
0x48,0x02,0x48,0x02,0xFF,0x3F,0x48,0x42,
0x48,0x42,0x48,0x42,0x48,0x42,0xFC,0x47,
0x08,0x40,0x00,0x70,0x00,0x00,0x00,0x00,//电
0x80,0x00,0x80,0x00,0x82,0x00,0x82,0x00,
0x82,0x00,0x82,0x40,0x82,0x80,0xE2,0x7F,
0xA2,0x00,0x92,0x00,0x8A,0x00,0x86,0x00,
0x80,0x00,0xC0,0x00,0x80,0x00,0x00,0x00,//子
};
ucharcodezifu[224]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFC,0x03,0xFC,0x0F,0x00,0x0E,0x80,0x03,
0x00,0x0E,0xFC,0x0F,0xFC,0x03,0x00,0x00,
0x04,0x08,0xFC,0x0F,0xFC,0x0F,0x44,0x08,
0xE4,0x08,0x0C,0x0C,0x1C,0x0E,0x00,0x00,
0x04,0x08,0xFC,0x0F,0xFC,0x0F,0x04,0x08,
0x00,0x08,0x00,0x0C,0x00,0x0E,0x00,0x00,
0xF0,0x03,0xF8,0x07,0x0C,0x0C,0x04,0x08,
0x04,0x08,0x0C,0x0C,0x18,0x06,0x00,0x00,
0x0C,0x0C,0xF8,0x07,0xF0,0x03,0x00,0x00,
0xFC,0x0F,0xFC,0x0F,0x38,0x00,0x70,0x00,
0x38,0x00,0xFC,0x0F,0xFC,0x0F,0x00,0x00,
0xE4,0x08,0x0C,0x0C,0x1C,0x0E,0x00,0x00,
ucharcodewuhuan[]={
0xF8,0x00,0xFC,0x01,0x06,0x03,0x03,0x06,
0x03,0x06,0x03,0x06,0x03,0x06,0x03,0x1E,
0x03,0x3F,0x86,0x61,0xFC,0xC0,0x78,0xC0,
0x60,0xC0,0x60,0xC0,0x78,0xC0,0xFC,0xC0,
0x86,0x61,0x03,0x3F,0x03,0x1E,0x03,0x0C,
0x03,0x0C,0x03,0x1E,0x03,0x3F,0x86,0x61,
0xFC,0xC0,0x78,0xC0,0x60,0xC0,0x60,0xC0,
0x78,0xC0,0xFC,0xC0,0x86,0x61,0x03,0x3F,
0x03,0x1E,0x03,0x06,0x03,0x06,0x03,0x06,
0x03,0x06,0x06,0x03,0xFC,0x01,0xF8,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
voiddisplay1(void);
voiddisplay2(void);
voiddisplay3(void);
voidDelayUs(uintN)
{uintx;
for(x=0;
x<
=N;
x++);
}
voidintersvr0(void)interrupt0using1
{KY=~KY;
//每个摇动来回水银开关会在摆幅两端分别产生下降沿中断,只提取其中一次(从左向右摇才显示)
if(KY==0)
{num++;
//计算中断次数
switch(pic)//选择画面
{case0:
{display1();
}break;
case1:
{display2();
case2:
{display3();
default:
}
voiddisplay1(void)
{uchari;
DelayUs(4000);
for(i=0;
i<
64;
i++)
{P0=~dianzi[i*2];
P2=~dianzi[i*2+1];
DelayUs(120);
voiddisplay2(void)
224;
{P0=~zifu[i*2];
P2=~zifu[i*2+1];
voiddisplay3(void)
DelayUs(5000);
122;
{P0=~wuhuan[i*2];
P2=~wuhuan[i*2+1];
}
voidmain(void)
{IT0=1;
EX0=1;
EA=1;
//开中断,下降沿中断
KY=0;
while
(1)//主程序中只检测按键
{if(KEY==0)//画面切换键按下
{DelayUs(10000);
//按键去抖
if(KEY==0);
pic++;
if(pic>
2)pic=0;
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)