独闷闷网

 找回密码
 立即注册
搜索
查看: 6979|回复: 2
打印 上一主题 下一主题
收起左侧

[原创] TM1629数码管驱动芯片玩法分享

[复制链接]
跳转到指定楼层
楼主
发表于 2015-3-8 23:46:02 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本帖最后由 电子Inc 于 2015-3-8 23:53 编辑

     在平常驱动数码管,我都喜欢直接用三极管动态,或者595级联驱动的,但是,前者浪费IO,而且动态扫描占用定时中断,后者虽然级联起来IO浪费得到解决,而且程序也简单,但是芯片
数量增加,无疑增加了成本,这里,我们喜欢用数码管驱动芯片,项目用到的是TM1629,今天,我们就以TM1629为例子来跟大家一起玩耍玩耍。
     首先,TM1629是天微的一款数码管驱动芯片,能够驱动8位15段的共阴数码管,仅用3个IO,布线简单,占用IO资源少,是很好用的一款芯片,但是,我们平常用到的都是8段的数码管,而
TM1629可以驱动15段,这样,剩下的就比较浪费了,那么怎么能提高利用率呢,我们采用共阳的接法,就是用TM1629的段来控制共阳数码管的位,TM1629的位来控制共阳数码管的段,这样
我们就可以控制15位8段数码管了。下面,我们谈谈,怎么控制吧。

上图是共阳数码管的接法,然后我们再看看芯片的RAM地址映射图

那么假如是共阴的接法,我们如果再位1数码管输入0x3F,我用2进制列表给给大家看,我们怎么控制显示输出

SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7 SEG8 SEG9 SEG10 SEG11 SEG12 SEG13 SEG14 SEG15 SEG16
  1        1      1        1       1        1      0       0            ....                                                                                GRID1
                                                                               .....                                                                                GRID2
                                                                                                                                                                        ...
                                                                                                                                                                     GRID8
给地址输入0x3f,如果是共阴,就会直接显示这个数据,但是,现在我们是共阳的接法,原来的段变成位,位变成段,那么共阳是如下表输入

SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7 SEG8 SEG9 SEG10 SEG11 SEG12 SEG13 SEG14 SEG15 SEG16
  1                                                                                                                                                                 GRID1
  1                                                                            .....                                                                                GRID2
  1                                                                                                                                                                 GRID3
  1                                                                                                                                                                 GRID4
  1                                                                                                                                                                 GRID5
  1                                                                                                                                                                 GRID6
  0                                                                                                                                                                 GRID7
  0                                                                                                                                                                 GRID8


我们可以发现,这样的输入法,我们相当于把数据90°翻转,那么,我们就可以写这样一个算法来完成了,
假如我们现在已经有底层驱动函数 WriteDat(u8 u8Dat,u8 u8Dat);

  1. void SEG_C_ChangeTo_A( u8 *pBuffer )
  2. {
  3.     u8 TmpBuff[16] = {0};
  4.     u8 i, j, k, x;
  5.     for( i = 0; i< 8; i++ )
  6.     {
  7.         k = 0x01;
  8.         x = 0;
  9.         for( j = 0; j< 8; j++ )
  10.         {
  11.             TmpBuff[x>>= 1];
  12.             if( 0x01 == (*(pBuffer+i) & k))
  13.             TmpBuffer[x] |= 0x80;
  14.             k <<= 1;
  15.             x+= 2;
  16.         }
复制代码
  1.         k = 0x01;
  2.         x = 1;
  3.         for( j = 0; j< 8; j++ )
  4.         {
  5.             TmpBuff[x>>= 1];
  6.             if( 0x01 == (*(pBuffer+i+8) & k))
  7.             TmpBuffer[x] |= 0x80;
  8.             k <<= 1;
  9.             x+= 2;
  10.         }
  11. for( i = 0; i<16; i++ )
  12. WriteDat( 0xc0+i, TmpBuff[i] );
  13. }
复制代码

完毕,感谢宝贵的时间看帖,如有问题,请多提,如有砖,请多拍!
                       
乐于分享,勇于质疑!
板凳
发表于 2015-3-9 15:34:42 | 只看该作者
感谢分享。辛苦了。
乐于分享,勇于质疑!
沙发
发表于 2015-3-9 10:58:25 | 只看该作者
厉害{:soso__3110130392203091378_3:}
乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-11-29 22:52 , Processed in 0.216216 second(s), 21 queries .

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