|
发表于 2015-7-13 18:54:18
|
显示全部楼层
本帖最后由 machao 于 2015-7-13 20:55 编辑
确实,就像马老师你说的选用三极管还是595 这个得从电流方面来考虑,导通16个led 需要48ma的电流 595恐怕承受不起
电阻 = (电源电压 - led压降 - 三极管饱和压降Vce ) / led 电流
大约在 1.3K 的样子
====> OK!通过调节R的大小,也能改变亮度,但要在驱动能力范围内。
2个图的行、列的定义一样吗?,假定图中16*16模块原理图方位与实际实验板的安装方位相同(16*16模块也可以转90度排在板上),那么采用图2好还是图4好?对软件设计有什么影响?
如果仅仅是16*16的点阵 我觉得无所谓
对软件肯定有影响,就是扫描方式不同而已,软件改改就行了
====》不是无所谓,如果效果仅作水平移动,那么最好采用列扫方式,同时取字模时按列取,这样程序设计简单
====》 如果效果仅需要上下移动,那么最好采用行扫方式,取字模按行取,程序设计简单。 那么水平、上下都要移动,哪种方式好?
====》所以采用NPN还是PNP,根据实际需要确定。还要注意PCB布板时模块的方向,转动90度,可能程序就要复杂。
如果我来写这个软件 我会定义个32字节的数组(8位机),这32个字节作为显示缓存,那么显示的内容与这个32个字节一一对应,这样改变显示内容的时候,我只改变这个数组内容即可。
====》ok! 这个方法是正确的,使用显示缓存可以将程序层次化,模块化。此时扫描显示程序可以相对独立,属于底层的驱动程序。上层应用只要将要显示的内容正确填入就可以了
就像你上面分析的,如果每秒25帧,那么刷新一次16行的时间为 40ms,刷新一行的时间为 40/16=2.5ms
单片机定时2.5ms 产生定时中断,在中断程序中,切换显示下一行的内容。这样做起来应该比较容易
====》OK! 刷新频率高些实际效果会更好。但给予CPU的压力更大。所以中断显示服务程序能够越简单越好。这个也与硬件电路有关。如果采用4片595,尽管只占CPU的3个I/O口,但32个BIT串出,如果用I/O口模拟串出时序,那要比使用138甚少慢几十倍。单单一块模块可能还没有问题,但显示只是系统中的一个部件,CPU还要做其它事情,硬件的设计也是需要考虑的。
=============================
machao:
谢谢这位朋友的参与。借他的帖子,做些更多的解释 |
|