打印

旋转LED的灯老是处在来那个的状态是怎么回事?

[复制链接]
3747|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rohoboam|  楼主 | 2010-4-3 15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
tyw| | 2010-4-3 17:52 | 只看该作者
本帖最后由 tyw 于 2010-4-3 18:32 编辑

旋转位置与led点亮必需同步才能停住


http://www.haoer.net/post/189.html



旋转LED显示屏取模软件

[ 作者:刘定发 |  时间:2010-01-16  来源:www.untree.net]

这是我参加安利杯计算机作品赛的银奖作品--旋转LED显示屏取模软件
结合硬件,能够得到相当好的效果
图片查看http://www.untree.net/text.php?id=69
如果有需要使用或者定做的的朋友,可以联系我,请见我们网站的联系方式
另外本人也可以定做各做LED显示屏取模软件

旋转LED显示屏取模软件
概述:
旋转LED显示屏取模软件是一种对旋转LED显示屏取模的图形图像工具软件,软件对于旋转

LED的制作起到至关重要的作用。该软件能够对bmp位图文件或文字的数据进行提取、处理
,进而生成能够被单片机直接读取的显示数据
一、 软件需求
1、 图片处理
 打开的指定路径.bmp格式的位图文件,对于过大的图片,做自动的切割处理;
 重复打开以最近一次打开的图片为输出;
 在不需要图片时候,清除图片。

2、 文字处理
 为输出图像的任意位置添加任意文字,并且可以设置字体,颜色;
 删除不需要的文字。

3、 扫描设置
 自定义扫描图片的指定圆形区域;
 自定义扫描圆形区域的半径大小,以像素为单位。

4、 数据处理
 设置显示的扫描方式,具体包括:单个半径而言有从内到外和从外到内两种方式

;对于一周扫描而言,有顺时针和逆时针两种方式;
 设置灰度图片到单色图片转换的灰度阀值,范围是0-255;
 对灰度图片或者单色图片提供数据反相功能;
 导出灰度图片数据到.txt文本文件;
 导出单色图片数据.txt文本文件;
 发送灰度图片数据到串口/USB(选);
 发送单色图片数据到串口/USB(选)。

5、 界面
 操作界面简洁明快、易上手、低误操作;
 提供图片的三种预览方式,包括原始图片、灰度图片、单色图片;
 提供方便的旋转LED显示屏的扫描预览。

二、 软件功能设计
软件使用微软的VC++6.0作为开发环境,使用MFC的DialogBase作为程序框架
1、 图片处理
 对于每次打开图片,对话框保存一个图片文件的文件位置,重新打开则修改该图

片地址,
 删除图片即是将图片文件位置设置为空。

2、 文字处理
 对话框保存一个由字符串信息的构成的链表,字符串信息包括字符串内容,字符

串显示位置,字体信息,字体颜色。每添加一个字符串,构造一个静态字符串信息对象,
并添加至链表中;
 删除字符串则是将链表中的指定结点删除。

3、 扫描设置
 对话框保存圆心坐标,扫描显示的半径;
 通过设置圆心的坐标来确定扫描的圆形范围,设置方式有鼠标右键点选和直接输

入数据设置。
4、 扫描
 首先输出未处理的原始图片和文字:检查图片路径字符串是否为空,如果不为空

,显示出图片,如果图片大小超过显示区域,就从左上角截取,隐藏多余的部分;遍历字
符串列表,根据字符串信息,输出每个字符串;
 接着遍历扫描圆形上的所有像素,为了提高程序的运行效率,这里需要避免对每

一个角度上的所有像素求三角函数,取而代之是用加减法:
假设半径相对0度的角度是θ,则该半径上相邻两个像素之间的之间的距离的X方向偏移量

dx=cosθ、Y方向偏移量dy=sinθ。这样只需要从原点累加X和Y偏移量或者从半径切点累减
偏移量,就可以很高效的遍历圆形区域的所有点。
根据设置的圆心,半径,确定一个圆的范围,确定以圆形的0度作为起点,整个圆形为360

度,则每次扫描角度的分量dθ=360/周长=360/(半径*2*圆周率);
 对于半径不同的扫描方式(外->内/内->外),对于外->内的半径扫描方式,采取从

半径切线递减(dx,dy);对于内->外的半径扫描方式,采取从圆心递加(dx,dy)的扫描方式;
对于不同的圆周扫描方式(顺时针逆时针),采取角度的分量dθ递加(逆时针)或者递减
(逆时针)的扫描方式;
 根据屏幕上的显示效果,结合扫描方式,对选定的圆形区域的所有像素进行遍历

并提取出颜色,这里使用CDC类的GetPixel函数直接获取屏幕上输出点颜色信息;取得指定
点的颜色值之后,分离出R、G、B值,通过公式:
灰度gray=0.299*R+0.587*G+0.114*B
计算出灰度数据,最后将灰度数据以数组的形式存放在对话框中。

5、 亮度校正
 由于旋转LED显示屏的机械结构,其亮度从圆心到边缘总是呈现像素亮度不均匀的

现象——越靠近中心点的像素越亮;因此需要在软件上采取算法,控制不同位置像素的亮
度。靠近中心像素,其亮度高的原因是对同一个像素点进行了多次扫描,这样就会导致中
心像素在单个扫描周期之内的点亮时间比例比外围像素要高,所以,在算法上,需要去掉
重复读取,保证一个像素只被扫描一次,也只点亮一次。程序记录之前扫描的点的坐标,
紧接着的扫描就不需要在对已经扫描的像素进行扫描,并以255(熄灭发光二极管)填充该
像素,使发光二极管熄灭;
6、 数据处理
 灰度图片转单色图片,设置一个阀值(0-255),对于大于该阀值的灰度点置1,否

则置0;  
 灰度图片到单色图片转换的灰度阀值作为一个成员变量,保存在对话框中,并关

联编辑框;
 数据反相直接使用C++的位操作符号取反;
 灰度图片数据的导出:用户输入导出文件位置和文件名,对图片重新进行一次扫

描并生成灰度数据,再将灰度数据写入文本文件,导出数据格式按照每个半径一行,每个
像素作为一个字节(8位深度)以十六进制方式显示,数据格式例子(五个像
素):0xff,0xff,0xff,0xff,0xff,0xff,……;
 单色图片数据的导出:用户输入导出文件位置和文件名,对图片重新进行一次扫

描并生成灰度数据,将灰度数据转换成单色图片的数据,并且将单色数据压缩(每个字节存
放8个像素的信息),再将压缩后的单色图片数据写入文本文件,导出数据格式按半径一行
,每8个像素作为一个字节,并以十六进制显示,数据格式例(40个像素):”
0xff,0xff,0xff,0xff,0xff,”。
7、图片预览
 在对话框上设置两个矩形区域,左下角矩形区域:大小400*260,用于显示原始位

图和标识出选择的圆形区域;右下角矩形区域:大小400*260,用于仿真出硬件显示效果。
8、 界面
 直接使用VC++6.0的MFC对话框的程序向导,按照控件功能分类,合理放置控件、

合理命名控件ID。

三、运行效果
经过不断开发和改进,该旋转LED取模软件能够满足需求,并且具有比较好的可用
性和稳定性。运行结果如下图

这是工作室成员刘定发参加泛珠三角安利杯大学生计算机作品赛的银奖作品--旋转LED显示屏取模软件 结合硬件,能够得到相当好的效果
如果有需要使用或者定做的的朋友,可以联系我,请见我们网站的联系方式
另外本人也可以定做各做LED显示屏取模软件
硬件效果如下所示


运行效果图片:


竞赛过程中


获奖留影:

使用特权

评论回复
板凳
rohoboam|  楼主 | 2010-4-4 07:46 | 只看该作者
谢谢!

使用特权

评论回复
地板
zhang139| | 2010-4-4 08:07 | 只看该作者
好羡慕你们!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

10

帖子

1

粉丝