找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2142|回复: 16
收起左侧

单片机多个数码管动态显示问题分析,请大家帮忙看看

  [复制链接]
ID:960453 发表于 2022-7-5 08:54 | 显示全部楼层 |阅读模式
下面是数码管显示的原理图,然后4个com端+5,6引脚放在了单片机P1口,7~13引脚放在P2口。问题是 该如何实现后面3个数字的动态显示呢?
2.png
1.png
回复

使用道具 举报

ID:332444 发表于 2022-7-5 10:21 | 显示全部楼层
知道了端电压点亮和熄灭就可以用编程实现
回复

使用道具 举报

ID:651494 发表于 2022-7-5 10:47 | 显示全部楼层
最好用数码管驱动IC sm1623,sm1628等,如果纯单片机I/O来控制也是可以的,先搞请,第1个8字,就是1A+1B+1C+1D+1E+1F+1G,显示一个“4”,就是1B,1C,1F,1G点亮,其余熄灭,显示一个“F” 1A,1E,1F,1G点亮,第2个8,2A......2G,第3个8,3A.....3G
回复

使用道具 举报

ID:807651 发表于 2022-7-5 11:23 | 显示全部楼层
先知道怎么驱动数码管,了解原理。按上面的需要13脚来驱动考虑到应该还有其他功能需要到引脚,可以考虑用数码管驱动IC来控制
回复

使用道具 举报

ID:955239 发表于 2022-7-5 11:32 | 显示全部楼层
这是9个SEG*4个COM,选一款合适的LED驱动IC即可
回复

使用道具 举报

ID:1038394 发表于 2022-7-5 11:42 | 显示全部楼层
数码管驱动IC来控制
回复

使用道具 举报

ID:96682 发表于 2022-7-5 15:30 | 显示全部楼层
怎么驱动不是有图了么,用脉冲去驱动恰当的刷新频率就行了
回复

使用道具 举报

ID:824490 发表于 2022-7-5 16:38 | 显示全部楼层
好奇葩的LCD,出线在窄边。。应力测试过了吗?
回复

使用道具 举报

ID:161164 发表于 2022-7-5 17:55 | 显示全部楼层
1 你的单片机必须有高阻输入模式
2 每个COM 脚接上两个相同阻值的电阻来达到1/2Vdd的条件
3 根据下图输出
2022-07-05_175034.png


回复

使用道具 举报

ID:195496 发表于 2022-7-6 16:50 | 显示全部楼层
你这是个段码屏,跟数码管驱动不太一样,还要按偏压值来设计电压组合
回复

使用道具 举报

ID:130230 发表于 2022-7-6 17:01 | 显示全部楼层
这不是LCD吗? 在中断里面刷新LCDram就行。
回复

使用道具 举报

ID:1013784 发表于 2022-7-11 02:35 | 显示全部楼层
数码管驱动IC来控制,比较直接
回复

使用道具 举报

ID:213173 发表于 2022-7-11 08:06 | 显示全部楼层
本帖最后由 wulin 于 2022-7-11 10:28 编辑

这个屏相当于4位半数字段码屏,如用单片机直接驱动这种LCD屏,其端口必须具备高阻模式。每个COM 口接两个分压电阻以提供1/2VCC。再以2ms高电平,2ms低电平,6ms1/2VCC(高阻态)的交流方式轮流使能4个COM。在某COM口使能期间(交流),与其对应的笔段电平相反的显示,电平相同的不显示。由于COM口不像LED那样对应一个“8”字,而是对应各字符的一部分。所以要用一个int型缓存数组把对应笔段分离出来同时显示。例:
dis_buf[0]=(T5>>3|T4)|(1F>>1|1A<<2)|(2F<<1|2A<<4)|(3F<<3|3A<<6)|(V<<8);//V.3F.3A.2F.2A.1F.1A.T5.T4
dis_buf[1]=(T6>>3|T3)|(1G>>1|1B<<2)|(2G<<1|2B<<4)|(3D<<3|3B<<6)|(A<<8);//A.3G.3B.2G.2B.1G.1B.T6.T3
.........下面是一个实际使用中的LCD驱动代码,放在2ms中断中运行。单片机型号STC15W408AS
  1. //LCD显示程序
  2. void display(uchar ba,uchar sh,uchar ge)
  3. {
  4.         static uchar i=0;        
  5.         static uchar a[4];
  6.         a[0]=(ba<<1&0x20)|(ba<<4&0x10)|//高1位左移1到高2位/低1位左移4到高1位
  7.                (sh>>1&0x08)|(sh<<2&0x04)|//高1位右移1到低4位/低1位左移2到低3位
  8.          (ge>>3&0x02)|(ge   &0x01);//高1位右移3到低2位/低1位维持0到低1位
  9.         
  10.         a[1]=(ba   &0x20)|(ba<<3&0x10)|//高2位维持0到高2位/低2位左移3到高1位
  11.              (sh>>2&0x08)|(sh<<1&0x04)|//高2位右移2到低4位/低2位左移1到低3位
  12.          (ge>>4&0x02)|(ge>>1&0x01);//高2位右移4到低2位/低2位右移1到低1位
  13.         
  14.         a[2]=(ba>>1&0x20)|(ba<<2&0x10)|//高3位右移1到高2位/低3位左移2到高1位
  15.              (sh>>3&0x08)|(sh   &0x04)|//高3位右移3到低4位/低3位维持0到低3位
  16.          (ge>>5&0x02)|(ge>>2&0x01);//高3位右移5到低2位/低3位右移2到低1位
  17.         
  18.         a[3]=(ba>>2&0x20)|(ba<<1&0x10)|//高4位右移2到高2位/低4位左移1到高1位
  19.              (sh>>4&0x08)|(sh>>1&0x04)|//高4位右移4到低4位/低4位右移1到低3位
  20.          (ge>>6&0x02)|(ge>>3&0x01);//高4位右移6到低2位/低4位右移3到低1位

  21.         switch(i)
  22.         {
  23.                 case 0: P1M1&=0x0f;P1M1|=0x70;COM1=0; LCD_SEG( a[0]);break;
  24.                 case 1: P1M1&=0x0f;P1M1|=0x70;COM1=1; LCD_SEG(~a[0]);break;

  25.                 case 2: P1M1&=0x0f;P1M1|=0xb0;COM2=0; LCD_SEG( a[1]);break;
  26.                 case 3: P1M1&=0x0f;P1M1|=0xb0;COM2=1; LCD_SEG(~a[1]);break;

  27.                 case 4: P1M1&=0x0f;P1M1|=0xd0;COM3=0; LCD_SEG( a[2]);break;
  28.                 case 5: P1M1&=0x0f;P1M1|=0xd0;COM3=1; LCD_SEG(~a[2]);break;

  29.                 case 6: P1M1&=0x0f;P1M1|=0xe0;COM4=0; LCD_SEG( a[3]);break;
  30.                 case 7: P1M1&=0x0f;P1M1|=0xe0;COM4=1; LCD_SEG(~a[3]);break;
  31.         }
  32.         i=++i%8;
  33. }
复制代码
无标题.jpg 液晶屏设计图.jpg



回复

使用道具 举报

ID:960453 发表于 2022-7-19 15:09 | 显示全部楼层
wulin 发表于 2022-7-11 08:06
这个屏相当于4位半数字段码屏,如用单片机直接驱动这种LCD屏,其端口必须具备高阻模式。每个COM 口接两个分 ...

感谢大哥,但我实在没搞懂怎么用交流驱动这种段码屏 我能不能讨要一份简单显示demo程序参考
回复

使用道具 举报

ID:213173 发表于 2022-7-19 16:31 | 显示全部楼层
啊伟诶诶 发表于 2022-7-19 15:09
感谢大哥,但我实在没搞懂怎么用交流驱动这种段码屏 我能不能讨要一份简单显示demo ...

所谓交流驱动并不是非得正负交替。COM端电压实际是在0V、VCC,1/2VCC,3种状态变化,1/2VCC是在IO口设置高阻模式,由外部的两个同值电阻分压获得。笔段端电压只在0V和VCC,两种状态变化,对液晶两极而言就是交流电压。VCC不论采用的是5V还是3.3V,1/2VCC都不能满足笔段显示,只要在笔段与COM之间加电压>3V,笔段就能显示,否则不显示。但液晶不能长期加固定电压,否则液晶会被极化而无法改变显示。所以要不断改变液晶两极的电场方向。这就是所谓交流驱动的原因。前面帖子提供的LCD显示代码已经非常清楚的表明上述解释。项目完整代码因商业原因不能提供,这是大家都懂的。
回复

使用道具 举报

ID:1039965 发表于 2022-7-19 16:45 | 显示全部楼层
先一个一个数字测试好编码。然后封装起来调用就行
回复

使用道具 举报

ID:195496 发表于 2022-7-20 09:10 | 显示全部楼层
用液晶驱动芯片简单,HT1621b就可以,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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