LED显示棒的设计.docx
- 文档编号:6518079
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:27
- 大小:742.31KB
LED显示棒的设计.docx
《LED显示棒的设计.docx》由会员分享,可在线阅读,更多相关《LED显示棒的设计.docx(27页珍藏版)》请在冰豆网上搜索。
LED显示棒的设计
LED显示棒
摘要:
本设计以AT89S52单片机为控制核心,由行扫描控制、列信号控制,功能按键,数字电子钟,LED显示、电源等功能模块组成,根据人眼睛的视觉暂留效应,采用线阵LED运动成像原理制作而成。
本系统主要通过软件控制来实现硬件功能,大部分功能都是由软件控制来实现,使电路简单,系统稳定性提高。
本系统不仅实现了题目的基本要求,发挥部分要求也全部实现,并创新地增加了数字电子钟、动态显示图像和节电功能。
关键词:
AT89S52LED显示运动成像
1引言
LED显示棒是基于人眼睛的视觉暂留效应,运用最新的线阵LED运动成像原理制作而成。
当显示棒摆动到不同位置的时候,让位于一条直线上的LED显示二维图像的不同的列,实现图形扫描显示。
它可以通过在轻轻摇动棒体,就可在摇摆出的扇形轨迹面上显示非常稳定清晰的文字或图案以及显示简单的动画。
本设计要求制作一个靠摇动能够显示特定字符、图形的显示棒。
通过单片机对呈线状排列的LED灯输送数据,通过控制LED棒的摇动实现字符、图形地显示。
设计的基本要求是:
设计一个基于LED的显示棒,LED灯必须线状排列,至少使用16只;摇动时形成的亮灯扇形区域能够让人分辨出“A”字符、“电”字;国际奥委会五环图形;用按键实现显示切换,用电池供电。
发挥部分的要求是:
摇动时形成的亮灯扇形区域能够让人分辨出英文单词“Welcome”、汉字词组“美亚”、北京奥运会会徽图形以及其它特色与创新。
本设计特色与创新在于增加了数字电子钟、节电及动态显示图像功能。
2系统设计与论证
2.1系统总体设计思路
通过对题目的充分理解,将系统分为以下几个部分进行设计:
中央控制器、数字电子钟、电源部分、控制部分、功能按键切换部分、显示部分。
根据分析系统设计框图如图2-1所示:
图2-1系统设计框图
列信号控制的作用是用来监测LED显示棒的动作和位置,通过判断显示棒的动作状态和位置,输出对应数据;行扫描控制的作用主要是控制显示棒以合适的频率往复运动,动态显示字符和图形;通过行控制和列控制的相互协调,配合按键的切换,LED能够显示控制器内部存储的字符、图形数据和数字电子钟的时间。
2.2方案论证
2.2.1显示模块
显示部分是本次设计最核心的部分,对于LED显示有以下两种可行方案:
方案一:
单色LED显示。
单色LED显示控制简单易行,显示的色彩单一,视觉感受较彩色的差,但人眼睛在相对稳定的环境中对单一色彩的变化较敏感。
方案二:
红黄蓝三色LED显示。
此种方案较上一方案,控制较复杂,理论分析该方案显示的色彩绚丽,尤其在显示图形的时候视觉效果比较好,但实际制作后发现摆动时三种颜色容易相互干扰,反而使图形显示的不够清晰。
通过比较,基于人眼睛对单一色彩变化敏感的优点,本设计采用方案一。
LED显示模块根据赛题的要求至少使用16只LED,在实际制作过程中我们发现,如果只用16个LED能够实现显示赛题的基本要求显示“A”、“电”、“美亚”但在显示国际奥委会五环图形时,图形看起来不够清晰,北京奥运会会徽图形显示相对更模糊,经过测试比较,最后确定采用32个LED显示,不但能够清晰地显示出基本要求部分的内容,而且发挥部分功能也能完全实现。
2.2.2数字电子钟
数字电子钟是本设计的创新部分,可有两种方案选择。
方案一:
本方案完全用软件实现数字时钟。
原理为:
在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息,利用定时器与软件结合实现电子钟功能。
当单片机不上电,程序将不执行,且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
方案二:
本方案采用专用时钟芯片DS1302。
它可以对年、月、日、时、分、秒进行精确计时,采用三线接口与CPU进行同步通信,。
DS1302主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。
因此采用时钟芯片完全可以满足本设计的数字时钟的设计要求。
基于DS1302时钟芯片的掉电保护、对时分秒的自动精确计时,当显示棒停止摆动后,芯片仍能够自动计时,采用此方案还可以节省单片机的内部资源,因此本设计采用方案二完成数字电子钟的功能。
2.2.3控制部分
1.列信号控制
列信号控制开关是本设计的关键部分,它的作用是用来监测LED显示棒的动作和位置。
由显示棒的动作状态和位置,启动相应外部中断,输出与之对应的数据。
中断控制开关有以下两种设计方案可选。
方案一:
采用光遮断器。
光遮断器为红外线发射二极管与接受组合而成的元件,当有物体通过IR-PT之间,由于红外线被阻拦,集极电流变小,因此可根据此集极电流的变化而检知有物体通过。
在棒上装一个可以摆动的用来遮挡光遮断器光线的细杆,粗细比光遮断器的狭缝稍宽,每左右摆动一次这个杆就会通过一次光遮断器,使单片机产生一次中断。
方案二:
机械惯性开关。
原理图如图2-2所示,引脚A接低电平,引脚B和引脚C分别接单片机的外部中断0和外部中断1,活动触杆左右摆动时和金属柱B或金属柱C接触,产生中断信号,进入相应中断。
活动触杆是在固定的道轨上做往复运动,利用固定的轨道约束活动触杆的摆动范围;此种方法用机械开关替代了光电器件,降低了材料成本而且制作方便。
图2-2机械惯性开关原理图
鉴于方案二制作成本低,控制方便的优点,采用方案二完成此中断开关的设计。
2.行扫描频率的控制
方案一:
采用电动机控制。
摇棒的动力部分采用驱动直流电机正反转的方式。
采用这种方式可以节省人控制的时间和精力,但由于系统必须采用电池供电,如果采用这种方式系统供电不能够维持较长时间而且采用电动机控制加大了显示棒的体积和重量不利于随身携带。
方案二:
手动控制。
这种控制方式不但可以节约采用电动机驱动方式浪费的电能而且节约了器件降低了制作成本,大大减小了显示棒的体积和重量,携带非常方便。
经综合考虑,方案二具有更适合实际的制作,节约制作成本,减小显示棒的重量和体积,携带方便等优点,因此采用方案二。
经上述论证,最终确定系统方案如图2-3所示。
图2-3系统原理图
LED显示部分,在实际制作时采用红色LED,可以使眼睛的色觉反应更加敏感,显示的效果清晰明亮。
控制开关也是本设计的一个特色。
触杆的制作使用半个整流二极管,由于触杆的左、右触点金属柱硬度有限,在摇动过程中可能弯曲变形,必须仔细观察,如果发现异常立即校正。
连接原理图时,我们采用一个单刀双掷开关,模拟了机械开关。
3.2软件设计
通过单片机软件设计,实现如下图结构。
系统首先初始化,通过按键扫描,确定返回的按键值,确定是否输出显示信号,显示一组图像。
当没有检测到按键按下时,系统重新初始化,有按键按下时,每按一次显示一组图形,直至检测没有键按下时,返回。
图3-2系统软件流程图
4系统测试
测试项目
完成情况
显示效果
基本要求
设计一个基于LED的显示棒,LED灯必须线状排列,至少使用16只。
完成,并扩展为32
只
实际制作的32个红色LED
摇动时形成的亮灯扇形区域能够让人分辨出“A”字符
完成
摇动时形成的亮灯扇形区域能够让人分辨出“电”字
完成
摇动时形成的亮灯扇形区域能够让人分辨出国际奥委会五环图形
完成
用按键实现显示切换,用电池供电
完成
通过按键可以切换不同的显示内容
发挥部分
摇动时形成的亮灯扇形区域能够让人分辨出英文单词“Welcome”
完成
摇动时形成的亮灯扇形区域能够让人分辨出汉字词组“美亚”
完成
摇动时形成的亮灯扇形区域能够让人分辨出北京奥运会会徽图形。
完成
创新部分
数字电子钟
完成
省电功能
完成
停止摇动显示棒,LED停止发光
显示动态图片
完成
动态显示小人跳舞
5设计总结
本设计完成了题目基本要求部分和发挥部分的全部功能指标,并增加了创新部部分。
本设计的创新部分是:
数字电子钟,通过按键切换实现时间的显示;省电功能,显示棒停止摆动时,LED灯立即熄灭,进入省电模式;能够显示动态图片。
本系统经测试运行效果良好。
在这里,感谢安徽省大学生电子设计竞赛组委会和协办单位给我们这样一次珍贵的锻炼机会,在这次设计大赛中,我们完成了大赛题目要求的所有内容,同时也启迪了我们的创新意识和团队合作意识,培养了我们分析问题、解决问题的能力,加深了对所学理论的实际运用。
我们热爱电子设计,希望在电子设计的海洋里继续遨游,追求它给予我们的无限激情。
这次比赛,我们经过四天三夜的拼搏,受益匪浅,终生难忘。
我们不仅完成了一件作品,而且大大提高了我们的创新精神,动手能力,团队协作和竞争意识,这些在今后的人生道路上将是一笔宝贵的财富。
这次比赛对于我们的毅力和意志力是一个重要的考验。
我们在调试的过程中遇到了不少问题,这时,我们就认真细心地检查电路的每个部分,测量电路的参数,单步运行程序段,直至找到问题的根源。
在这次比赛中,我们充分发挥团队合作精神。
我们分工协作,每人负责完自己的部分,大大提高了工作效率。
当调试过程中出现问题时,又聚在一起讨论,及时发现错误所在,使得工作进展顺利,我们更深刻地体会到团队精神的重要性。
我们在比赛中做到精益求精,在完成基本功能之后,又向发挥部分进发,最后完成了所有的基本功能和发挥部分功能,并加入了自己的创新元素。
参考文献
1.赵建领著51系列单片机开发宝典.北京:
电子工业出版社,2007年。
2.余锡存曹国华著单片机原理与接口技术.西安:
西安电子科技大学出版社,2003年。
3.田良黄正谨著综合电子设计与实践.南京:
东南大学出版社,2003年。
4.赵亮侯国锐著单片机C语言编程与实例.北京:
人民邮电出版社,2004年。
5.黄智伟王彦著全国大学生电子设计竞赛训练教程.北京:
电子工业出版社,2005年。
6.何立民万光毅著单片机实验与实践教程.北京:
北京航天航空大学出版社,2003年。
附录
附录一:
正文中所有单元模块电路图如下:
图3-1系统硬件整体电路图
附录二:
部分实际图片
1.奥运五环
2.Welcome
3.美亚
4.时间显示
附录三:
程序清单:
//----------------main.c-------------------
#include
#include
//unsignedlongtime,out_time;
unsignedinti=0,j=0;
unsignedintk1=0,out=1,out1=1;
unsignedintcode_start=0,code_end=32,delay_time=50;
uchar*table=table1,cat_code=0,cat_s=0;//A
//----------------------------------------------------------
voidt0(void)interrupt0//外部0,下降延
{
out=1;
out1=1;
i=0;
}
//----------------------------------------------------------
voidt1(void)interrupt2//外部1,下降延
{
P0=0xff;P1=0xff;P2=0xff;send8bit(0xff);
out=0;
}
//--------------------------------------------------------------
voidmain(void)
{
TCON=0x05;//打开外部中断T0
EX0=1;//启动外部中断0
EX1=1;//启动外部中断0
EA=1;//定时器和中断的总控制端,高电平有效
DS1302_Inital();
while
(1)
{
Key();P0=0xff;P2=0xff;P1=0xff;send8bit(0xff);
if(out)
{
if(out1){out1=0;delay(200);}
if(k1<=4||k1==11)//显示16高度字体
{
P0=~table[i++];P2=~table[i++];//上16
//P1=~table[i++];send8bit(~table[i++]);//下16
delay(delay_time);
if(i==code_end){i=code_start;delay(100);}//for(j=2;j<=3;j++)hang(0xff,j);out=0;}//中间两行
}
elseif(k1==5){//显示32高度中国印
P0=table[i++];P2=table[i++];//上16
P1=table[i++];send8bit(table[i++]);//下16
delay(delay_time);
if(i==code_end){i=code_start;delay(100);}//for(j=1;j<=4;j++)hang(0xff,j);out=0;}
}
elseif(k1>5&&k1<9){//显示32高度字体
P0=~table[i++];P2=~table[i++];//上16
P1=~table[i++];send8bit(~table[i++]);//下16
delay(delay_time);
if(i==code_end){i=code_start;delay(100);}//for(j=1;j<=4;j++)hang(0xff,j);out=0;}
}
/*elseif(k1==4)
{
P0=~table[i++];P2=~table[i++];//上16
P1=~table[i+32];send8bit(~table[i+33]);//下16美亚竖写
delay(delay_time);
if(i==code_end){i=code_start;delay(100);}//for(j=1;j<=4;j++)hang(0xff,j);out=0;}
}*/
elseif(k1==9){display_time_date();}//显示时间日期
elseif(k1==10){cat();cat_s++;if(cat_s==6)cat_s=0;}
}
}
P0=0xff;P2=0xff;P1=0xff;send8bit(0xff);
}
//*****************************************************************
voidsend8bit(unsignedintn)//机内码发送子程序
{
unsignedcharq;
for(q=0;q<8;q++)
{
clock=0;
shuju=(bit)(n&0x80);
clock=1;//寄存器时钟上跳沿,将一位数据存入移位寄存器。
n<<=1;
}
}
//----------------function.c-------------------
#include
#include
//*****************************************************************
voiddelay(unsignedlongt)
{
while(t--);
}
//*****************************************************************
voidcat(void)
{
unsignedinttemp,j;
cat_code=cat_s*128;
temp=(cat_s+1)*128;
while(cat_code { P0=~txt7[cat_code++];P2=~txt7[cat_code++];//上16 P1=~txt7[cat_code++];send8bit(cat_code++);//上16 if(out==0)break; } P0=0xff;P1=0xff;P2=0xff;send8bit(0xff); out=0; } //***************************************************************** voidKey() { if(k1==11)k1=0; if(key1==0) { delay(100); if(key1==0)k1++; while(key1==0); switch(k1) { //--------------------------16*16---------------------------------------------- case11: table=table1;code_start=0;code_end=32;delay_time=50;break;//A case1: table=table1+32;code_start=0;code_end=32;delay_time=50;break;//电 case2: table=table2;code_start=0;code_end=64;delay_time=30;break;//五环 case3: table=table3;code_start=0;code_end=128;delay_time=20;break;//Welcome case4: table=table4;code_start=0;code_end=64;delay_time=30;break;//美亚40 //--------------------------32*32/64------------------------------------------- case5: table=txt6;code_start=0;code_end=72;delay_time=50;break;//中国印 case6: table=txt2;code_start=0;code_end=128;delay_time=30;break;//电 case7: table=txt3;code_start=0;code_end=192;delay_time=20;break;//五环 case8: table=txt4;code_start=0;code_end=256;delay_time=100;break;//Welcome //case9: table=txt5;code_start=0;code_end=128;delay_time=30;break;//美亚 //case10: table=txt1;code_start=0;code_end=128;delay_time=15;break;//A case9: display_time_date();break; /case10: cat();break; } } } //********************************************************************* voiddisplay_time_date(void) { unsignedintyear,month,date,hour,minute,second, year1,month1,date1,hour1,minute1,second1, year2,month2,date2,hour2,minute2,second2,temp=0,dian1,dian2; hour=DS1302_ReadData(Read_Hour); minute=DS1302_ReadData(Read_Minute); second=DS1302_ReadData(Read_Second); year=DS1302_ReadData(Read_Year); month=DS1302_ReadData(Read_Month); date=DS1302_ReadData(Read_Date); hour1=hour/10; hour2=hour%10; minute1=minute/10; minute2=minute%10; second1=second/10; second2=second%10; year1=year/10; year2=year%10; month1=month/10; month2=month%10; date1=date/10; date2=date%10; hour1*=16;hour2*=16; minute1*=16;minute2*=16; second1*=16;second2*=16; year1*=16;year1*=16; month1*=16;month2*=16; date1*=16;date2*=16; dian1=11*16;dian2=10*16; while (1) {temp++;if(temp==128||out==0)temp=0;break; switch(temp/8) { case0: P0=~table5[hour1++];P2=~table5[hour1++]; P1=~table5[year1++];send8bit(~table5[year1++]); break; case1: P0=~table5[hour2++];P2=~table5[hour2++]; P1=~table5[year2++];send8bit(~table5[year2++]); break; case2: P0=~table5[dian2++];P2=~table5[dian2++]; P1=~table5[dian1++];send8bit(~table5[dian1++]); break; case3: P0=~table5[minute1++];P2=~table5[minute1++]; P1=~table5[month1++];send8bit(~table5[month1++]); break; case4: P0=~table5[minute2++
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LED 显示 设计