查看: 3965|回复: 3

基于NXP COG PCA8538实现的段式LCD映射检测系统

[复制链接]
  • TA的每日心情
    郁闷
    2024-10-28 10:11
  • 签到天数: 1703 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2013-11-22 20:34:32 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 nemon 于 2013-11-28 11:20 编辑

    以前弄段式LCD显示的时候,基本上是这个顺序:先看datasheet,搞明白地址和段的关系,然后按电路推导出地址和显示字符的关系,要是弄到一块没有电路图的模块,就手工把图画出来。总觉得有些费功夫,虽然想做个省事儿的工具,可每次弄弄也就出来了,就一直没动手。这次NXP推出了COG PCA8538的模块,COG驱动IC和LCD连为一体,靠抄板是无法获得地址映射的关系的,这唤起了楼主隐藏已久的做一个自动检测段式LCD映射关系的欲望。
    (一)项目描述
    这次的项目目标是做一个自动的映射关系识别系统,分为2部分
    1)上位机响应MCU的串口消息调用摄像头对当前的LCD屏拍照,采集照片;
    无标题.png
    2)编制软件,对采集到的照片进行定义、分析,来推断出当前照片组的映射关系;
    (二)项目实现
    首先使用CY8CKIT042按此连接:
    新建 文本文档.png
    实物是这样的:

    代码:
    1. /* ========================================
    2. *
    3. * Copyright YOUR COMPANY, THE YEAR
    4. * All Rights Reserved
    5. * UNPUBLISHED, LICENSED SOFTWARE.
    6. *
    7. * CONFIDENTIAL AND PROPRIETARY INFORMATION
    8. * WHICH IS THE PROPERTY OF your company.
    9. *
    10. * ========================================
    11. */
    12. #include <device.h>
    13. #include <algo.h>

    14. uint8 cmd_init[24]={
    15. 0x80,0x3A,0x80,0xD8,0x80,0x18,0x80,0xD4,0x80,0xC9,0x80,0x45,0x80,0x73,0x80,0x00,
    16. 0x80,0xD0,0x80,0xB3,0x80,0x01,0x80,0x39};

    17. uint8 cmd_draw[7]={0x80,0x80,0x80,0x90,0x80,0xA0,0x20};

    18. void main()
    19. {
    20.     //show3x93codes();
    21.     /* Place your initialization/startup code here (e.g. MyInst_Start()) */

    22.     /* CyGlobalIntEnable; */ /* Uncomment this line to enable global interrupts. */
    23.     uint32 i,f;
    24.     uint8 m;
    25.     Pin_RED_Write(0);
    26.     CyDelay(200);
    27.     Pin_RED_Write(1);
    28.     I2C_M_Start();
    29.     UART_1_Start();
    30.    

    31.     f=I2C_M_I2CMasterSendStart(0x38, 0x0);
    32.     for(i=0;i<24;i++)f=I2C_M_I2CMasterWriteByte(cmd_init[i]);
    33.     for(i=0;i<7;i++)f=I2C_M_I2CMasterWriteByte(cmd_draw[i]);
    34.     for(i=0;i<204;i++)f=I2C_M_I2CMasterWriteByte(0x00);
    35.     f=I2C_M_I2CMasterSendStop();
    36.     UART_1_UartPutCRLF('-');
    37.    
    38.     for(;;)
    39.     {
    40.         /* Place your application code here. */
    41.         for (m=0;m<12;m++){
    42.             CyDelay(1000);
    43.             Pin_RED_Write(1);
    44.             CyDelay(1000);
    45.             Pin_RED_Write(0);
    46.             f=I2C_M_I2CMasterSendStart(0x38, 0x0);
    47.             for(i=0;i<24;i++)f=I2C_M_I2CMasterWriteByte(cmd_init[i]);
    48.             for(i=0;i<7;i++)f=I2C_M_I2CMasterWriteByte(cmd_draw[i]);
    49.             for(i=0;i<204;i++)f=I2C_M_I2CMasterWriteByte(getRamMask(m,i));
    50.             f=I2C_M_I2CMasterSendStop();
    51.             Pin_RED_Write(0);
    52.             UART_1_UartPutCRLF(m<10?'0'+m:'A'+m-10);
    53.         }
    54.         
    55.         
    56.             CyDelay(1000);
    57.             Pin_RED_Write(1);
    58.             CyDelay(1000);
    59.             Pin_RED_Write(0);
    60.             f=I2C_M_I2CMasterSendStart(0x38, 0x0);
    61.             for(i=0;i<24;i++)f=I2C_M_I2CMasterWriteByte(cmd_init[i]);
    62.             for(i=0;i<7;i++)f=I2C_M_I2CMasterWriteByte(cmd_draw[i]);
    63.             for(i=0;i<204;i++)f=I2C_M_I2CMasterWriteByte(0x00);
    64.             f=I2C_M_I2CMasterSendStop();
    65.             Pin_RED_Write(0);
    66.             UART_1_UartPutCRLF('-');
    67.     }
    68. }

    69. /* [] END OF FILE */
    复制代码
    然后后就可以获得PCA8538的204*8的地址对应的13个图:
    2013-11-22_203604_00003.png
    后面的工作语言是C#了,做出的东西请看图:
    2013-11-22_200313_00002.png
    这是一个通用工具,左侧是图片文件选择区,用来显示用到的图像文件;
    右侧是单元定义区,用于定义显示单元的信息;
    中间是图像浏览和操作区,用于显示图像、调整和显示单元定义;

    下面来讲解一下用法,按左上角的按钮可以选取工作文件,然后点击文件名,图片会画在中间的操作区。
    用鼠标点击操作区,可以画出红色矩形,这个软件就是用矩形中心像素的灰度值来检测是否显示单元、显示单元是否为有效的。
    红色矩形的坐标和大小会反映到右侧靠上的控件里,可以为单元命名,还可以把单元的格式改成矩阵。对于矩阵来说,会有行数和列数2个选项,这样就不必繁琐的一个一个定义了。
    2013-11-22_195845_00001.png
    有5个按钮,含义如下:
    +:表示将当前的矩形定义增加到定义列表中;
    -:删除定义列表中当前选中的定义;
    ∧:表示用定义列表中当前选中的定义覆盖当前的矩形定义;
    ∨:表示用当前的矩形定义覆盖定义列表中当前选中的定义;
    C:表示清空定义列表;
    定义列表下面有几个选项:
    左边的1:选中时表示LCD白底黑字,以“1”的颜色作为区分是否点亮的依据;
    右边的1与左边类似,但示LCD黑底白字;
    bits表示地址需要用几位,需要注意的是,这里的地址是到bit的所以要比Bit的地址多Log(8,2)=3位,而且这里的位数是要和左边的工作文件对应的。
    save按钮用于保存当前列表中的所有定义(也就是不包括上面矩形区的定义);
    load按钮用于读取保存的定义到列表中;
    当定义和图像文件都准备好之后,就可以按左下角的“GO!”来生成映射表了。CVS格式的,也就是说excel也能打开的纯文本格式。
    比较不同的映射表是否一致,还可以知道cog是否有故障。

    这里是一个为 PCA8538生成的映射表: result_20131122202436.rar (4.82 KB, 下载次数: 587)
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-10-28 10:11
  • 签到天数: 1703 天

    连续签到: 1 天

    [LV.Master]伴坛终老

     楼主| 发表于 2013-11-22 20:55:11 | 显示全部楼层
    补充几句。
    显示元素定义的名字借鉴了这张图,向此次活动的先驱致敬:
    复件 图片3.jpg
    编译环境是VS10 .NET framework 4,我这里界面是这样的:
    2013-11-22_205644_00004.png
    还有,一边抢楼一边写字太累了。
    我决定一边看电影一边抢楼……
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-12 10:32
  • 签到天数: 295 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-11-23 08:49:32 | 显示全部楼层
    大牛啊~~~~~~~~~~~~`
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-15 06:28
  • 签到天数: 3747 天

    连续签到: 60 天

    [LV.Master]伴坛终老

    发表于 2013-11-24 07:15:11 | 显示全部楼层
    很丰富啊!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-20 01:49 , Processed in 0.160902 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.