打印

[应用方案] 新唐N76E616段码液晶驱动功能小试(附代码)

[复制链接]
730|21
跳转到指定楼层
楼主
本帖最后由 tuoxieshu 于 2018-11-5 19:07 编辑

一直都对驱动段码液晶很头痛,原理这里就不赘述了。简单来说需要偏压交流信号来驱动。比点亮数码管麻烦多了。
以前试过用IO口模拟交流信号驱动过,效果不是很理想。后来又用HT1621芯片驱动,可以是可以,不过还是嫌麻烦。买了不少段码液晶屏全部在那吃灰。
最近玩新唐,发现新唐N76E616自带段码驱动功能,于是翻出吃灰的液晶屏小试牛刀,效果很好。电路简单,控制逻辑也很清晰。

板子是自己画的,很小的板子。画板子倒不难,难的从大覆铜板上切一小块下来。。。需要买个割板刀了。
我不太爱用热转印,都用纯化学转印,成功率比热转印高多了。可以看到转印效果不错,文字细节都保留下来了。


可以直接插在最小系统板上。



PCB



使用的段码液晶图纸。



关键代码
  1. /**
  2. * Wire connection
  3. * MCU Pin: COM3  COM2  COM1  COM0  SEG0 SEG5 SEG4 SEG3 SEG2 SEG1
  4. * MCU Pin: P10   P11   P12   P13   P40  P45  P44  P43  P42  P41
  5. * LCD Pin: 1     2     3     4     5    6    7    8    9    10
  6. * --------------------------------------------------------------
  7. * COM1                       COM1  4G   1A   4D   2A   4A   3A
  8. * COM2                 COM2        1F   1B   2F   2B   3F   3B
  9. * COM3           COM3              1G   1C   2G   2C   3G   3C
  10. * COM4     COM4                    1E   1D   2E   2D   3E   3D
  11. */
  12. void ShowDigitFor888E(UINT8 digitPlace, UINT8 num, UINT8 tempUnit) {

  13.     UINT8 segABCD = 0;
  14.     UINT8 segEFG = 0;

  15.     // 参数检查
  16.     if ((digitPlace < 1 || digitPlace > 3) ||
  17.         (num > 9)) {
  18.         return;
  19.     }

  20.     // MCU's SEG0-5 Enable
  21.     // SEG0-SEG7 由 LCDSEG0 寄存器管理
  22.     LCDSEG0 = SET_BIT0 | SET_BIT1 | SET_BIT2 | SET_BIT3 | SET_BIT4 | SET_BIT5;

  23.     // 根据实际的引脚连接,以及LCD模块的段码表,确定改变哪些SEG的数据
  24.     // 每个SEG是一个8位数据,1/4Duty时,高4位不使用,低4位的数据就是段码表的COM1-4的数据
  25.     switch (digitPlace)
  26.     {
  27.         case 1:
  28.             segABCD = 5;
  29.             segEFG = 0;
  30.             break;
  31.         case 2:
  32.             segABCD = 3;
  33.             segEFG = 4;
  34.             break;
  35.         case 3:
  36.             segABCD = 1;
  37.             segEFG = 2;
  38.             break;
  39.         default:
  40.             break;
  41.     }

  42.     // 确定了SEG以后,开始设置数字各段数据(其实可以全部计算出来结果放在一个code数组里即可)
  43.     // 设置ABCD段数据(COM0-A,COM1-B,COM2-C,COM3-D)
  44.     LCDPTR  = segABCD;
  45.     switch (num)
  46.     {
  47.         case 0:
  48.             LCDDAT  = COM0 | COM1 | COM2 | COM3;
  49.             break;
  50.         case 1:
  51.             LCDDAT  = COM1 | COM2;
  52.             break;
  53.         case 2:
  54.             LCDDAT  = COM0 | COM1 | COM3;
  55.             break;
  56.         case 3:
  57.             LCDDAT  = COM0 | COM1 | COM2 | COM3;
  58.             break;
  59.         case 4:
  60.             LCDDAT  = COM1 | COM2;
  61.             break;
  62.         case 5:
  63.             LCDDAT  = COM0 | COM2 | COM3;
  64.             break;
  65.         case 6:
  66.             LCDDAT  = COM0 | COM2 | COM3;
  67.             break;
  68.         case 7:
  69.             LCDDAT  = COM0 | COM1 | COM2;
  70.             break;
  71.         case 8:
  72.             LCDDAT  = COM0 | COM1 | COM2 | COM3;
  73.             break;
  74.         case 9:
  75.             LCDDAT  = COM0 | COM1 | COM2 | COM3;
  76.             break;

  77.         default:
  78.             break;
  79.     }
  80.     // 设置EFG段数据(COM1-F,COM2-G,COM3-E)
  81.     LCDPTR  = segEFG;
  82.     switch (num)
  83.     {
  84.         case 0:
  85.             LCDDAT  = COM1 | COM3;
  86.             break;
  87.         case 1:
  88.             LCDDAT  = 0x00;
  89.             break;
  90.         case 2:
  91.             LCDDAT  = COM2 | COM3;
  92.             break;
  93.         case 3:
  94.             LCDDAT  = COM2;
  95.             break;
  96.         case 4:
  97.             LCDDAT  = COM1 | COM2;
  98.             break;
  99.         case 5:
  100.             LCDDAT  = COM1 | COM2;
  101.             break;
  102.         case 6:
  103.             LCDDAT  = COM1 | COM2 | COM3;
  104.             break;
  105.         case 7:
  106.             LCDDAT  = 0x00;
  107.             break;
  108.         case 8:
  109.             LCDDAT  = COM1 | COM2 | COM3;
  110.             break;
  111.         case 9:
  112.             LCDDAT  = COM1 | COM2;
  113.             break;

  114.         default:
  115.             break;
  116.     }

  117.     // 设置摄氏度符号段数据(COM0-SEG0,2,4)
  118.     // 注意这里要用或计算,不然会覆盖之前设置好的数字部分的段码数据
  119.     switch (tempUnit)
  120.     {
  121.         case 0xC:
  122.             LCDPTR  = 2; // 4A段 set
  123.             LCDDAT |= COM0;
  124.             LCDPTR  = 4; // 4D段 set
  125.             LCDDAT |= COM0;
  126.             LCDPTR  = 0; // 4G段 clear
  127.             LCDDAT &= ~COM0;
  128.             break;
  129.         case 0xF:
  130.             LCDPTR  = 2; // 4A段 set
  131.             LCDDAT |= COM0;
  132.             LCDPTR  = 4; // 4D段 clear
  133.             LCDDAT &= ~COM0;
  134.             LCDPTR  = 0; // 4G段 set
  135.             LCDDAT |= COM0;
  136.             break;
  137.         default:
  138.             LCDPTR  = 2; // 4A段 clear
  139.             LCDDAT &= ~COM0;
  140.             LCDPTR  = 4; // 4D段 clear
  141.             LCDDAT &= ~COM0;
  142.             LCDPTR  = 0; // 4G段 clear
  143.             LCDDAT &= ~COM0;
  144.             break;
  145.     }
  146. }
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
沙发
| 2018-11-5 10:38 | 只看该作者
厉害,分享了   干货~
板凳
 楼主 | 2018-11-5 12:32 | 只看该作者
langziwuliao 发表于 2018-11-5 10:38
厉害,分享了   干货~

哈哈哈
地板
| 2018-11-5 22:02 | 只看该作者
干货啊,666
5
| 2018-11-5 22:48 | 只看该作者
新唐有好几个系列带LCD驱动
6
 楼主 | 2018-11-6 00:41 | 只看该作者

这片子确实挺好用的
7
 楼主 | 2018-11-6 00:42 | 只看该作者
捉虫天师 发表于 2018-11-5 22:48
新唐有好几个系列带LCD驱动

嗯,M0系列里也有几款,8051系列的不知道别的有没有?
8
| 2018-11-6 17:20 | 只看该作者
这个芯片比较好用,可惜官网没看到例子。
9
 楼主 | 2018-11-6 19:28 | 只看该作者
小灵通2018 发表于 2018-11-6 17:20
这个芯片比较好用,可惜官网没看到例子。

有的。官方提供的BSP里面就有例子,我就是看那个例子结合手册写出来的程序。
看你也发了程序,收了,以后作参考
10
| 2018-11-7 09:34 | 只看该作者
不错,学习了。
11
| 2018-11-7 10:39 | 只看该作者
1T51的带段码液晶驱动确实可以做一个性价比很不错的 仪器表头什么的,包括多功能遥控接收显示装置,段码液晶的直驱功能,让线路非常简洁。
植入代码后,基本上想干点啥都行。
12
 楼主 | 2018-11-7 11:03 | 只看该作者
slotg 发表于 2018-11-7 09:34
不错,学习了。

握手
13
 楼主 | 2018-11-7 11:06 | 只看该作者
tianxj01 发表于 2018-11-7 10:39
1T51的带段码液晶驱动确实可以做一个性价比很不错的 仪器表头什么的,包括多功能遥控接收显示装置,段码液 ...

确实如此,不懂为什么stc没有这种起芯片,技术上很难吗
14
| 2018-11-7 11:11 | 只看该作者
tuoxieshu 发表于 2018-11-7 11:06
确实如此,不懂为什么stc没有这种起芯片,技术上很难吗

可惜AD不像N76E003,是12位的,只有10位。否则,做个典型的三位半电压表轻轻松松。
15
 楼主 | 2018-11-7 11:20 | 只看该作者
tianxj01 发表于 2018-11-7 11:11
可惜AD不像N76E003,是12位的,只有10位。否则,做个典型的三位半电压表轻轻松松。 ...

遗憾遗憾,也可能是故意做差异化,要是全能了003就没人用了
16
| 2018-11-7 13:56 | 只看该作者
哇,感谢分享
17
| 2018-11-7 15:07 | 只看该作者
可以给我一个完整的吗  邮箱491550870@qq.com  谢谢楼主
18
| 2018-11-7 17:16 | 只看该作者
听说过,没用过的飘过
19
 楼主 | 2018-11-7 17:38 | 只看该作者
629soft 发表于 2018-11-7 15:07
可以给我一个完整的吗  邮箱  谢谢楼主

不客气已发。
20
 楼主 | 2018-11-7 17:39 | 只看该作者
jefferson1998 发表于 2018-11-7 13:56
哇,感谢分享

扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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