搜索
bottom↓
回复: 8

求TM1628共阳驱动

[复制链接]

出0入0汤圆

发表于 2016-3-31 19:08:35 | 显示全部楼层 |阅读模式
以前一直用的TM1628来驱动共阴数码管,最近一项目需要驱动共阳,不知道那里应该调整下,现在还没有显示过;下面是驱动
#include "tm1628.h"

void send_8bit(u8 dat)
{
        u8 i;
        for(i=0;i<8;i++){
                if(dat&0x01)
                        TM_dio = 1;
                else
                        TM_dio = 0;
                TM_clk = 0;
                nop();
                nop();
                nop();
                nop();
                nop();
                nop();
                TM_clk = 1;
                nop();
                nop();
                nop();
               
                dat = dat>>1;
        }
}
void command(u8 com)
{
        TM_stb = 1;
        TM_stb = 0;
        send_8bit(com);
}

void delay_ms(u16 x)//廷时1ms*x
{
    u16 a,b;
    for(b=x;b>0;b--)
    for(a=125;a>0;a--);
}
void delayus(void)
{
        ;
}//延时4us
void WR_TM1628_Byte(u8 TM_dat)
{
    u8 i;
    for(i=0;i<8;i++)
    {
        TM_dio=(TM_dat&0x01);//强制转成:位,低位先发送
        TM_clk=0;//---------|
        TM_dat>>=1;//-------|
        TM_clk=1;//---------|___|----/上升沿有效
    }
}

void Wr_TM_CMD(u8 TMcmd)
{
    TM_stb=0;//片选,0有效
    WR_TM1628_Byte(TMcmd);
    TM_stb=1;//片选,0有效
    TM_dio=1;
}

void TM1628_clear_display(void)
{
       
        Wr_TM_CMD(0x03);//显示模式
        Wr_TM_CMD(0x40);//地址自动加一
       

        TM_stb=0;//片选,0有效
        WR_TM1628_Byte(0xc0);//地址0开始
       
       
        WR_TM1628_Byte(0x00);
        WR_TM1628_Byte(0x00);//第一个8
       
        WR_TM1628_Byte(0x00);
        WR_TM1628_Byte(0x00);//第二个8加传感器启动中
       
        WR_TM1628_Byte(0x00);
        WR_TM1628_Byte(0x00);
       
        WR_TM1628_Byte(0x00);
        WR_TM1628_Byte(0x00);
       
        WR_TM1628_Byte(0x00);
        WR_TM1628_Byte(0x00);
       
        WR_TM1628_Byte(0x00);
        WR_TM1628_Byte(0x00);
               
        WR_TM1628_Byte(0x00);
        WR_TM1628_Byte(0x00);
       
        TM_stb=1;//片选,0有效

        Wr_TM_CMD(0x8f);//送亮度指令
}
void TM1628_all_display(void)
{
       
        Wr_TM_CMD(0x03);//显示模式
        Wr_TM_CMD(0x40);//地址自动加一
       

        TM_stb=0;//片选,0有效
        WR_TM1628_Byte(0xc0);//地址0开始
       
       
        WR_TM1628_Byte(0xff);
        WR_TM1628_Byte(0xff);//第一个8
       
        WR_TM1628_Byte(0xff);
        WR_TM1628_Byte(0xff);//第二个8加传感器启动中
       
        WR_TM1628_Byte(0xff);
        WR_TM1628_Byte(0xff);
       
        WR_TM1628_Byte(0xff);
        WR_TM1628_Byte(0xff);
       
        WR_TM1628_Byte(0xff);
        WR_TM1628_Byte(0xff);
       
        WR_TM1628_Byte(0xff);
        WR_TM1628_Byte(0xff);
               
        WR_TM1628_Byte(0xff);
        WR_TM1628_Byte(0xff);
       
        TM_stb=1;//片选,0有效

        Wr_TM_CMD(0x8f);//送亮度指令
}
void TM1628_display(u8 addr,u8 dat)
{
        Wr_TM_CMD(0x03);//显示模式
        Wr_TM_CMD(0x44);//地址自动加一
        TM_stb=0;//片选,0有效
       
        WR_TM1628_Byte(addr);//地址0开始
       
        WR_TM1628_Byte(dat);

        TM_stb=1;//片选,0有效

        Wr_TM_CMD(0x8f);//送亮度指令
}
void TM1628_init(void)
{
        GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_SLOW);
        GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_SLOW);
        GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_SLOW);
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2016-4-1 00:36:34 | 显示全部楼层
对芯片来说,没有共阴共阳,全 当成LED,共阴共阳只是排列方式不同而已,手册里面就有电路

出0入0汤圆

发表于 2016-4-1 09:08:20 | 显示全部楼层
芯片定死了,“▲注意:SEG1-11为P管开漏输出,GRID1-7为N管开漏输出,在使用时候,SEG1-11只能接LED的阳极,GRID只能接LED的阴极,不可反接。”

1,换芯片;2,改电路,程序也要改;

出0入0汤圆

 楼主| 发表于 2016-4-1 09:15:42 | 显示全部楼层
xiaowu191 发表于 2016-4-1 09:08
芯片定死了,“▲注意:SEG1-11为P管开漏输出,GRID1-7为N管开漏输出,在使用时候,SEG1-11只能接LED的阳极 ...



原理图如上

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2016-4-1 09:36:04 | 显示全部楼层
有些芯片驱动共阳性能会下降,需要仔细看一下芯片驱动能力说明,话说共阴共阳数码管价格不是一样吗,干嘛要换共阳?我电路里的共阳已全部统一成共阴了,减少物料品类。

出0入0汤圆

发表于 2016-4-1 09:57:58 | 显示全部楼层
是共阳接法了;

芯片的扫描方式是固定的,共阴接法时是我们正常想法,这时是位扫描;
你换换成共阴的,GRIDn接到了数码管的段,就是段扫描了,取模方式不一样了;
看看芯片手册,http://wenku.baidu.com/view/98d6b96db84ae45c3b358cc6.html?re=view

这些更有趣
http://www.amobbs.com/thread-5645884-1-1.html
http://www.amobbs.com/thread-5642605-1-1.html

出0入4汤圆

发表于 2016-4-3 03:02:21 | 显示全部楼层
好久以前做过,我是把1286的led阵列设置成x11y14,然后将每个led的数据做成2维数组,写显示数据时是将要写的数据逐一写入
i=14; j=0;
        while(i--)
        { th1628write18bit (m1a0[dam1][j]|m2a0[dam2][j]|m3a0[dam3][j]|m4a0[dam4][j]); j++;//这是一个4位的数码管,所以只用了4位
         
        }//写显示数据
j=14就是14行阵列,dam1-dam4分别是千位到个位数,m1a0[dam1][j]|m2a0[dam2][j]|m3a0[dam3][j]|m4a0[dam4][j]就是这2维数据与后写到寄存器的数据,供阳的一定要将14个寄存器全部写完才能正确显示的,

出0入0汤圆

发表于 2016-4-4 01:00:26 来自手机 | 显示全部楼层
这个其实不难,我做过,SEG接COM,COM接SEG。程序上处理一下就可以。这是基本功,这个都不想花时间去探索的话就别干这行了。

出0入50汤圆

发表于 2016-4-4 20:59:56 | 显示全部楼层
本帖最后由 ilikemcu 于 2016-4-4 21:02 编辑

理论上可行,但是实际有用TM1628设计的驱动对象,就是共阴的数码管,如果你硬是用来驱动共阳的管子,因为受限于芯片自身的驱动方式(是位轮流扫描的),你能驱动的数码管亮度会比较低,因为SEG驱动能力只有50mA,而grid有200mA,如果是小尺寸的数码管,可以试试,如果大尺寸的,就不好办了。

补充:另外这个芯片最大驱动是10段×7位,如果你用来驱动共阳数码管,那小数点就没法驱动了,管脚不够。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 17:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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