历史上的今天
今天是:2024年12月06日(星期五)
2019年12月06日 | 51单片机旋转led(POV-LED)显示系统设计报告与代码
2019-12-06 来源:51hei
摘要
随着社会的发展,科技也得到进步。相对的,人们对人文的需要也越来越重视。我们从科技服务于人文的角度出发,设计出本POV-LED显示系统。该系统使用STC89C52RC作为主要控制单元,采用的是POV -LED(POV即persistence of vision视觉停留)技术,借助人眼的视觉暂留效果,通过旋转LED灯的方式来显示各种图像。原理是通过电动机带动上层的LED灯绕电机为中心轴高速旋转,同时单片机采集传感器反馈的信息,控制各个LED灯在旋转平面对应的位置上点亮,构成一幅点阵画,由于人的视觉暂留效果,会认为LED是同时点亮的,从而显示图像。
一、系统设计方案
1.1、总体方案
本设计采用双电源供电的方式,一部分供给下层的点击,另一部分供给上层的单片机。旋转线阵LED显示屏在高速旋转时,使用通过软件延时使之在相应的时刻亮灭,人的视觉暂留现象,从而形成完整连续的图像。因此对于显示方面可以采用单片机依据其晶振频率控制延时来实现。采用霍尔传感器采集数据并检测标志杆,标志杆作为现实的起点,从而得到稳定的显示画面。由独立按键开关的切换程序功能,从而显示不同的画面。
系统框图如下:
1.2系统组成
电源部分: 供电部分主要由两排4节5号电池通过电池盒固定连接组成,能在较长时间内稳定输出5v的直流电压供电机及单片机使用。
单片机部分:单片机部分采用STC89C52RC系列单片机芯片,该系列芯片造价低廉,工作稳定。
旋转显示部分:旋转显示部分主要由16颗贴片式led发光二极管组成。
传感器部分:传感器部分采用霍尔传感器。
系统设计
2.1主控板的选择
由于考虑到不宜太高,那么对系统处理信息的速度要求也就不会太高。综合成本考虑,我们选择采用方案二。
2.2 供电方式选择
LED旋转采用电机旋转的方式,以下是两种电机方案的对比:
通过对以上方案尽心比较以上两种方案,为了得到更稳定的效果,我们选取方案二。
2.3 驱动电机选择
表1.1 电机性能对比
综合考虑,采用减速直流电机作为LED旋转电机。
2.4传电方案的选择
该装置的难点之一在于供电底座与需要用电的旋转发光部分的电气连接,装置要求能给旋转发光部分提供稳定的直流电压的同时阻力较小不影响电机带动其转动。
1电刷连接
优点:成本相对较低,能提供稳定电压,同时电刷工作时旋转有一定的美观性,阻力较大。
缺点:会有轻微的噪声,稳定性较差,易损毁,接触电阻较大,电压损耗较大,制作工艺要求高。
2划环
优点:能提供稳定电压,接触电阻极其小,电压损耗较小,占用体积较小,阻力较小。
缺点:元件价格高。
3无线供电
优点:能提供稳定电压,阻力较小。
缺点:电路元件数量较多,占用体积较大
综合考虑我们采用无线供电方式。
2.5旋转显示部分的选择
贴片式Led发光二极管
优点:体积较小,重量较轻。
缺点:亮度稍暗,不适用于室外强光环境。
直插式led发光二极管
优点:亮度较高,显示效果好。
缺点:占用体积较大,重量较大。
综合考虑我们采用贴片式Led发光二极管。
3、电路与程序设计
3.1无线供电
单片机系统和LED灯都分布在电机上,被电机带东旋转,如果直接用电线必然会被绞在一起然后断掉,有团队考虑了两种方案:1.电刷供电;2.无线供电。在尝试第一种电刷时,由于电机转动会产生微微振动,使得电刷不够稳定导致单片机芯片一直处于重置状态。所以采用了无线供电,电路图如下:

原直流电电源供电经过高频振荡电路产生振荡电流传到传送模块—感应线圈。用感应线圈把电能传到电机上的电路,传上了的电是交流电,经过整流桥和电容整流滤波后,产生一个稳定的直流电压给单片机供电。
3.2起始位置校准
电机转速的稳定性直接决定了显示是否有重影和浮影。然而,要其完全不变是不可能的。在这种情况下,误差会积累而形成浮影。
所以,对起始位置的不断矫正是理由非步进电机制作旋转LED显示屏必不可少的技术。通过霍尔传感器检测置于固定位置的小磁铁来不断定位起始位置消除积累误差。本装置中当霍尔原件到固定小磁铁位置,就会反向导通产生低电平而触发外部中断。指针板每旋转一周,就会产生这样一个中断信号,这个信号被称为“过零信号”。
外部中断的任务是将旋转角度清零,以此消除积累误差。

3.3功能切换
通过当按住按键时,让STC89C51芯片IO口检测到低电位,然后通过程序设计来实现功能切换;
3.4最小系统与LED线阵

一个条状电路板上集成了16个贴片型发光LED—线阵LED。集成有LED的电路板绕其一端随电动机转动。由STC89C51芯片IO口控制,当转动到合适的角度时,对应的IO口输出高电平点亮合适的LED就可以显示需要显示的内容。
4 软件设计
4.1 软件平台
简介:Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。[3]工作界面如图4.4.1。

![]()
另一款用到的软件是PCtoL2002,可以有效减少程序开发周期。工作界面如图4.4.2
![]()

4.2程序流程设计
该POV-LED通过实时检测各个模块传感器的输出电平,利用红外对管检测黑线实现寻迹,通过火焰传感器实现报警和灭火,从而实现比赛的基本要求。其程序流程图如图4.4所示。

5 结束语
项目设计以STC89C52RC单片机为核心,采用了霍尔传感器,工作灵敏。该机器人可以实现了如下能:
实时检测按键,切换功能。
稳定显示图像。
6附录
单片机源程序如下:
#include #include #define uint unsigned int #define uchar unsigned char //Led P1,P2 sbit key=P3^3;//霍尔开关 sbit key_1=P3^4;//功能开关 voidtongxinyuan(); voidhanzi(); int s; s=0; uchar code table[]={ 0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x20,0x80,0x10,0x80,0x10,0x80,0x08,0x80,0x08, 0x80,0x0C,0x80,0x04,0x90,0x06,0x90,0x02,0x88,0x03,0xC8,0x01,0xD8,0xF9,0xF8,0xFF, 0xF4,0x7F,0x54,0x02,0x46,0x02,0x46,0x02,0x42,0x02,0x40,0x04,0x00,0x04,0x00,0x04, 0x00,0x04,0x40,0x04,0x40,0x04,0xC8,0x02,0x90,0x02,0x90,0x02,0x10,0x02,0x00,0x02, 0x01,0x02,0x03,0x02,0xFF,0xFF,0xFE,0xFF,0xFE,0x3F,0x00,0x02,0x00,0x02,0x00,0x02, 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"科",0*/ 0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x18,0x00,0x18,0x40,0x18,0x40,0x08, 0x40,0x08,0x40,0x44,0x40,0x84,0x40,0x84,0x40,0x86,0x43,0xE2,0xFF,0xFF,0xFE,0xFF, 0x22,0x01,0x20,0x01,0x20,0x00,0x20,0x80,0x00,0x80,0x00,0x80,0x00,0x86,0x20,0x86, 0x20,0x46,0x20,0x46,0x20,0x4A,0x20,0x4A,0x21,0x71,0xF3,0x31,0xFE,0x31,0x3E,0x31, 0x36,0x39,0x12,0x7F,0x10,0x6F,0x10,0x47,0x10,0xC1,0x10,0xC1,0x10,0xC0,0x10,0x80, 0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,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,/*"技",1*/ 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20, 0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x18,0x00,0x08,0x00,0x0C,0x00,0x06,0x00,0x06, 0x00,0x03,0x80,0x01,0xC0,0x01,0xE0,0x00,0x70,0x00,0x7C,0x00,0xBC,0x00,0x1C,0x01, 0x0C,0x01,0x04,0x03,0x00,0x02,0x00,0x06,0x00,0x04,0x00,0x0C,0x00,0x0C,0x00,0x18, 0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60, 0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"人",2*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x40,0x21,0x40,0x21,0x40,0x21, 0x20,0x22,0x20,0x32,0x22,0x16,0x22,0x1C,0x22,0x1C,0x26,0x0E,0xE6,0x0F,0xE6,0x1F, 0xE4,0x11,0xE0,0x30,0x10,0x30,0x10,0x20,0x10,0x60,0x10,0x60,0x10,0x40,0x10,0xC0, 0x10,0xC0,0x10,0xC0,0x10,0xC0,0x10,0xC0,0x10,0xC0,0x00,0x80,0x00,0x80,0x00,0x80, 0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,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,/*"文",3*/ }; voiddelayms(uint z) { uinti,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } /*****n(us)延时子程序*****/ voidDelayUs(uint N) { uint x; for(x=0; x<=N;x++); } /*****键盘扫描*****/ intkeyscan() { if(key_1==0) { delayms(10); if(key_1==0) { while(!key_1); if(++s==3)s=0; } } return s; } //****************同心圆****************** voidtongxinyuan() { int k; P1=0x01; for(k=0;k<8;k++) { delayms(500); P1=_crol_(P1,1); } P1=0x00; P2=0x01; for(k=0;k<8;k++) { delayms(500); P2=_crol_(P2,1); } P2=0x00; while(key_1); } //****************汉字****************** voidhanzi() { inti; if(key==0) { for(i=0;i<512;i++) { P1=table[i]; P2=table[++i]; DelayUs(10); } P1=0x00; P2=0x00; } } //****************主函数******************/ ……………………
史海拾趣
|
屏蔽就是对两个空间区域之间进行金属的隔离,以控制电场、磁场和电磁波由一个区域对另一个区域的感应和辐射。具体讲,就是用屏蔽体将元部件、电路、组合件、电缆或整个系统的干扰源包围起来,防止干扰电磁场向外扩散;用屏蔽体将接收电路、设备或系 ...… 查看全部问答> |
|
安静的生活不需再起什么波澜,即将进入四十岁不再进入研发黄金时间段,想把自己做过的想过的都留下来,没有什么名利场的事情了,说出来格外轻松。面对目前大部分国内杂志近乎清一色的嵌入系统,单片机和软件的文章,硬件电路尤其是模拟电路设计似乎 ...… 查看全部问答> |
|
有没有谁做嵌入式开发的,大虾给俺指导一下?谁有WIN CE的模拟器? 我现在准备开发WIN CE5.0应用程序,现在按照网上指导的方法VS2005不能与目标机相联(目标机是WIN CE5.0系统),从开发机上拷的那5个文件不能在目标机器上运行,执行后报如下错误提示: \'ConmanClient2\'is not a valid Windows CE application ...… 查看全部问答> |
|
猎头职位:赴美国工程师!月薪五万,咨询13381085719 13381085771刘先生 猎头职位:赴美国工程师!月薪五万,咨询13381085719 13381085771刘先生… 查看全部问答> |
|
最近在折腾LINUX 的GPIO中断。用驱程实现了的情形是:1 在驱程里,借用copy_to_user函数,在中断发生时,让一个数值发生变化写回用户态,使得应用程序可以读出这个变化。问题是:这样看起来,好像跟查询没什么区别。以前玩51的时候,情况不是这样的 ...… 查看全部问答> |
|
本帖最后由 nwx8899 于 2014-8-17 13:22 编辑 利用易电源软件工具设计的一个DSP的一个供电系统,,输入电压是直流14-22V,输出3.3V给DSP供电,电源选择3安输出,选择环境温度27摄氏度。轻轻输入几个数据然后点击开始设计了。 不是,还要等待一会 ...… 查看全部问答> |
|
上篇文章中我们已经能够通过u-boot启动内核了,但是没有能够启动成功,从内核的log中可以看出,内核启动失败的原因是没有挂载到root文件系统,本文将使用busybox制作根文件系统并打包成ramdisk供u-boot启动内核使用。(1)制作根文件系统使用busybo ...… 查看全部问答> |




