找回密码
 立即注册
查看: 3512|回复: 13

LCM功能

[复制链接]
  • TA的每日心情
    慵懒
    2023-12-12 11:44
  • 签到天数: 1 天

    [LV.1]初来乍到

    13

    主题

    38

    回帖

    287

    积分

    中级会员

    积分
    287
    发表于 2022-11-29 10:19:05 | 显示全部楼层 |阅读模式
    手册上LCM部分没有例程,说明不够详细,只能靠猜测自己写,结果失败了,软件模拟没问题。


    #if MY_FUN_ENABLE_C1602
    /*
    void my_fun_c1602_busy(void)
    {
            unsigned char t;

            t = 0x80;
            P_SW2 |= 0x80;
            while (t & 0x80)
            {
                    LCMIFCR = 0x86;                        // Read Command
                    t = LCMIFDATL;
            }
            P_SW2 &= 0x7f;
    }

    void my_fun_c1602_write_command(unsigned x)
    {
            my_fun_c1602_busy();
            P_SW2 |= 0x80;
            LCMIFDATL = x;
            LCMIFCR = 0x84;                        // Write Command
            P_SW2 &= 0x7f;
    }

    void my_fun_c1602_write_data(unsigned x)
    {
            my_fun_c1602_busy();
            P_SW2 |= 0x80;
            LCMIFDATL = x;
            LCMIFCR = 0x85;                        // Write Data
            P_SW2 &= 0x7f;
    }

    void my_fun_c1602_initialization(void)
    {
            P_SW2 |= 0x80;
            LCMIFCFG = 0x01;                // 禁止中断, P2数据口, M6800模式
            LCMIFCFG2 = 0x5f;                // E = P42, RS = P41, RW = P40
            LCMIFDATL = 0x38;                // 初始化, 8 Bit bus, 双行显示, 5x7 点阵
            LCMIFCR = 0x84;                        // Write Command
            INSIDE_TIME_BEEP = 5;        // 延时40-50ms
            while(INSIDE_TIME_BEEP);
            P_SW2 &= 0x7f;
            my_fun_c1602_write_command(0x01);
            my_fun_c1602_write_command(0x02);
            my_fun_c1602_write_command(0x06);
            my_fun_c1602_write_command(0x0f);        //6c
    }
    */

    void my_fun_c1602_busy(void)
    {
            unsigned char t;

            t = 0x80;
            while (t & 0x80)
            {
                    LCD_EN = 0;
                    LCD_RS = 0;                                        // Write Command
                    LCD_RW = 1;
                    LCD_DAT = 0xff;
                    my_fun_public_delay();
                    LCD_EN = 1;
                    my_fun_public_delay();
                    t = LCD_DAT;
                    LCD_EN = 0;
                    my_fun_public_delay();
            }
    }

    void my_fun_c1602_write_command(unsigned char x)
    {
            my_fun_c1602_busy();
            LCD_RS = 0;                                        // Write Command
            LCD_RW = 0;
            LCD_EN = 0;
            LCD_DAT = x;
            my_fun_public_delay();
            LCD_EN = 1;
            my_fun_public_delay();
            LCD_EN = 0;
            my_fun_public_delay();
            LCD_DAT = 0xff;
    }

    void my_fun_c1602_write_data(unsigned char x)
    {
            my_fun_c1602_busy();
            LCD_RS = 1;                                        // Write Data
            LCD_RW = 0;
            LCD_EN = 0;
            LCD_DAT = x;
            my_fun_public_delay();
            LCD_EN = 1;
            my_fun_public_delay();
            LCD_EN = 0;
            my_fun_public_delay();
            LCD_DAT = 0xff;
    }

    void my_fun_c1602_printf(unsigned char x, unsigned char y, unsigned char *s)
    {
            unsigned char i;

            x = x & 0x3f;
            y = y & 0x01;
            my_fun_c1602_write_command(x + (y * 0x40) + 0x80);
            for (i = 0; i < strlen(s); i++) my_fun_c1602_write_data(s[i]);
    }

    void my_fun_c1602_initialization(void)
    {
            my_fun_c1602_write_command(0x38);
            INSIDE_TIME_BEEP = 5;
            while(INSIDE_TIME_BEEP);
            my_fun_c1602_write_command(0x01);
            my_fun_c1602_write_command(0x02);
            my_fun_c1602_write_command(0x06);
            my_fun_c1602_write_command(0x0c);
    }

    #endif


    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 08:36
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    11

    主题

    183

    回帖

    1790

    积分

    版主

    积分
    1790
    QQ
    发表于 2022-11-29 11:21:18 | 显示全部楼层
    STC32G实验箱例程包里面有LCM接口驱动TFT屏的例子可以参考
    123456.png
    这个压缩包在官网https://www.stcai.com/yyfa上有


    QQ:1638975601
    手机:19952583876
  • TA的每日心情
    开心
    2024-1-4 08:56
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    16

    主题

    711

    回帖

    2516

    积分

    超级版主

    积分
    2516
    发表于 2022-11-29 12:33:09 | 显示全部楼层
    本帖最后由 zhp 于 2022-11-29 12:37 编辑

    使用LCM读写数据和命令,可参考下面的代码
    1. void lcm_wait()
    2. {
    3.     while (!(LCMIFSTA & 0x01));
    4.     LCMIFSTA &= ~0x01;
    5. }
    6. void lcm_write_cmd(char cmd)
    7. {
    8.     LCMIFDATL = (cmd);
    9.     LCMIFCR = 0x84;
    10.     lcm_wait();
    11. }
    12. void lcm_write_data(char dat)
    13. {
    14.     LCMIFDATL = (dat);
    15.     LCMIFCR = 0x85;
    16.     lcm_wait();
    17. }
    18. char lcm_read_status()
    19. {
    20.     LCMIFCR = 0x86;
    21.     lcm_wait();
    22.    
    23.     return LCMIFDATL;
    24. }
    25. char lcm_read_data()
    26. {
    27.     LCMIFCR = 0x87;
    28.     lcm_wait();
    29.    
    30.     return LCMIFDATL;
    31. }
    复制代码

  • TA的每日心情
    慵懒
    2023-12-12 11:44
  • 签到天数: 1 天

    [LV.1]初来乍到

    13

    主题

    38

    回帖

    287

    积分

    中级会员

    积分
    287
     楼主| 发表于 2022-11-29 16:33:38 | 显示全部楼层
    谢谢,示例藏得够深:D
    我先核对下楼上得
  • TA的每日心情
    慵懒
    2023-12-12 11:44
  • 签到天数: 1 天

    [LV.1]初来乍到

    13

    主题

    38

    回帖

    287

    积分

    中级会员

    积分
    287
     楼主| 发表于 2022-11-30 12:15:44 | 显示全部楼层
    研究一上午任然失败,液晶没任何反应,看了下二楼提供的65号DEMO,检测LCD忙部分都被注释掉了,用得还是常规方法,难道你们自己也没成功?
    下面是修改过的程序,有空的话帮忙看看哪里还有错。
    LCM暂时不用了
    void my_fun_c1602_end(void)
    {
            while (!(LCMIFSTA & 0x01));
            LCMIFSTA &= ~0x01;
    }

    void my_fun_c1602_busy(void)
    {
            do {LCMIFCR = 0x86; my_fun_c1602_end();} while (LCMIFDATL & 0x80);
    }

    void my_fun_c1602_write_command(unsigned char x)
    {
            P_SW2 |= 0x80;
            my_fun_c1602_busy();
            LCMIFDATL = x;
            LCMIFCR = 0x84;                        // Write Command
            my_fun_c1602_end();
            P_SW2 &= 0x7f;
    }

    void my_fun_c1602_write_data(unsigned char x)
    {
            P_SW2 |= 0x80;
            my_fun_c1602_busy();
            LCMIFDATL = x;
            LCMIFCR = 0x85;                        // Write Data
            my_fun_c1602_end();
            P_SW2 &= 0x7f;
    }

    void my_fun_c1602_initialization(void)
    {
            P_SW2 |= 0x80;
            LCMIFCFG = 0x01;                // 禁止中断, P2数据口, M6800模式
            LCMIFCFG2 = 0x5f;        //0x45        // E = P42, RS = P41, RW = P40
            LCMIFSTA &= ~0x01;
            LCMIFDATL = 0x38;                // 初始化, 8 Bit bus, 双行显示, 5x8 点阵
            LCMIFCR = 0x84;                        // Write Command
            my_fun_c1602_end();
            P_SW2 &= 0x7f;
            INSIDE_TIME_BEEP = 5;        // 延时50ms
            while(INSIDE_TIME_BEEP);
            my_fun_c1602_write_command(0x01);
            my_fun_c1602_write_command(0x02);
            my_fun_c1602_write_command(0x06);
            my_fun_c1602_write_command(0x0c);
    }
  • TA的每日心情
    奋斗
    4 小时前
  • 签到天数: 122 天

    [LV.7]常住居民III

    26

    主题

    1240

    回帖

    3883

    积分

    论坛元老

    积分
    3883
    发表于 2022-12-1 13:19:42 | 显示全部楼层
    实验箱例程驱动LCD接口原先都是使用推挽输出模式,读取状态时用IO口驱动方式方便调整输入输出模式。其实使用LCM接口检测忙状态也是可以的,附件例程已经通过测试验证,请参考。

    LCM_Test_6800_DMA_8bit_ST7920.zip (12.06 KB, 下载次数: 127)

    另外,再发一份IO口驱动1602的例程供参考,效果如下:
    1602-2.jpg
    LCD1602显示程序.zip (13.16 KB, 下载次数: 114)

  • TA的每日心情
    慵懒
    2023-12-12 11:44
  • 签到天数: 1 天

    [LV.1]初来乍到

    13

    主题

    38

    回帖

    287

    积分

    中级会员

    积分
    287
     楼主| 发表于 2022-12-3 09:43:14 | 显示全部楼层
    谢谢,我不会为了某个功能专门试验,这次要用到LCD,想起有LCM这个功能,就按照相应硬件连线,就算试验失败也不影响使用,等有机会再继续。
    STC挺好用的,目前用的8A8K64S4A12和8A8K64D4,就是内存太小,能加到32K就好了。

    该用户从未签到

    549

    主题

    9191

    回帖

    1万

    积分

    管理员

    积分
    13985
    发表于 2022-12-3 21:43:00 | 显示全部楼层
    STC32G12K128, SRAM 是 12K, FLASH 是 128K
  • TA的每日心情
    慵懒
    2023-12-12 11:44
  • 签到天数: 1 天

    [LV.1]初来乍到

    13

    主题

    38

    回帖

    287

    积分

    中级会员

    积分
    287
     楼主| 发表于 2022-12-5 16:31:26 | 显示全部楼层
    12K还是太小,目前大约用到20K,只好加了一片IDT71V256,好像没有国产的3.3V的62256,5V的也都是拆机片,不符合主要芯片使用国产的政策;FLASH倒是够了,40K不到,能不能设计少量大内存的种类,比如64D4/32G等,内存32K-48K最好,价格翻倍也能接受,当ARM用。

    该用户从未签到

    549

    主题

    9191

    回帖

    1万

    积分

    管理员

    积分
    13985
    发表于 2022-12-5 18:00:15 | 显示全部楼层
    整个系统都用 3.3V 的 可能更容易买到 相应的器件,STC 现在都是 1.9V ~ 5.5V, SRAM 3.3V 的更多, 5V 也是可以跑 3.3V 的
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-24 13:04 , Processed in 0.092867 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表