[MM32硬件] 【EV Board (MM32L0136C7P)测评】+ 驱动LCD屏显示数据

[复制链接]
 楼主| 发表于 2022-11-29 21:08 | 显示全部楼层 |阅读模式
本帖最后由 suncat0504 于 2022-12-6 13:38 编辑

#申请原创# @21小跑堂
开发板上的LCD是笔段式的LCD,MM32L0136C7P上已经利用GPIO的复用功能实现了它的驱动,这样我们不需要处理LCD的驱动处理了。实际上我一直比较头痛笔段式液晶的显示处理,因为涉及太多的知识点,自己也不愿意在这个上面花太多的时间。相比之下,点阵式液晶对于开发者而言更容易一些。手册中对于LCD的显示,有如下描述:
字段显示.png
根据这个说明,我整理了下有关用寄存器赋值方式驱动LCD显示的资料。
0b398259d8ae1d5d4f3296799ed05041
bbe0ef959c20839074d5b93c1c185e97
9f8d93590bf8ad61e36b64ad737c48ef
74fafaeaaa51f76f2d60d8fc7b01e597
7020aa37369ba7bf88aa3de1dea9b4d0
根据上面四个图,只需要把各个段的数据根据位的对应信息,赋值到对应的DR(DR0~DR7)寄存器上,就可以自动实现数据的显示。我这么做的一个原因,没花时间去分析SLCD提供的例程中显示数据的处理逻辑。事实上,任何一位的数据都涉及到了8个寄存器的操作,平均每两个笔段,通过一组寄存器来显示。
按照这个处理逻辑,如果想在左上角第一位位置上显示1,需要进行如下处理:
  1. // COM1:显示笔段D和小数点

  2. BOARD_SLCD_PORT->DR0 = 0x00;

  3. BOARD_SLCD_PORT->DR1 = 0x08;

  4. // COM2:显示笔段C和E

  5. BOARD_SLCD_PORT->DR2 = 0x80;

  6. BOARD_SLCD_PORT->DR3 = 0x0100;

  7. // COM3:显示笔段B和G

  8. BOARD_SLCD_PORT->DR4 = 0x81;

  9. BOARD_SLCD_PORT->DR5 = 0x00;

  10. // COM4:显示笔段A和F

  11. BOARD_SLCD_PORT->DR6 = 0x00;

  12. BOARD_SLCD_PORT->DR7 = 0x00;

以上代码经过实测是OK的,利用SLCD显示例程,在此基础上,编写了处理数据显示用的函数。因为是笔段式的,所以可以自己组织笔段码数据,仿照以前用的数码管的那种形式来显示数据。基本思想就是根据不同的字符,找到对应的段码数据,赋值到对应的LCD_DR寄存器中,完成数据的整体显示。
显示效果如下:
c00394c13fb95631c41fcd3665115195
处理代码只需要执行:show_row((uint8_t *)"01234-EA7C");就可以了。
在需要显示3个冒号、8个小数点以及其它可表示的符号时(实际测试,正像用户手册中说明的那样,S5~S8、W2~W4,L1~L4是不能被显示的,因为MCU没有提供电路上的支持),可以通过追加标志,利用标志位,给对应的LCD_DR寄存器的对应位进行赋值即可。
需要说明的是,各位数据的笔段显示分布,没有一致性规律。编程时一定要注意。
按照计划,完成显示处理后,追加键盘的输入处理。预想中,使用MCU中其它未被使用的GPIO口,和一个4X4键盘模块通讯,实现键盘数据的输入处理。结果实际测试不顺利啊,哪怕是最简单的LED输出控制,都没完成,原因还在调查中。
LCD的资料: GDC0689.pdf (270.94 KB, 下载次数: 5)

发表于 2022-12-3 18:51 来自手机 | 显示全部楼层
灵动这款MCU有段码驱动外设吗?
发表于 2022-12-3 21:53 | 显示全部楼层
chenjun89 发表于 2022-12-3 18:51
灵动这款MCU有段码驱动外设吗?

有的, 楼主写的就是MCU直接驱动段码LCD.
 楼主| 发表于 2022-12-4 12:04 | 显示全部楼层
本帖最后由 suncat0504 于 2022-12-6 13:38 编辑

之前自己写了一个驱动,代码太长了。后来下载一个新的例程,就使用那个例程了。也挺好用的。 MM32L0130_LibSamples_V020_1201.zip (5.49 MB, 下载次数: 5)
以下是使用它的代码,可供参考:
  1. // 显示子字符串,包含左上角的和中间的
  2. void show_row(uint8_t *str1) {
  3.     uint8_t i=0;
  4.     uint8_t j=0;
  5.     uint8_t lcd_str[10];
  6.     while(str1[i]!='\0') {
  7.         if (i<10) {
  8.             lcd_str[i] = str1[i];
  9.         } else {
  10.             break;
  11.         }
  12.         i++;
  13.     }
  14.    
  15.     // 清除剩余位
  16.     for (j=i; j<10; j++) {
  17.         lcd_str[j]=0x00;
  18.     }
  19.     for (j=0; j<4; j++) {
  20.         LCD_DisplayNumber2(j, lcd_str[j], 1);
  21.     }
  22.     for (j=0; j<6; j++) {
  23.         LCD_DisplayNumber1(j, lcd_str[j], 1);
  24.     }   
  25. }
  26. // 显示子字符串,包含中间的
  27. void show_row1(uint8_t *str1) {
  28.     uint8_t i=0;uint8_t j=0;
  29.     uint8_t lcd_str[10];
  30.     while(str1[i]!='\0') {
  31.         if (i<6) {
  32.             lcd_str[i] = str1[i];
  33.         } else {
  34.             break;
  35.         }
  36.         i++;
  37.     }

  38.     for (j=0; j<6; j++) {
  39.         LCD_DisplayNumber1(j, lcd_str[j], 1);
  40.     }   
  41. }

  42. // 显示子字符串,包含左上角的
  43. void show_row2(uint8_t *str1) {
  44.     uint8_t i=0;uint8_t j=0;
  45.     uint8_t lcd_str[10];
  46.     while(str1[i]!='\0') {
  47.         if (i<4) {
  48.             lcd_str[i] = str1[i];
  49.         } else {
  50.             break;
  51.         }
  52.         i++;
  53.     }

  54.     for (j=0; j<4; j++) {
  55.         LCD_DisplayNumber2(j, lcd_str[j], 1);
  56.     }   
  57. }

  58. // 显示冒号
  59. void show_maohao(u8 col1, u8 col2, u8 col3) {
  60.     if (col1) {
  61.         SLCD->DR0  |= 1<<27;
  62.     }
  63.     if (col2) {
  64.         SLCD->DR0  |= 1<<30;
  65.     }
  66.     if (col3) {
  67.         SLCD->DR2  |= 1<<30;
  68.     }
  69. }
因为工程还在编写中,这不是最终结果。
 楼主| 发表于 2022-12-4 12:08 | 显示全部楼层
本帖最后由 suncat0504 于 2022-12-4 12:18 编辑
chenjun89 发表于 2022-12-3 18:51
灵动这款MCU有段码驱动外设吗?

已经回答了,看上面回帖哈
发表于 2022-12-6 12:57 | 显示全部楼层
MM32L0136C7P支持多大的刷新速度?

点评

板载的是SLCD,段码式。刷新速度,估计得看LCD(型号:GDC0689)。  发表于 2022-12-6 13:36
发表于 2022-12-6 14:47 | 显示全部楼层
这个没有oled好用一些。              

点评

是啊,OLED可以自由输出图形、字符。这个LCD只能显示笔段  发表于 2022-12-6 14:51
发表于 2022-12-9 21:51 | 显示全部楼层
笔段式的LCD功耗怎么样              

点评

功耗低  发表于 2022-12-10 08:38
发表于 2025-5-28 16:04 | 显示全部楼层
这种是跟数码管点亮原理一样 吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:大连伊飞特信息技术有限公司软件工程师
简介:本人于1993年毕业于大连理工大学。毕业后从事单片机开发工作5年,之后转入软件开发工作至今。

158

主题

4514

帖子

6

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