找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8845|回复: 24
打印 上一主题 下一主题
收起左侧

5脚2位半数码管如何用单片机驱动?

  [复制链接]
跳转到指定楼层
楼主
188类数码管,五个脚位188的数码管如何驱动?

188数码管-XLD-2353R-5 188.pdf

134.65 KB, 下载次数: 260

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:235200 发表于 2019-8-27 18:33 | 只看该作者
只需要5个三极管或类似5个3极管的IC,如ULN2003 74LS245等均可,假设三极管导通提供电源(高电平),截止时电压接近于0(低电平),关键是程序需采用扫描的方式编写,当1脚的三极管导通提供电源时,234脚要控制相应三极管为低电平,此时有3A 3C 3E三段能点亮,如果只需3A一段亮,需控制2脚三极管低电平输出 34脚三极管高电平输出,其它段类似控制,需要把各显示内容做一个真值表,显示时把扫描显示即可
回复

使用道具 举报

板凳
ID:332444 发表于 2019-8-27 18:40 | 只看该作者
16个段引脚看你要如何与蛋骗鸡连接,5个共同端并联即可,段各接限流电阻.用8个IO口驱动或使用16个IO口驱动设计起来就不一样.
回复

使用道具 举报

地板
ID:604162 发表于 2019-8-27 18:44 | 只看该作者
想法是这样,但是点亮数字的时候会被干扰到
回复

使用道具 举报

5#
ID:604162 发表于 2019-8-27 18:52 | 只看该作者
csmyldl 发表于 2019-8-27 18:33
只需要5个三极管或类似5个3极管的IC,如ULN2003 74LS245等均可,假设三极管导通提供电源(高电平),截止时电压 ...

就像要点亮3A 3B时候就出现问题
回复

使用道具 举报

6#
ID:170318 发表于 2019-8-27 21:26 | 只看该作者
共阳端1-5脚作为数码管位,用动态扫描,驱动可用三极管8550;1、2、3、4作为数码管段位
回复

使用道具 举报

7#
ID:604162 发表于 2019-8-28 10:14 | 只看该作者
xianfajushi 发表于 2019-8-27 18:40
16个段引脚看你要如何与蛋骗鸡连接,5个共同端并联即可,段各接限流电阻.用8个IO口驱动或使用16个IO口驱动设 ...

这个只用单片机的5个io口来控制而已1 2 3 4 5 对应的是5个io口,对应的数字是连接在一起的
回复

使用道具 举报

8#
ID:86130 发表于 2019-8-28 10:37 | 只看该作者
LcdDrive_init:
        movlw        00001011b
        andwf        pt1en,1
;        movlw        00000000b
;        andwf        pt5en,1
        clrf        R_Temp1
        clrf        R_Temp2       
       
        movfw        R_LcdDate_Ge
        call        LcdData_Tab0
        btfsc        R_TimeFlag,B_FirstOnMode2
        movlw        FFH
        btfsc        R_TimeFlag,B_Error_En
        movlw        FFH               
        movwf        R_Temp1
       
        movfw        R_LcdDate_Shi
        call        LcdData_Tab0
        btfsc        R_TimeFlag,B_FirstOnMode2
        movlw        FFH
        btfsc        R_TimeFlag,B_Error_En
        movlw        FFH       
        movwf        R_Temp2
       
        btfss        R_LcdDate_Bai,0
        goto        LcdDrive_Deal
        bsf                R_Temp1,7
        bsf                R_Temp2,7
       
LcdDrive_Deal:                                                       
        movfw        R_LcdCom_Cnt
        andlw        00001111b
        addpcw
        goto        LcdDrive_Com1                                   ;1-2        seg - com
        goto        LcdDrive_Com2                                        ;2-1
        goto        LcdDrive_Com3                                        ;1-3
        goto        LcdDrive_Com4                                        ;3-1
        goto        LcdDrive_Com5                                        ;1-4
        goto        LcdDrive_Com6                                        ;4-1
        goto        LcdDrive_Com7                                        ;5-1
        goto        LcdDrive_Com8                                        ;2-3
        goto        LcdDrive_Com9                                        ;3-2
        goto        LcdDrive_Com10                                        ;4-3
        goto        LcdDrive_Com11                                        ;4-2
        goto        LcdDrive_Com12                                        ;5-2
        goto        LcdDrive_Com13                                        ;5-3
        goto        LcdDrive_Com14                                        ;5-4
        goto        LcdDrive_Com15                                        ;3-4
        goto        LcdDrive_Com16                                        ;2-4
       
LcdDrive_Com1:                                               
        btfss        R_Temp1,6
        return
        call        Set_Seg1
        call        Set_Com2       
        return
       
LcdDrive_Com2:                                                       
        btfss        R_Temp1,5
        return
        call        Set_Seg2
        call        Set_Com1       
        return
       
LcdDrive_Com3:                                                       
        btfss        R_Temp1,4
        return
        call        Set_Seg1
        call        Set_Com3       
        return
       
LcdDrive_Com4:                                                       
        btfss        R_Temp1,3
        return
        call        Set_Seg3
        call        Set_Com1       
        return
       
LcdDrive_Com5:                                                       
        btfss        R_Temp1,2
        return
        call        Set_Seg1
        call        Set_Com4       
        return
       
LcdDrive_Com6:                                                       
        btfss        R_Temp1,1
        return
        call        Set_Seg4
        call        Set_Com1       
        return       
       
LcdDrive_Com7:                                                       
        btfss        R_Temp1,0
        return
        call        Set_Seg5
        call        Set_Com1       
        return
       
LcdDrive_Com8:                                                       
        btfss        R_Temp2,6
        return
        call        Set_Seg2
        call        Set_Com3       
        return
       
LcdDrive_Com9:                                                       
        btfss        R_Temp2,5
        return
        call        Set_Seg3
        call        Set_Com2       
        return
       
LcdDrive_Com10:                                                       
        btfss        R_Temp2,4
        return
        call        Set_Seg4
        call        Set_Com3       
        return
       
LcdDrive_Com11:                                                       
        btfss        R_Temp2,3
        return
        call        Set_Seg4
        call        Set_Com2       
        return
       
LcdDrive_Com12:                                                       
        btfss        R_Temp2,2
        return
        call        Set_Seg5
        call        Set_Com2       
        return
       
LcdDrive_Com13:                                                       
        btfss        R_Temp2,1
        return
        call        Set_Seg5
        call        Set_Com3       
        return
       
LcdDrive_Com14:                                                       
        btfss        R_Temp2,0
        return
        call        Set_Seg5
        call        Set_Com4       
        return
       
LcdDrive_Com15:                                                       
        btfss        R_Temp2,7
        return
        call        Set_Seg3
        call        Set_Com4       
        return
       
LcdDrive_Com16:                                                       
        btfss        R_Temp1,7
        return
        call        Set_Seg2
        call        Set_Com4       
        return       
       
Set_Seg1:
        bsf                PT_Seg1,P_Seg1               
        bsf                PT_Seg1_En,P_Seg1
        return
       
Set_Seg2:
        bsf                PT_Seg2,P_Seg2               
        bsf                PT_Seg2_En,P_Seg2
        return
       
Set_Seg3:
        bsf                PT_Seg3,P_Seg3               
        bsf                PT_Seg3_En,P_Seg3
        return       
       
Set_Seg4:
        bsf                PT_Seg4,P_Seg4               
        bsf                PT_Seg4_En,P_Seg4
        return
       
Set_Seg5:
        bsf                PT_Seg5,P_Seg5               
        bsf                PT_Seg5_En,P_Seg5
        return
       
Set_Com1:
        bcf                PT_Com1,P_Com1
        bsf                PT_Com1En,P_Com1
        return       
       
Set_Com2:
        bcf                PT_Com2,P_Com2
        bsf                PT_Com2En,P_Com2
        return       
       
Set_Com3:
        bcf                PT_Com3,P_Com3
        bsf                PT_Com3En,P_Com3
        return       
       
Set_Com4:
        bcf                PT_Com4,P_Com4
        bsf                PT_Com4En,P_Com4
        return
       
LcdData_Tab0:
        andlw        0fh
        addpcw
        retlw        01111110B        ;0
        retlw        00110000B        ;1
        retlw        01101101B        ;2
        retlw        01111001B        ;3
        retlw        00110011B        ;4
        retlw        01011011B        ;5
        retlw        01011111B        ;6
        retlw        01110000B        ;7
        retlw        01111111B        ;8
        retlw        01111011B        ;9
        retlw        01111011B        ;9
        retlw        01111011B        ;9
        retlw        01111011B        ;9
        retlw        01111011B        ;9
        retlw        01111011B        ;9
        retlw        01111011B        ;9
回复

使用道具 举报

9#
ID:604162 发表于 2019-8-28 14:08 | 只看该作者
天涯落客 发表于 2019-8-28 10:37
LcdDrive_init:
        movlw        00001011b
        andwf        pt1en,1

这汇编看得一头雾水
回复

使用道具 举报

10#
ID:604162 发表于 2019-8-28 15:28 | 只看该作者
Mgc666 发表于 2019-8-28 14:08
这汇编看得一头雾水

有没有C的的提示?
回复

使用道具 举报

11#
ID:612920 发表于 2020-3-17 15:34 | 只看该作者
可以咨询数码管的生产厂家 深圳市新亮点电子有限公司,有完整的驱动方案
回复

使用道具 举报

12#
ID:612920 发表于 2020-3-17 15:34 | 只看该作者
可以联系数码管的驱动厂家 深圳市新亮点电子有限公司,他们有完整的驱动方案
回复

使用道具 举报

13#
ID:733801 发表于 2020-4-20 21:52 | 只看该作者
C:\Users\sj\Desktop\asd.png
u16 w1Tab[2]={0x0000,0x0480};
u16 w2Tab[10]={0x0936,0x0110,0x0925,0x0931,0x0113,0x0833,0x0837,0x0910,0x0937,0x0933};
u16 w3Tab[10]={0xf240,0x5000,0xb208,0xd208,0x5048,0xc248,0xe248,0xd000,0xf248,0xd248};
u8  ywTab[16]={1,2,3,0,2,3,0,1,3,0,1,2,0,1,2,3};
u8  stp=0;


void display(u8 dt)
{
  u8 odt;
        u16 dm = w1Tab[dt/100]|w2Tab[(dt%100)/10]|w3Tab[dt%10];
        if(stp>=16)stp=0;
        odt = 0x1f & (~((((dm&(0x0001<<(15-stp)))==(0x0001<<(15-stp)))?1:0)<<ywTab[stp]));                
  GPIOA->BSRR =((((u32)(~odt))<<16)|(u32)(odt));
        stp++;
}
回复

使用道具 举报

14#
ID:733801 发表于 2020-4-20 21:58 | 只看该作者
来个精简版的
u16 w1Tab[2]={0x0000,0x0480};
u16 w2Tab[10]={0x0936,0x0110,0x0925,0x0931,0x0113,0x0833,0x0837,0x0910,0x0937,0x0933};
u16 w3Tab[10]={0xf240,0x5000,0xb208,0xd208,0x5048,0xc248,0xe248,0xd000,0xf248,0xd248};
u8  ywTab[16]={1,2,3,0,2,3,0,1,3,0,1,2,0,1,2,3};
u8  stp=0;


void display(u8 dt)
{
  u8 odt;
  u16 dm = w1Tab[dt/100]|w2Tab[(dt%100)/10]|w3Tab[dt%10];
  if(stp>=16)stp=0;
  odt = 0x1f & (~((((dm&(0x0001<<(15-stp)))==(0x0001<<(15-stp)))?1:0)<<ywTab[stp]));                
  GPIOA->BSRR =((((u32)(~odt))<<16)|(u32)(odt));
  stp++;
}

asd.png (38.46 KB, 下载次数: 81)

asd.png
回复

使用道具 举报

15#
ID:311661 发表于 2020-4-22 14:42 | 只看该作者
jacks888 发表于 2020-4-20 21:58
来个精简版的
u16 w1Tab[2]={0x0000,0x0480};
u16 w2Tab[10]={0x0936,0x0110,0x0925,0x0931,0x0113,0x083 ...

很不错的分享,慢慢研究一下
回复

使用道具 举报

16#
ID:261473 发表于 2020-10-30 17:15 | 只看该作者
jacks888 发表于 2020-4-20 21:58
来个精简版的
u16 w1Tab[2]={0x0000,0x0480};
u16 w2Tab[10]={0x0936,0x0110,0x0925,0x0931,0x0113,0x083 ...

u16 w1Tab[2]={0x0000,0x0480};
u16 w2Tab[10]={0x0936,0x0110,0x0925,0x0931,0x0113,0x0833,0x0837,0x0910,0x0937,0x0933};
u16 w3Tab[10]={0xf240,0x5000,0xb208,0xd208,0x5048,0xc248,0xe248,0xd000,0xf248,0xd248};
u8  ywTab[16]={1,2,3,0,2,3,0,1,3,0,1,2,0,1,2,3};
解释一下
回复

使用道具 举报

17#
ID:92781 发表于 2024-7-2 16:02 | 只看该作者
wangshouyun001 发表于 2020-10-30 17:15
u16 w1Tab[2]={0x0000,0x0480};
u16 w2Tab[10]={0x0936,0x0110,0x0925,0x0931,0x0113,0x0833,0x0837,0x0 ...

u16 w1Tab[2]={0x0000,0x0480};   //第一位0,1
u16 w2Tab[10]={0x0936,0x0110,0x0925,0x0931,0x0113,0x0833,0x0837,0x0910,0x0937,0x0933};//第二位0-9
u16 w3Tab[10]={0xf240,0x5000,0xb208,0xd208,0x5048,0xc248,0xe248,0xd000,0xf248,0xd248}; //第三位0-9
u8  ywTab[16]={1,2,3,0,2,3,0,1,3,0,1,2,0,1,2,3};//移位
回复

使用道具 举报

18#
ID:1125252 发表于 2024-7-17 18:56 | 只看该作者
jjy1039 发表于 2024-7-2 16:02
u16 w1Tab[2]={0x0000,0x0480};   //第一位0,1
u16 w2Tab[10]={0x0936,0x0110,0x0925,0x0931,0x0113,0x0 ...

没用过动态的,请教下,如果我用的IO脚不同的话,这个真值表需要变更吗?
回复

使用道具 举报

19#
ID:811253 发表于 2024-7-18 22:45 | 只看该作者
这个跟普通的4*8一样的驱动原理,4*8就是一次点亮一个8,而这种一次只是点亮一笔,即一个LED,利用快速扫瞄显出一个个8字。只要扫完一周的频率大于60HZ基本人眼就看不到闪烁了。
回复

使用道具 举报

20#
ID:811253 发表于 2024-7-18 22:47 | 只看该作者
每次只能有两个I0做输出,一个输出高,一个输出低,另外的不用全做高阻输入状态,这样其它不相关的LED就会不被点亮。
回复

使用道具 举报

21#
ID:621063 发表于 2024-7-20 08:28 | 只看该作者
这个对单片机有要求。普通数码管,是一位一位的扫描;这个是一段一段的扫描,且只能有一段,其它脚要为高阻态。
回复

使用道具 举报

22#
ID:1034262 发表于 2024-7-20 11:08 | 只看该作者
Mgc666 发表于 2019-8-27 18:44
想法是这样,但是点亮数字的时候会被干扰到

大量的移动电源使用,不会有问题的,看我下面的驱动描述。
回复

使用道具 举报

23#
ID:1034262 发表于 2024-7-20 11:09 | 只看该作者
Mgc666 发表于 2019-8-27 18:52
就像要点亮3A 3B时候就出现问题

大量的移动电源使用,不会有问题的,看我下面的驱动描述。
回复

使用道具 举报

24#
ID:1034262 发表于 2024-7-20 11:17 | 只看该作者
本帖最后由 coody_sz 于 2024-7-21 21:04 编辑

说显示有问题的朋友,可能没有编程驱动过。
大量的移动电源使用,不会有问题的。
楼主的这个比较好驱动,最简单的是5脚输出高电平,1~4脚输出低就能控制4个。
5脚输出高阻或低电平,则1~4脚轮流有一个输出高,其余3个要显示就输出低,不显示就高阻。
其实这是分时驱动共阴、共阳的接法,比如8个SEGMENT和8个COMMENT就可以驱动16个数码管,即16个IO驱动16个数码管,很常用的接法,一些MCU直接支持,比如STC8H4K64TL的24个IO就可以驱动32个数码管256段。
早几天我刚好买了一些无线话筒的显示模块,7个IO显示40段(最多可以42段)。


回复

使用道具 举报

25#
ID:43600 发表于 2024-7-21 19:14 | 只看该作者
很多情況下,一次點亮數個LED,只能專用,用途受限。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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