PLC怎么控制8*8LED点阵显示?

PLC怎么控制8*8LED点阵显示?,第1张

为什么要用plc呢?用plc不加外围器件直接来控制88点阵效果肯定不好,可以说是根本就不行,因为88点阵的控制类似于8位数码管循环扫描,用plc的触点输出,速度慢了看不出完整的图来,速度快触点又受不了(继电器输出的肯定不行,触点是有寿命的,晶体管的不清楚)再有PLC的输出方式又决定了它不可能刷新的很快。如果非要用plc控制,下面就是:
点阵的控制类似于循环扫描法点亮数码管,单片机如何控制,plc就用一样的方式,控制点阵单片机不加外围器件要用2组输出口(因为点阵有16跟线啊)。首先要找到点阵16个脚作用,哪些是控制行的,哪些是控制列的,并分清方向(二极管单向导通)然后把控制行的接在一组开关量输出上(8点),控制列的接在一组开关量输出上(8点),点阵每一个点(一个发光二极管)的电路是:1、电源正2、经过一组输出触点中的一个3、进点阵某管脚(看极性)经过发光二极管从某管脚出来4、再连另一组触点中一个5、到电源负。说白了PLC输出点就是2组开关而已。一般plc的触点都有一端连成一个公共点(如西门子的L1~Ln,三菱貌似是COM),行和列的公共点分别接电源的正和负就行了。只不过要注意点阵的供电,别直接用PLC的电源,注意加限流电阻(呵呵,一般不会范这个错误的)。
感觉还是用其他器件如单片机或专用芯片控制点阵,plc只是给它提供要显示的数据比较好。
啰嗦了点,不知你能不能明白。可以在网上找plc控制数码管的相关资料对比,相通的。

单片机的led点阵广告牌主要技术指标刷新率如下。工作原理
系统与上位机的通信由AT91M42800A的USART0口与485接口电路完成,上位机仅需将要显示的数据,传送至AT91M42800A即可。开机后,AT91M42800A初始化,读入启动代码后,将保存在Flash存储器内的程序代码和所要显示的字模数据,重映射到SDRAM中,使得系统的数据存取全部在高速SDRAM中完成。在接收到上位机的数据后,AT91M42800A将要显示的数据,转换成相对应的LED屏显示驱动信号,再加入相应的动态显示效果控制程序(画面左移、上移、开幕、覆盖、闪烁和直显等)后,用SPI口分别输出给行、列驱动电路。同时,若有需要,上位机所传来的数据或图像画面,也可以保存在Flash存储器中。
显示屏采用1/16动态逐次行扫描方式,先将SPIA端口中的24个字节数据依此串行移入对应的24个A6276列驱动电路,并锁存。接着,SPIB端口再将一行行选通信号串行移入行驱动电路,完成一行的LED显示。然后依理,逐次的显示LED屏的各行。
二极管亮灭时间的占空比可用软件进行设定,以选取合适亮度,提高发光二极管的使用寿命。在现场实际安装的LED显示屏,有效显示面积约为46 m2,共有288×384=110 592个像素,满帧刷新时间最短可小于8 ms,换帧频率125 Hz以上,比传统的用单片机组成的显示系统提高了10倍以上的帧频,保证了动态显示时的视觉效果。同时,在相同的条件下,还可以使得实际可视像素点增多。
软件部分简述
本系统的软件采用μC/OSII *** 作系统,使得系统具有强大的多任务管理、定时器管理、中断管理、存储管理等功能,通过对相关寄存器的实时监控,可以大大提高系统的稳定性,这些是以往用单片机和部分DSP处理器所无法实现的。
显示应用程序采用定时器中断方法,通过设置合适的进入中断时间常数,即可以得到高于40 Hz的LED刷新帧频,使人眼得到稳定的动态视觉效果。
画面的实时动态处理,即各种动态显示方式均以子程序形式编写,每种显示方式都是独立的子程序。具体的动态显示方式有:画面左、右移,上、下移,拉幕,覆盖,闪烁,直显等多种方式。
系统优点
① 使用高性能32位RISC架构的ARM微处理器,硬件上克服了传统8/16位单片机在处理能力、系统架构、寻址范围和外围接口能力上的不足;软件上使用实时多任务 *** 作系统,使系统的管理功能强大,可进行实时监控,实现复杂的程序控制,程序的开发和扩展也很方便。和以往单片机组成的类似系统相比,本系统的软件稳定性和可靠性都得到了很大提高。
② 该系统省去了传统做法中LED显示部分的总线驱动和译码电路,不像其他一些单片机系统,为提高显示速度而采用多处理器,使用双端口RAM,或是采用将LED屏分为多块的方案。系统使用AT91M42800A的SPI接口直接实现LED显示逻辑驱动,不仅电路简单,并且简化了软件的相关编程,节省了MCU的GPIO硬件资源。
查看更多

#include <reg52h>

#define uchar unsigned char

#define uint unsigned int

#define outdat P2

sbit ld=P3^0;

sbit lw=P3^1;

//数码管显示代码

unsigned char code tab[]={

0x01,0x02,0x03,0x04,0xFF,0xFF,0xFF,0xFF};

void delay1ms(unsigned int count)  //延时1ms

{

unsigned char j;

for(;count>0;count--)

for(j=0;j<120;j++);

}

void display(unsigned char num)

{

outdat=tab[num];

ld=0;ld=1;ld=0;

outdat=0x01<<num;

lw=0;lw=1;lw=0;

delay1ms(2);

}

void main()

{

unsigned char i;

while(1)

{

for(i=0;i<8;i++)

{

display(i);

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13212597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-21
下一篇 2023-06-21

发表评论

登录后才能评论

评论列表(0条)

保存