找回密码
 立即注册
查看: 202|回复: 1

一种比较简单的单排5脚188数码管的驱动方法

[复制链接]
已绑定手机

11

主题

484

回帖

1362

积分

金牌会员

积分
1362
发表于 2026-9-21 11:10:48 | 显示全部楼层 |阅读模式
在一些低档消费电子产品中常见一种单排5脚188数码管。由于这种数码管内部结构异于常见的数码管。商家提供的内部LED与引脚关系图看上去感觉杂乱无章。仔细研究一番其实就是一种矩阵连接关系,将原图重新排列一下就可以明显看出来就是一种矩阵连接关系。既可以共阴方式驱动也可以共阳方式驱动。一次最多可以点亮4个笔段。本例以共阴方式驱动。如果单片机端口以推挽模式+限流电阻驱动这种数码管,由于需要点亮的笔段数不确定,随亮点数多少不同亮度会不均匀。如果单片机引脚直接连接数码管又有过流损坏单片机端口的风险。为此利用新型单片机端口的开漏模式和内置上拉电阻,按需要点亮的笔段使能上拉电阻提供驱动电流。作为当前用作共阴的端口置低电平,不论需要点亮的笔段多少,各笔段亮度一致。5脚188数码管共16个笔段,需要分4次才能完成全部笔段扫描。由此制作一个表格,将8位标准段码拆解为5位驱动码。实践证明:数码管亮度能够满足大多数应用场景,并且无鬼影。单排6脚1888数码管驱动方法类推。

123.jpg
  1. //5脚188数码管驱动程序示例
  2. //使用STC8H1K08单片机
  3. #include <STC8H.H>
  4. #include <intrins.h>
  5. #define uchar unsigned char
  6. #define uint  unsigned int
  7. uchar code table[]={//共阴数码管段码0~f
  8. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  9. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  10. uchar data dis_buf[4];       //显示缓存
  11. uint count;                  //计数
  12. uchar num;                   //计数
  13. uchar w1,w2,w3;              //数码管位
  14. bit flag;                    //中断标志
  15. void Timer0_Init();          //初始化定时器0
  16. void display();              //显示函数
  17. //主函数
  18. void main()
  19. {//端口模式初始化        
  20.         P1M0 = 0x1f;P1M1 = 0x1f; //P1.0~1.4开漏,其余准双向
  21.         P3M0 = 0x00;P3M1 = 0x00; //准双向
  22.         P5M0 = 0x00;P5M1 = 0x00; //准双向
  23.         P_SW2 |= 0x80;           //打开扩展存储器
  24.         Timer0_Init();           //初始化定时器0
  25.         while(1)
  26.         {
  27.                 if(flag)
  28.                 {
  29.                         flag=0;           //周期5ms
  30.                         display();        //显示函数
  31.                         if(++count>=100)  //0.5s
  32.                         {
  33.                                 count=0;
  34.                                 if(++num>199)num=0;
  35.                                 if(num>=100)w1=table[1];
  36.                                 else w1=0x00; //不显示
  37.                                 w2=table[num/10%10];
  38.                                 w3=table[num%10];
  39.                         }
  40.                 }
  41.         }
  42. }
  43. void Timer0_Isr(void) interrupt 1
  44. {
  45.         flag=1;
  46. }
  47. void Timer0_Init(void)                //5毫秒@11.0592MHz
  48. {
  49.         AUXR |= 0x80;           //定时器时钟1T模式
  50.         TMOD &= 0xF0;           //设置定时器模式
  51.         TL0 = 0x00;             //设置定时初始值
  52.         TH0 = 0x28;             //设置定时初始值
  53.         TF0 = 0;                //清除TF0标志
  54.         TR0 = 1;                //定时器0开始计时
  55.         ET0 = 1;                //使能定时器0中断
  56.         EA  = 1;                //使能总中断
  57. }
  58. //数码管显示函数
  59. void display()
  60. {
  61.         static uchar i=0;        
  62.         switch(i)
  63.         {/*************************5位***********4位**********3位**********2位**********1位***********/
  64.                 case 0: dis_buf[0]=(w3>>2&0x10)|(w3>>2&0x08)|(w3>>1&0x04)|(w3<<0&0x02)|(0 /*COM1*/); break;
  65.                 case 1: dis_buf[1]=(w2>>0&0x10)|(w2<<0&0x08)|(w2<<1&0x04)|(0 /*COM2*/)|(w3>>0&0x01); break;
  66.                 case 2: dis_buf[2]=(w2>>1&0x10)|(w2<<1&0x08)|(0 /*COM3*/)|(w2<<1&0x02)|(w3>>2&0x01); break;
  67.                 case 3: dis_buf[3]=(w2>>2&0x10)|(0 /*COM4*/)|(w1<<1&0x04)|(w1>>1&0x02)|(w3>>4&0x01); break;
  68.         }
  69.         P1|=0x1f;               //P1.0~1.4高电平(开漏无输出)
  70.         P1PU=dis_buf[i];        //按位使能上拉电阻提供高电平驱动电流
  71.         P1&=~(0x01<<i);         //按COM位提供低电平共地驱动电流回路,其它位保持开漏高电平
  72.         i=++i%4;                //循环计数
  73. }
复制代码
无标题0123.jpg
无标题321.jpg
2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

54

主题

1481

回帖

3727

积分

超级版主

积分
3727
发表于 2026-9-22 09:36:06 | 显示全部楼层
截图202609220935517394.jpg


什么?8H4K64TL硬件80mA大电流LED数码管自动刷新驱动居然可以8位亮度256种组合?
https://www.stcaimcu.com/thread-6404-1-1.html
(出处: 国芯人工智能技术交流网站)


STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-8 02:49 , Processed in 0.065962 second(s), 45 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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