LED单屏幕多窗口任意位置显示设计方案

来源:元器件交易网 作者:—— 时间:2012-01-05 10:33

  为了解决上述问题, 可以将区域1 横向扩展成起点坐标为(16,16), 大小为96×47 的区域2。易知, 区域2 在显存中的映射是字对齐的。为了避免运算时的位操作, PC 软件在对区域1 进行点阵信息转换时, 可按区域2 来进行, 只是需将区域1 的扩展部分的数据全填为1。这样处理会牺牲掉一小部分FLASH 存储器空间, 但却可避免特技处理时大量的位运算, 从而大大提高运算效率, 因此这样做是值得的。

  4.3 缓存数据的组织方案:

  由于MCU 只能对显存进行写操作, 而在进行特技运算时,往往需要前一帧信息才能得到下一帧的信息。所以, 首先, 需要在缓存中划分出一块和显存大小相等, 地址一一对应的区域screen 用于保存整屏幕的前一帧信息。

  又由于MCU 对显存只能进行字操作, 并且多个窗口之间可能会出现区域重叠, 所以如果各窗口的特技运算都直接在screen 区域上进行, 则窗口重叠部分信息可能会发生混乱。因此如图5 所示, 也需要在缓存中为每个窗口划分出一块存储器空间(area 1, area 2, ..., area n), 用于保存本窗口显示的前一帧信息。这样在特技运算时, 首先要在area 区域中对各窗口数据进行运算得到各窗口的下一帧信息, 然后将area 区域中数据写入该窗口在screen 区域中的相应地址以保存整屏幕最新一帧信息, 最后把screen 中相应数据写入显存从而完成显示。

  4.4 软件设计:

  基于上述方案, MCU 程序的设计变得非常简洁。程序结构如图6 所示, 控制器上电后, 首先进行系统 初始化, 然后从FLASH 中读取屏参数, 进行参数初始化。接着建立任务TaskCONtrol, TaskControl 拥有比各窗口显示任务都要高的优先级, 它主要用于对各窗口显示任务进行实时管理。每隔一段时间TaskControl 就要对reset 标志进行一次查询, 如果reset=1, 它会删除原先建立的各窗口显示任务, 然后从FLASH 中读取新的窗口个数, 依此建立新任务, 将每个窗口的显示交由单个窗口显示任务来控制。

  下面是任务TaskControl 的程序演示:

  void TaskControl(void *pdata){

  uint8 taskNum;

  pdata=pdata;

  RESET:

  reset=0; //reset 标志清零

  for(taskNum=3;taskNum<18;taskNum++){ // 删除原先建立的窗口任务

  OSTaskDel(taskNum); // 窗口显示任务优先级从3 开始}// 最多允许设置16 个窗口

  taskNum=flashReadWord(AREA_NUM_ADDR);// 从FLASH中读取屏幕窗口个数

  if(taskNum>0) // 根据窗口数建立窗口显示任务

  OSTaskCreate(task0,(void*)0,&task0Stk[TaskStkLength- 1],3);

  if(taskNum>1)

  OSTaskCreate(task1,(void*)0,&task1Stk[TaskStkLength- 1],4);

  ...

  while(1){if(reset) goto RESET; //reset 标志为1, 程序复位

  OSTimeDlyHMSM(0,0,1,0);}

  }

  窗口显示任务用于实现各窗口内容的显示。它根据各窗口显示方式的不同在其相应area 区域中进行下一帧数据的运算,然后调用areaToScreen()和screenToCpld()进行显示。在完成一帧数据的显示后, 调用一次OSTimeDlyHMSM()使当前任务进入等待状态同时进行一次任务调度, 将系统控制权交给处于就绪状态的窗口显示任务中优先级最高的那个, 由此完成窗口显示任务之间的切换。我们也可以通过调整OSTimeDlyHMSM()的参数来改变各窗口相临两帧显示信息之间的时间间隔, 从而可调整各窗口特技显示的效果, 比如移动显示的移动速度。下面是其中一个窗口显示任务的程序演示:

  void Task0(void *pdata){

  pdata=pdata;窗口参数初始化;while(1){uint16 i;

  for(i=0;i< 总帧数;i++){下一帧数据的运算; // 在area 区域中进行

  areaToScreen(); // 将数据从area 读出写入screen

  screenToCpld(); // 将screen 中相应数据写入显存完成一帧数据的显示OSTimeDlyHMSM(0,0,0,displaySpeed*20); // 任务调度

  }

  }

  }

  5 结束语

  充分利用32位微处理器的高性能和实时操作系统高效的任务调度算法, 实现了单屏幕多窗口的任意位置显示。使得屏幕显示变得更加丰富灵活, 也使得很多以往只能使用同步控制器或者多个异步控制器的场合可用单块异步控制器来替代, 从而降低了系统的成本。

  本文作者创新点:实现了LED 大屏幕单屏幕多个窗口任意位置的显示, 并且可实现多窗口重叠显示及“画中画”等显示效果。

相关文章

资讯排行榜

  • 每日排行
  • 每周排行
  • 每月排行

华强资讯微信号

关注方法:
· 使用微信扫一扫二维码
· 搜索微信号:华强微电子