LED图文显示系统报告_第1页
LED图文显示系统报告_第2页
LED图文显示系统报告_第3页
LED图文显示系统报告_第4页
LED图文显示系统报告_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2014沈航电子设计大赛 参赛题目 LED图文显示系统 指导教师xxx 参加对员 xxxxxxxxxxxxxxxxxx参赛院系 电子信息工程学院 摘 要LED旋转显示器时基于视觉暂留原理,开发的一种旋转式LED显示屏。本设计基于STC89C52RC单片机,通过直流电机带动旋转,在具有一定转速地载体上安装16个LED发光器件,各LED发光管等间距排位一条直线,随着旋转速度的加快,不断扫描出预设的文字,图案等。使用一个霍尔传感器作为定位传感器,当旋转一周时,挡光板遮挡光源,光敏三极管的集电极输出高电平,当离开挡光板时,集电极再次输出低电平,从而给单片机一个下降沿的跳变信号,产生一个中断,从而更新显

2、示。针对传统LED显示屏视角单一、体积较大、需要的发光二极管数目较多等特点,利用电机带动LED显示阵列高速旋转实现环形显示,达到360全视角,在相同显示信息量上降低产品体积,减少对发光二极管的使用,设计一个可以经常方便变换内容、能够携带方便、信息容量大、价格低廉、结构简单的信息播放系统,即旋转LED显示屏。实际制作的LED旋转显示屏技术参数的测试结果,以及实际的运行效果表明,本文设计和制作的旋转显示屏基本符合设计的基本要求,具有一定的创新性与实际应用价值。设计关键词:STC89C52RC单片机,视觉暂留,直流电机,旋转,霍尔传感器。一、 任务要求1.基本要求(1) 制作一个由16只 LED构成

3、的线状点阵及其控制电路,安装于可旋转的平台上,在平台的中心设置一个按键,用于功能的切换,电机带动平台以合适速度旋转。(2) 开机时装置完成显示自检,能对点阵中16只LED逐个点亮,每只LED显示时间约为1秒,此时平台不旋转。(3) 通过按键切换,实现16个同心圆图形顺序(由大到小)和逆序(由小到大)显示。每个同心圆图形均显示时间为1秒左右。(4) LED显示亮度能依据环境亮度变换自动调节。2. 发挥部分(1)通过按键切换,显示字符“IT”,要求字符显示稳定,无明显漂移。(2)通过按键切换,显示字符“电”,要求字符显示稳定,无明显漂移。(3)通过按键切换,显示一个指针式秒表,该秒表以标志杆为起始

4、标志,秒针随时间动态旋转,旋转一周的时长为601秒。(4)其他。二、总体方案设计1系统分析本设计要求进行旋转LED显示屏的研究和设计。系统以STC89C52RC系列单片机作为核心控制器件,通过控制电机保持一定的速度稳定旋转,带动单排LED旋转,形成扫描显示屏;单片机根据LED旋转的速度,控制LED发光或熄灭,在视觉上形成平面图形点阵的显示效果。2方案论证系统供电方案选择方案一:采用电刷供电。即在电机的转抽上,手工增加一个电刷,通过电刷为系统供电。此方法能让系统长期供电,但是由于增加了电刷,电机的摩擦增大,势必会使系统的功耗增加。故不采用此方法。方案二:我们采用固定电池供电。即在电路板是直接附带

5、一组干电池,为系统供电。采用电池供电,使用时,将电池固定在电路板上适当的位置,既解决旋转时因重力引起的重心不稳,同时也省去制作的时间。驱动电机模块方案一:采用步进电机。步进电机能够准确的定向,但是图像或者文字的分辨率受到步进电机的步进角度的限制。并且步进电机以及控制电路成本较高,并且需要单片机控制,占用CPU的资源。方案二:采用普通的直流电机。此方案,使用方便,成本较低,通过简单的改装,可以给系统供电。综合各方面考虑,为了节省成本,简单系统电路,以及更方便的为系统供电,使系统能够长期工作,我们采用了直流电机。3.方案设计本文的设计是以STC89C52RC为核心,利用霍尔传感器以及LED显示阵列

6、搭建的点阵式旋转LED屏系统。该系统主要由电机,控制电路,LED显示阵列三部分组成。电机的作用就是带动电路部分进行旋转,这个部分的关键就在于电机的转速要均匀,这样才能保证图像在水平方向不会被局部伸展或者压缩。为了使LED转速保持稳定,我们采用使用匀速的直流电机。LED整列是旋转屏的显示主体,为LED显示控制电路的作用是将存储在芯片内图像或符号,在旋转位置感应信号的同步下,根据旋转的位置按列扫描显示在LED阵列上。这部分是整个系统的核心。4系统总体方框图5V电源15V电源 直流电机LED显示单片机STC89C52R霍尔传感器 图1系统方框图二、 理论分析与计算1. 线性点阵LED驱动参数分析与计

7、算通常LED正向导通的电压为1.7V左右。故其I=(VCC-2)/R20,根据LED的驱动电流,一般为2mA到30mA。选其高亮的LED,采用电流为3mA,取阻值为1K的电阻来限流即R20=1K。2. 线性LED运动参数分析与计算根据本子的长度,从而指导圆弧的宽度。根据周期以及霍尔传感器反馈的信息就可以算出LED运动的参数。3. 显示亮度调节采用串联型稳压电源类似的电路,IN4148的正向电压作为基准电源。VOUT=1.4*(R1+RG)/RG,当光敏电阻RG的阻值从0.5K到22K变化时,R1取10K,则VOUT从2.1V到近似VCC变化。四、电路与程序设计1系统硬件设计1.1 重心调节重心

8、调节是最困难的一个技术环节。旋转的重心直接关系到系统的稳定的运行,以及安全性问题。旋转的重心如果不在转轴上的话,在高速的旋转中,会产生剧烈的抖动,在巨大的离心力下,会使整个系统分解,产生安全隐患。所以,重心调节是必须解决的问题。下面介绍重心调节的方法。首先是电路板的外观设置。根据物理质心计算方法,可知道,均匀的圆盘的重心就在圆盘的中心。但是,由于电子器件的封装,重量都是不同的,圆盘电路板的重心是不均匀分布的,比较难调节,故不采用这种方法。根据杠杆原理,当支点两端的物体的质量与力距乘积相等时,杠杆就处于平衡。因此我采用了长条方型的电路板结构。2.1硬件设计总设计原理图 开始2软件设计流水灯逐个点

9、亮间隔1秒功能按键3是否按下 N 同心圆大小顺、逆序显示Y 按键4是否被按下N显示”电”图像YN按键5是否被按下Y显示”IT”图像按键6是否被按下N 时钟显示Y程序结束源程序#include /器件配置文件#include #define uchar unsigned char #define uint unsigned int uint i;unsigned int Time;unsigned char T;float a;uint n,m,b; uchar num;/*/sbit K1=P00;sbit K2=P01;sbit K3=P02;sbit K4=P03;sbit K5=P04;

10、sbit K6=P05;sbit KEY=P06;/*/#define PCF8591 0x90 /PCF8591 地址 /float V; bit write=0; /写24c02的标志 sbit SCL=P31; /串行时钟输入端 sbit SDA=P30; /串行数据输入端 /*/*/uchar code zimo2100=0xFF,0x07,0xB7,0xB7,0x00,0xB7,0xB7,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; /电外uchar code zimo1100=0xFF,0xFC,0xFD,0xFD,0xE0,0xED,

11、0xED,0xEC,0xEF,0xEF,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,; /电内uchar code zimo3100=0xFF,0xEF,0xE0,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF; /字母 I 外uchar code zimo4100=0xFF,0xF7,0x07,0xF7,0xFF,0xFF,0xFF,0xF7,0xF7,0xF7,0x07,0xF7,0xF7,0xF7,0xFF,0xFF; /字母 I 内uchar code zimo5100=0xFF,0xFF

12、,0xEF,0xEE,0xED,0xE0,0xEF,0xE0,0xED,0xEE,0xEF,0xFF,0xFD,0xFE,0xF7,0xF7,0xE0,0xFF,0xFF,0xFE,0xFD,0xFF,0xFF,0xEF,0xEF,0xE0,0xEF,0xEF,0xFF,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF

13、,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; /字母 显示 ITuchar code zimo6100=0xFF,0xFF,0x7F,0xC1,0xD5,0x15,0xD5,0x15,0xD5,0xC1,0x7F,0xFF,0xF7,0xF7,0x75,0xF5,0x05,0xF5,0x75,0xF7,0xF7,0xFF,0xFF,0xFF,0xFD,0x01,0xFD,0xFF,0xFF,0xFF,0xFD,0xFD,0x01,0xFD,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF

14、,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; /字母 显示 ITuchar code zimo7100=0xFF,0xFF,0xEF,0xEE,0xED,0xE0,0xEF,0xE0,0xED,0xEE,0xEF,0xFF,0xFD,0xFE,0xF7,0xF7,0xE0,0xFF,0xFF,0xFE,0xFD,0xFF,0xFF,0xE0,0xFF,0xFC,0xFD,0xFD,0xFC,0xF7

15、,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFD,0xFD,0xFD,0xFD,0xFC,0xFF,0xFE,0xFF,0xFF,0xFF,0xE0,0xEF,0xE6,0xEB,0xEC,0xEB,0xE6,0xEF,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; /字母 显示同心圆 内uchar code zimo8100=0xFF,0xFF,0xFF,0xC1,0xD5,0x15,0xD5,0x15,0xD5,0xC1,0xFF,0xFF,0xF7,0x

16、F7,0x75,0xF5,0x05,0xF5,0x75,0xF7,0xF7,0xFF,0xFF,0x01,0xFD,0x2D,0xAD,0xAD,0x2D,0xFD,0x01,0xFF,0xFF,0x3F,0xCF,0xFF,0xDF,0x3F,0xFF,0x9F,0x3F,0x7F,0xDF,0x3F,0x7F,0xDF,0x3F,0xFF,0xFF,0xFF,0x01,0xFD,0x45,0x55,0x55,0x55,0x45,0xFD,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; /字母 显示同心圆 外uchar

17、 code zimo9100=0xFF,0xFF,0xEF,0xEE,0xED,0xE0,0xEF,0xE0,0xED,0xEE,0xEF,0xFF,0xFD,0xFE,0xF7,0xF7,0xE0,0xFF,0xFF,0xFE,0xFD,0xFF,0xFF,0xE0,0xFF,0xFC,0xFD,0xFD,0xFC,0xF7,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFD,0xFD,0xFD,0xFD,0xFC,0xFF,0xFE,0xFF,0xFF,0xFF,0xE0,0xEF,0xE6,0xEB,0xEC,0xEB,0xE6,

18、0xEF,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; /字母 显示同心圆 内uchar code zimo10100=0xFF,0xFF,0xFF,0xC1,0xD5,0x15,0xD5,0x15,0xD5,0xC1,0xFF,0xFF,0xF7,0xF7,0x75,0xF5,0x05,0xF5,0x75,0xF7,0xF7,0xFF,0xFF,0x01,0xFD,0x2D,0xAD,0xAD,0x2D,0xFD,0x01,0xFF,0xFF,0x3F,0xCF,0xFF,0xDF,0x3F,0xFF,0x9F,0x

19、3F,0x7F,0xDF,0x3F,0x7F,0xDF,0x3F,0xFF,0xFF,0xFF,0x01,0xFD,0x45,0x55,0x55,0x55,0x45,0xFD,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; /字母 显示同心圆 外/* 函数名 : TimerConfiguration()* 函数功能 : 配置定时器值* 输入 : 无* 输出 : 无*/ /*/*/AD-DAvoid delay() /延时4-5个微秒 ; void delay_1ms(uint z) uint x,y; for(x=z;x

20、0;x-) for(y=110;y0;y-) ; void Delay10ms(unsigned int c) /误差 0us unsigned char a,b; for(;c0;c-) for(b=38;b0;b-) for(a=130;a0;a-); void delay01(uchar i) uchar j; for(;i0;i-) for(j=10;j0;j-) _nop_(); _nop_();void start()/开始信号 SDA=1; delay(); SCL=1; delay(); SDA=0; delay(); void stop() /停止信号 SDA=0; dela

21、y(); SCL=1; delay(); SDA=1; delay(); void respons()/应答 相当于一个智能的延时函数 uchar i; SCL=1; delay(); while(SDA=1)&(i250) i+; SCL=0; delay(); void init() /初始化 SDA=1; delay(); SCL=1; delay(); uchar read_byte() uchar i,k; SCL=0; delay(); SDA=1; delay(); for(i=0;i8;i+) SCL=1; delay(); k=(k1)|SDA;/先左移一位,再在最低位接受当

22、前位 SCL=0; delay(); return k; void write_byte(uchar date) /写一字节数据 uchar i,temp; temp=date; for(i=0;i8;i+) temp=temp0;x-) for(y=4;y0;y-); /*/void LED01()/由小到大 P2=0xfe;P1=0xff;Delay10ms(100); P2=0xfd;P1=0xff;Delay10ms(100); P2=0xfb;P1=0xff;Delay10ms(100); P2=0xf7;P1=0xff;Delay10ms(100); P2=0xef;P1=0xff

23、;Delay10ms(100); P2=0xdf;P1=0xff;Delay10ms(100); P2=0xbf;P1=0xff;Delay10ms(100); P2=0x7f;P1=0xff;Delay10ms(100); P2=0xff;P1=0xfe;Delay10ms(100); P2=0xff;P1=0xfd;Delay10ms(100); P2=0xff;P1=0xfb;Delay10ms(100); P2=0xff;P1=0xf7;Delay10ms(100); P2=0xff;P1=0xef;Delay10ms(100); P2=0xff;P1=0xdf;Delay10ms(1

24、00); P2=0xff;P1=0xbf;Delay10ms(100); P2=0xff;P1=0x7f;Delay10ms(100);void LED02()/由大到小 P2=0xff;P1=0x7f;Delay10ms(100); P2=0xff;P1=0xbf;Delay10ms(100); P2=0xff;P1=0xdf;Delay10ms(100); P2=0xff;P1=0xef;Delay10ms(100); P2=0xff;P1=0xf7;Delay10ms(100); P2=0xff;P1=0xfb;Delay10ms(100); P2=0xff;P1=0xfd;Delay1

25、0ms(100); P2=0xff;P1=0xfe;Delay10ms(100); P2=0x7f;P1=0xff;Delay10ms(100); P2=0xbf;P1=0xff;Delay10ms(100); P2=0xdf;P1=0xff;Delay10ms(100); P2=0xef;P1=0xff;Delay10ms(100); P2=0xf7;P1=0xff;Delay10ms(100); P2=0xfb;P1=0xff;Delay10ms(100); P2=0xfd;P1=0xff;Delay10ms(100); P2=0xfe;P1=0xff;Delay10ms(100); P2

26、=0xff;P1=0xff;Delay10ms(100);void zijianchengxu()/自检程序 P2=0xff;P1=0xff;Delay10ms(100); LED02(); P2=0xff;P1=0xff;Delay10ms(10);/*/void DelayUs2x(unsigned int t) while(-t);void Delay(unsigned int n) while(n-) DelayUs2x(9); void delay10us(uint c) /误差 -0.1us unsigned char a,b; for(;c0;c-)for(b=1;b0;b-)

27、for(a=1;a0;a-); void Timer0() interrupt 1 TH0 = 0xff; /设置初始值 TL0 = 0xa3;Time+;void Timer1() interrupt 3 TH1 = (65536-45872)/256; /设置初始值 TL1 = (65536-45872)%256;T+; if(T=20) n+;T=0; if(n=60) n=0;m=0; /*/*/void main( void ) Time=0;m=0;n=0;b=0; TimerConfiguration(); while(1) if(!K1)/光敏 delay_1ms(50); i

28、f(!K1)/确定该键已被按下 while(1) init(); num=read_add(0x42); if(num0) PWM1(); else PWM3(); if(!K2)/自检 delay_1ms(50); if(!K2)/确定该键已被按下 while(1) zijianchengxu();/自检 P1=0xff;P2=0xff; Delay10ms(1000);break; if(!K3)/同心圆 delay_1ms(50); if(!K3)/确定该键已被按下 uchar v;v=0; while(1) while(!KEY) v+; for(i=0;i=150) Delay10m

29、s(100); LED01();P2=0xff;P1=0x7f;Delay10ms(100); LED02(); P2=0xff;P1=0xff;Delay10ms(1000); if(!K4)/电 delay_1ms(50); if(!K4)/确定该键已被按下 uchar v;v=0; while(1) while(!KEY) for(i=0;i16;i+) P2=zimo2i;P1=zimo1i;delay002(30); if(!K5)/IT delay_1ms(50); if(!K5)/确定该键已被按下 while(1) while(!KEY) for(i=0;i16;i+) P1=z

30、imo3i;P2=zimo4i;delay002(24); if(!K6)/时钟 delay_1ms(50);if(!K6)/确定该键已被按下 while(1) P1=0x00;P2=0x00; Delay10ms(500) ; P1=0xff;P2=0xff; Delay10ms(300) ; while(1) while(!KEY) TR0=0;TR1=1;/定时器0关中断 a=Time/60; Time=0; TR0=1;/定时器0 1 开中断 m=a*n; Delay(m); P1=0x00;P2=0x00; P1=0x00;P2=0x00; P1=0x00;P2=0x00; P1=0x00;P2=0x00; P1=0x00;P2=0x00; P1=0x00;P2=0x00; P1=0x00;P2=0x00; P1=0x00;P2=0x00; P1=0x00;P2=0x00; P1=0x00;P2=0x00; P1=0x00;P2=0x00; P1=0x00;P2=0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论