TM1629数码管驱动芯片玩法分享
本帖最后由 电子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);
void SEG_C_ChangeTo_A( u8 *pBuffer )
{
u8 TmpBuff = {0};
u8 i, j, k, x;
for( i = 0; i< 8; i++ )
{
k = 0x01;
x = 0;
for( j = 0; j< 8; j++ )
{
TmpBuff;
if( 0x01 == (*(pBuffer+i) & k))
TmpBuffer |= 0x80;
k <<= 1;
x+= 2;
} k = 0x01;
x = 1;
for( j = 0; j< 8; j++ )
{
TmpBuff;
if( 0x01 == (*(pBuffer+i+8) & k))
TmpBuffer |= 0x80;
k <<= 1;
x+= 2;
}
for( i = 0; i<16; i++ )
WriteDat( 0xc0+i, TmpBuff );
}
完毕,感谢宝贵的时间看帖,如有问题,请多提,如有砖,请多拍!
厉害{:soso__3110130392203091378_3:} 感谢分享。辛苦了。
页:
[1]