基于89C51单片机的旋转显示屏设计与实现.doc_第1页
基于89C51单片机的旋转显示屏设计与实现.doc_第2页
基于89C51单片机的旋转显示屏设计与实现.doc_第3页
基于89C51单片机的旋转显示屏设计与实现.doc_第4页
基于89C51单片机的旋转显示屏设计与实现.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

基于89c51单片机的旋转显示屏设计与实现摘 要:本设计利用高速旋转中控制led的亮灭,进行字符或图形的显示,控制器采用廉价的89c51单片机,完成显示内容的传输、字库的转换、显示等功能。显示的内容给人一种漂浮的感觉,并且是360全方位的显示,可以用于很多的场合,比如广告牌、家庭装饰、记分牌、娱乐显示等。关键词:单片机,led显示器,旋转显示我院本次针对四川省大学生电子竞赛的选拔赛题目是设计一种电子显示屏,我们通过思考,决定设计一个以旋转方式进行显示的新的显示屏,在参赛的同时提高自己的电路设计和单片机开发能力。一、设计思路旋转显示屏是通过一个旋转的支架,支架上排列的led受单片机控制在特定的位置亮或灭,从而显示出特定的字符或图形。本作品主要是根据人的视觉暂留原理设计的。人眼的视觉暂留时间是0.02s,如果采用3000转/s的高速电动机,带动led高速旋转时,从视觉效果上就会产生一种柱状的led显示屏的状态。显示的字符或图形看起来是漂浮在空中的,不仅美观,而且新颖。1、总体设计思路本显示屏应由机械旋转部分、显示电路、通信电路等几部分构成。由于显示屏在高速旋转的情况下不便于接线进行显示内容的更改,所以设计中我们选用了红外通信模式传输数据。总体构成如下图所示: 图1 总体构成图2、结构设计思路显示屏的主体为两个可旋转的矩形框架。我们在框架的两边都安装上发光二极管,由电动机通过中心轴带动框架进行高速旋转,框架上的两列发光二极管因高速旋转产生柱状显示屏。其中一列发光二极管作为显示过程中的背景光灯使用。主体框架如下图所示:图2 框架设计图二、硬件组成1总体构成经过分析、比较,我们最终确定了以89c51作为控制器。由于89c51芯片的片内存储器容量有限,我们另外扩展了一块存储器芯片29c040作为字库存储器,储存一个完整的汉字库,为显示屏提供显示内容。为了解决计算机向旋转体中的单片机传送数据的问题,我们采用了红外传输的方式:计算机先通过rs232接口将数据传送到一个89c2051单片机,将数据用38khz调制后利用红外设备传输。此外,在显示屏高速旋转时,显示内容的稳定与否取决于转动的相位与led发光时间的配合精度,所以还需要一个校准器件来判断显示屏的转动是否到达准确位置并根据结果做出校正处理,本设计中选用了霍尔元件进行相位检查并完成校正功能,使led发光与旋转保持同步。图3 硬件构成图2部分单元电路的设计在硬件电路中,对几个关键电路我们采用的设计是:(1)显示电路图4 显示电路图发光二极管的亮度决定了显示屏的视觉效果,我们采用2803芯片为发光二极管提供驱动,驱动电流达35ma(为保证发光二极管在该电流下能正常工作,我们对发光二极管进行了抽样测试,在45ma下工作十个小时,没有损坏)。另外,由于89c51是8位数据处理器,我们可显示的最大数据位数可为16位,在设计时使用两片74hc573对接的方法提供两级数据锁存、缓冲,实现对端口的扩展能力。2、字库电路图5 字库电路图我们为89c51扩展了一片512 kb容量的存储器芯片29c040,能够满足普通使用要求。3、红外发送、接收电路从计算机串口接收数据,可以在显示屏工作的状态下直截通过电脑进行显示内容的改变。实现该功能的是红外发送和接收电路。红外发送电路有双重功能:一是从计算机串口接收数据,二是将接收的信号调制成红外传输信号。计算机的数据可以通过串口调试软件直接发出,发出的数据每包为固定的20个ascii字符或10个汉字,采用低速发送以提高红外传输的准确度。为了在显示屏高速旋转工作的状态下能准确无误地接收到红外数据,我们,在与显示主板相联的旋转中轴上端打一个通孔,在通孔上安装红外接收模块,让红外模块接收到的数据直截送给显示主板上的控制器。在红外接收模块的正上方上固定安装的一个与红外发射头相联的发射板。发射板是以at89c2051为控制核心。所有从电脑串口传送过来的数据都是通过它转变成带有38k载波的红外数据格式送给红外发射头供发射使用。具体电路如下:图6 红外发送电路电路中,t1完成从rs232到单片机串口的电平转换。t2是红外发光管的驱动管。图7 红外接收端电路图该红外接收端位于转轴顶部,自带38khz解码功能,电路设计简单、使用方便。at89c2051中的程序如下:org0jmpstartorg0bhjmpt0_intstart:clrp3.5movtmod,#2movth0,#243;红外发射38k参数设置movtl0,#243setbeasetbet0wait:clrp1.0;信号指示灯jbp1.7,wait;p1.7串口信号输入setbp3.5setbtr0setbp1.0jnbp1.7,$clrp3.5clrtr0movth0,#243movtl0,#243jmpwaitt0_int:cplp3.5;载波38k输出retiend4、相位检测电路图8 相位检测电路图图中con 3为霍尔元件,当显示屏旋转到磁铁所在位置时,输出低电平脉冲至89c51,作为位置基准信号。三、控制程序 显示内容的接收、转换、同步、显示都在控制器的控制之下。根据数据的处理过程,我们编写了相应的控制软件。1、控制程序流程图图9 控制程序流程图2、控制程序说明(1)当程序开始运行的时候,首先就是要对程序进行初始化,主要作用就是让程序按照我们所设计的初始值去运行。初始化之后,由红外接收器判断是否有数据送入,如果有数据送入就通过红外接收器进行接收,然后将该数据转换为点阵,再存入显示缓冲区,再根据霍尔元件检测到的同步信号,对数据进行校对,如果有数据输入的话那就将数据计数器进行清零。执行完成后返回到初始化操作之后重复以上的操作。(2)如果红外接收器没有检测到数据输入,则直接检查霍尔元件是否有同步信号,有则就返回初始化操作,无就直接读取片外存储器提取字库,然后进行显示。对送数据计数器进行加1指令。随后返回到初始化操作之后进行循环扫描。四、设计制作过程中问题的解决1、结构问题我们认为,整机的机械结构是决定作品成败的关键。经过试验,结构强度对稳定性影响很大,因此采用角钢支架,以钢板为底,同时对转盘进行平衡调节,基本解决了转动的稳定性问题。防振采取了以下措施:(1) 在各种元器件的摆放位置上都做到平衡放置的要求;(2) 将电源、变压器设为一体以便加大主体的重量,从而抑制振动;(3) 采用钢质材料,从而加固各级子部件之间的联接,来减小振动;(4) 关键传动部位,严格要求加工精度,从根本上消除振动。3、噪声问题由于我们的框架是纯手工制作,所以它的精度并不是很高,在高速旋转的情况下难免会有一定的声音,于是我们采取了一系列的方法来减少噪音,比如让中间的主旋转框架在旋转的过程中尽量保持平衡,不致因哪一方过重从而导致噪音过大,在齿轮和轴承上添加润滑油以减小噪音的产生,在主框架外加上玻璃罩以隔离噪音。4、供电问题由于我们的电路板是随主框架一起高速旋转的,所以不可能使用导线进行供电,因为这样会把导线缠上,所以我们就另外想了两种方案。(1) 在中心轴的周围装上4个电刷,由电源通过电刷对高速旋转中的主电路板进行供电。采用电刷供电的优点是结构简单、成本低。但有电火花干扰的顾虑。(2) 在中心轴上面放一个小型发电机,发电机的定子为磁铁,固定在轴上,线圈为转子,直接连接在电路上,高速旋转时即可产生电流,对主电路进行供电。这种方法可克服由电刷产生的干扰。在制作过程中我们先进行了实验,用单片机做了个循环灯控制器作为主电路,然后用电刷进行供电,结果发现使用碳刷后再使用稳压电路,可保证单片机系统的正常工作,因此我们选择了由电源通过电刷来对主电路板进行供电。5、信号传输问题由于控制单片机是在旋转的支架上,从计算机到单片机的数据传送也成了一个问题。数据的传输不能采用电刷来进行,因此采用了红外传输的方式。为了使红外传输可靠,采用了家电红外遥控的38khz调制方式,使用了带有放大和解调功能的接收模块,很好地解决了这一问题。6、同步问题显示的图像或文字要稳定,同步是关键。要达到同步的目的,同步信号的取得是关键。在设计前,我们考虑了多种方案,如光电式、磁场式等,最后选择了使用霍尔器件的磁场方式,达到很好的效果。五、小结本系统以单片机芯片为核心部件,通过电脑来控制和调节所要显示的内容,通过红外数据传输可实现在显示屏旋转中对显示内容进行更改。在设计过程中,力求硬件线路简单,充分发挥软件在编程方面灵活的特点,来满足系统设计的要求。制作的成品也能完全实现显示所要达到的要求,能够显示出清晰,美丽的图案,但由于时间有限,系统还存在一些误差,存在很多有待改进的地方。在竞赛的过程中,我们遇到了许多突发性的不太好解决的问题,也曾有过对自己没有信心的时候,但经过仔细冷静地思考之后,我们还是以最快的时间调整自我,回归参赛状态,继续进行设计。通过这次比赛,我们深深的体会到了团队间的共同协作的重要性,提高了自己的动手能力和解决问题的能力。c51源程序:#include sbit gate11=p30;sbit gate12=p31;#define unit unsigned int#define uchar unsigned charuchar code gb_16 = 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, 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, 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, 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, 0x00,0x00,0x34,0x40,0xc4,0x38,0x04,0x0f, /欢 0xc4,0x07,0xfc,0x3c,0x3e,0x98,0x24,0x60, 0x18,0x30,0x0e,0x1c,0xef,0x0f,0xca,0x07, 0x48,0x1c,0x38,0x70,0x1c,0xe0,0x08,0x40, 0x00,0x00,0x40,0x40,0x46,0xe0,0xdc,0x3f, /迎 0xe8,0x1f,0x40,0x32,0xfe,0x67,0xfc,0xc3, 0x06,0xc2,0x03,0xc1,0xfd,0xff,0xfc,0xdf, 0x04,0xc2,0xfc,0xc7,0xfe,0xc3,0x04,0x40, 0x00,0x00,0x00,0x80,0x80,0x80,0x82,0x40, /光 0xbc,0x60,0x98,0x38,0x80,0x1f,0xff,0x07, 0xfe,0x00,0x80,0x7f,0xe0,0xff,0xb8,0xc0, 0x9e,0xc0,0xc4,0xc0,0x80,0xf0,0x00,0x40, 0x00,0x00,0xf8,0x0f,0xf0,0x07,0x00,0x00, /临 0xff,0xff,0xfe,0x7f,0x80,0x00,0x60,0xff, 0x38,0x7e,0x1e,0x42,0x3f,0x7e,0x6a,0x7e, 0x68,0x42,0xc8,0xfe,0x4c,0x7f,0x08,0x02, 0x00,0x00,0x04,0x00,0x04,0x00,0x44,0x70, /艺 0x44,0xf8,0x5f,0xcc,0x5f,0xc6,0x44,0xc2, 0x44,0xc1,0xc4,0xc1,0xff,0xc0,0x5f,0xc0, 0x04,0xc0,0x04,0xc0,0x06,0xf8,0x04,0x60, 0x00,0x00,0x44,0x22,0x4c,0x1a,0x7c,0x4e, /新 0xd7,0xff,0xe6,0x7f,0x7c,0x0e,0x5c,0x9a, 0x44,0x60,0xfe,0x3f,0xfc,0x1f,0x46,0x00, 0xc2,0xff,0xc3,0xff,0x62,0x00,0x40,0x00, 0x00,0x00,0x00,0x40,0x04,0x40,0x04,0x40, /工 0x04,0x40,0x04,0x40,0x04,0x40,0xfc,0x7f, 0xfc,0x7f,0x04,0x40,0x04,0x40,0x04,0x40, 0x06,0x40,0x04,0x60,0x00,0x40,0x00,0x00, 0x00,0x00,0x80,0x00,0x60,0x00,0xf8,0xff, /作 0xef,0x7f,0x06,0x00,0x40,0x00,0x30,0x00, 0x1c,0x00,0xff,0xff,0xfa,0xff,0x48,0x04, 0x48,0x04,0x68,0x04,0x4c,0x06,0x08,0x04, 0x00,0x00,0x08,0x00,0x1c,0x80,0x0e,0x81, /室 0x94,0x8b,0xd4,0x89,0x75,0x89,0x37,0xff, 0x16,0xff,0x34,0x89,0xd4,0x89,0x94,0x8b, 0x1c,0x81,0x0e,0xc0,0x04,0x80,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,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,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,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,0x00,0x00;unit disp1,disp2,key1,key2;unit a,w,ii,jj,kk;void delay(unit ms) while(-ms);void display_hz(void) gate11=key1;gate12=key2; for(ii=0;ii5;ii+) for(jj=0;jj16;jj+) p2=gb_16jj*2+ii*32+kk*2;p1=gb_161+jj*2+ii*32+kk*2; delay(120); p1=0xff;p2=0xff; p1=0xff;p2=0xff; void intersvr0(void) interrupt 0key1=!key1;key2=!key2;w=1;if(kk240) kk+; else kk=0;void main(void) ea=1;it0=1;ex0=1; key1=0;key2=1; for(;) w=0; delay(40); if(w=1) display_hz(); 利用人眼的视觉暂留效应,使手在摆动到不同位置的时候,让位于一条直线上的led显示二维图像的不同的列,实现图形扫描显示。 tv)s?.? 1,rr= 物理机制: )wfkl t|2nzfw 当我们在摆动手臂的时候,短时间内摆动位置和左右幅度不会有太大变化,利用我们手臂的这个运动规律,只要能得到棒从一侧摆动到另一侧的时间,然后把这个时间分成n份,然后在每一份的时间里显示不同的花样就能实现图形的显示。当我们在摆动手臂的时候,并不能预先得知此次摆动需要的时间,怎样得到从一侧摆动到另一侧的时间呢?再想想,短时间内我们手臂的摆动频率也不会有特别大的变化,我们只要能得到前一次摆动所用的时间,然后用这个时间近似得到下一次摆动所需要的时间,然后分n份就可以了。得到一次摆动所需的时间的任务由光遮断器完成,在棒上装一个可以摆动的用来遮挡光遮断器光线的细杆,粗细比光遮断器的狭缝稍宽,我用的是整流桥焊后剪下的一段管脚。每左右摆动一次这个杆就会通过一次光遮断器,使单片机产生一次中断,两次中断之间的时间就是想要得到的时间,实现这个功能用掉2051的一个定时器t0和外部中断int0。然后用2051的另一个定时器t1,其定时时间是t0的n分之一,每次中断依次显示一列,就是照片上的效果。 d7w; (t&2xb 再细想一下,手臂摆动的频率大于2hz的时候才大概能由视觉暂留看出图形,再快也不过十几hz,由t0为16位定时器的最长计时时间得到2051的时钟频率1mhz最合适,还有遮挡 .aej8 cg1u5t 单面万用板 8元 可以裁成3块,做3个摇棒 &.h pnnp* 陶瓷谐振器 1元 wx|k 6z 电阻电容导线 2元 ,vxm,une3 外壳* 0.7元 可以裁成2块 kcjmx %yx ):5 可选元件: 4.8t |j$)o,jeql 总成本不超过20元 vs(5 nmrd *外壳我用在家乐福买的半透明文件夹卷成的 httgfo%h (q yk/ 8%sg+sp 此电路电路非常简单,代码短,但是用到了2051的外部中断编程和t0、t1定时器编程,非常适合初学者练习。我制作这个玩具花费了两个晚上的时间。此电路和程序还有扩展改进 h8b)q-js %ldbu_$z 的空间,如在长时间不摆动的情况下可以使单片机进入省电模式,显示不仅限于对称图片等,大家可以试试。 spi1v* 以下是源程序: ably ?qt $i(irwi+n =uduuth /*/ mn p0n #include ,wqyq4#( #define seg 17 /每帧图片分成17列来显示 e;60s;a #define interval 20 /每幅图片在左右摇摆20次后换下一幅 vxevy ?k1 sr typedef unsigned char ucha

温馨提示

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

评论

0/150

提交评论