点阵新玩法!点阵专用驱动芯片HT1632C驱动成功,上传示例代码
HT1632C是合泰该模块采用HT1632C点阵专用芯片驱动,可以驱动32*8或者是24*16点阵,变通使用可以驱动32或48个数码管,无需MCU扫描,不占用MCU资源,16级亮度可调,节省IO的三线/四线接口,使用很方便。下面是我根据资料做的测试板,选择32*8模式驱动4个8*8点阵http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_466096.jpg
正面
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_466097.jpg
背面
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_466098.jpg
显示效果
原理图点击此处下载 ourdev_466099.pdf(文件大小:26K) (原文件名:HT1632C.pdf)
原理图说明:预留有ATMEGA8单片机,AVR USB电路,使用贴片mini USB座,蜂鸣器,18B20温度传感器接口,LED测光接口,红外接收头接口,三个独立按键,AD输入可测电源电压,即使板子上不接MCU也可由外部MCU驱动,可以作为一个单独的显示模块,可方便的做二次开发。
HT1632C手册点击此处下载 ourdev_466100.pdf(文件大小:239K) (原文件名:1632cv100.pdf)
GCC源码点击此处下载 ourdev_466101.rar(文件大小:7K) (原文件名:HT1632C测试程序.rar)
厂家资料下载:http://www.holtek.com.cn/china/docum/consumer/1632c.htm 广告位出租 光看不顶,是不是现在玩点阵过时了~./emotion/em004.gif./emotion/em004.gif 好东东 最近也在弄这个 有机会可以和LZ交流一下 嘿嘿 LZ多帮忙 搞一个来做电子钟不错 成本肯定比595高
用595:控制器成本高一点,单元板成本低一点。
HT1632C:单元板成本高一点,控制器成本低一点。
背着扛着一般沉, 不过如果做的面积比较大,估计还是595合算。 HT1632C驱动点阵不需要三极管或MOS管只需要限流电阻就可以了,最多可以驱动16*24个点的点阵(1.5个汉字),而HT1632C的价格不到5元RMB(零售),占用3个IO。如果用595+138(或154)方案,驱动16*24的点阵则需要两个138(或一个154),3个595,16个三极管或MOS管,若干电阻(三极管基极限流,595输出接点阵限流),这几个IC和三极管批量价格也许也可以做到5元以内,但是电路复杂度增加,MCU负担增加,需要不停地扫描显示,占用MCU 4+3个IO,对系统要求也增加,如果需要做其他任务只有提高时钟。
如果做广告牌需要显示更多的汉字,595方案不会增加IO口,但是显示汉字越多系统时钟就越高,否则就闪了。或者是在系统时钟不变的情况下分屏扫描。如果需要调节亮度程序会更复杂。
如果使用HT1632C方案,4+3个IO通过154译码可以得到16个CS选通16个芯片,则可以显示的汉字个数为16*1.5=24个,而对MCU要求不高,普通51即可胜任,显示稳定,亮度可以16级调节。
变通使用HT1632C可以驱动最多48个数码管,外围也仅仅需要24个电阻而已。
如果是要驱动显示更多汉字的条屏如大屏幕显示的话一般使用FPGA了。个人认为HT1632C驱动点阵或者数码管是个不错的选择 mark 记号 学习一下 【6楼】 little Monkey
如果是要驱动显示更多汉字的条屏如大屏幕显示的话一般使用FPGA了。
只是控制用FPGA而已..屏的驱动还是595 记号 看样子不错嘛,顶一个 不知可否连级使用? 可以通过选通CS来选通不同的芯片,这样可以只更新需要更新的现实而不需要刷新全部显示内容,手册上有详细的使用方法的啊 这个方法不错啊!到时候买一套玩玩! 这个可以单独控制每个led的16级亮度么 看了下似乎没办法实现单独控制阿,内存只有96*4bit..... 是整体控制的,包括闪烁也不能指定区域,如果可以就太爽了 mark 不错 看过LZ的程序 大体的驱动能够了解 但还是有点不明白的地方
1 从右至左定义8*8点阵为0,1,2,3号点阵 为什么是从右向左的数 那怎样去映射到HT1632的内存中
2 对于字模软件的取模方式和取模走向不是很了解 那硬件就不知道怎样去连接到LED板上去 软件也不知道怎样去做字模 就迷茫了 因为我使用的点阵阴极是选列的(不知道叫共阴还是共阳^_^)按注释说明放置的时候,从做到右每个点阵的列选分别是COM0~COM7,SEG0在最右边,所以取模方式为横向取模,至于高位在前还是低位在前送数据的时候可以改变的,为了省事共用一个发送数据函数,即函数发送时是高位在前的,HT1632C数据是先送低位的,所以我们的高位实际上是送到了低位,即D7~D4送到了D0~D3。由于每个地址上的数据是4位的,送数据比较麻烦,所以程序里面都是直接指定地址连续送数据,开了一个32byte的显示缓冲区放整屏数据,数据处理好后把32字节连续送出就可以了。因为HT1632C会自己去刷新显示,所以程序里面是500ms才送一次数据,兼顾了冒号的闪烁,如果冒号不需要闪烁,在每次分钟改变的时候才送数据的^_^,
以下函数实现冒号闪烁
if(temp_flag!=colon) //500ms显示一次
{
temp_flag=colon;
if(temp_flag)
{
for(i=0;i<8;i++)temp=tab;
for(i=0;i<8;i++)temp=(tab>>1);
for(i=0;i<8;i++)temp=(tab<<1);
for(i=0;i<8;i++)temp=tab;
}
else
{
for(i=0;i<8;i++)temp=tab;
for(i=0;i<8;i++)temp=(tab>>1)|(((0x66<<i)&0x80));
for(i=0;i<8;i++)temp=tab<<1|(((0x66>>i)&0x01));
for(i=0;i<8;i++)temp=tab;
}
实际测试,电压5V时,最低亮度下显示00:00时电流26.5mA,最高亮度下为310mA,M8时钟为内部1M。实际上我一直调到最低亮度,晚上一直嫌它太亮了,而白天也可以看得很清楚的^o^ 今天刚写了上移下移函数,以下函数替换连续发送数据函数即可,不过由于间隔只有50ms显得太快了,呵呵~
/* HT1632C_clr(); //从上往下显示
for(i=0;i<8;i++)
{
for(j=0;j<4;j++)
HT1632C_Writer_DATA(0x10*j+2*i,temp);
_delay_ms(50);
}*/
// for(i=0;i<32;i++)temp=tab;
/* HT1632C_clr(); //从下往上显示
for(i=0;i<8;i++)
{
for(j=0;j<4;j++)
HT1632C_Writer_DATA(0x10*j+2*(7-i),temp);
_delay_ms(500);
}*/ 好贴,好芯片,找了好久,终于被我找到了,http://item.taobao.com/auction/item_detail.jhtml?item_id=6ff10b10a71c3410e092e8131fce1d54&x_id=0db2,买了几片,试了不错. 正好需要,感谢。。。 好东东, 最近也在弄这个,谢谢 看了LZ的介绍 我的理解是
四块LED屏 按注释说明放置 也就是那个显示03:03的方向 从右向左分别是0 1 2 3
第0块点阵 从左向右的列选分别是COM0~COM7 从上到下为SEG0~SEG7
第1块点阵 从左向右的列选分别是COM0~COM7 从上到下为SEG8~SEG15
第2块点阵 从左向右的列选分别是COM0~COM7 从上到下为SEG16~SEG23
第3块点阵 从左向右的列选分别是COM0~COM7 从上到下为SEG24~SEG31
不知道是不是这样 因为这关系到硬件的连接 所以跟楼主确认下 LZ的闪烁程序如果我采用从左向右分别是0 1 2 3的话 就应该这样写 是不是
if(temp_flag!=colon) //500ms显示一次
{
temp_flag=colon;
if(temp_flag)
{
for(i=0;i<8;i++)temp=tab;
for(i=0;i<8;i++)temp=(tab<<1);
for(i=0;i<8;i++)temp=(tab>>1);
for(i=0;i<8;i++)temp=tab;
}
else
{
for(i=0;i<8;i++)temp=tab;
for(i=0;i<8;i++)temp=(tab<<1)|(((0x66>>i)&0x01));
for(i=0;i<8;i++)temp=tab>>1|(((0x66<<i)&0x80));
for(i=0;i<8;i++)temp=tab;
}
LZ为什么要设计成从右向左为0 1 2 3 平常的想法都是从左向右的所以在刚刚开始的时候就很理解不清楚 后来等LZ讲解了字模字模以后就清楚多了 说声多谢 呵呵 本来我是一点都不懂的 看了LZ的东西才有点不迷糊了哈哈
LZ有没有什么联系方式可以留一下 我的qq是40381386 因为最近都在弄这个 希望能向楼主多请教请教 MARK LZ上面的上移下移函数 我的理解是从上到下一行行的显示出来 不是那种推箱子一样的推的过程
根据楼主的程序 弄了一个从上到下推出来 一直推下去 直到看不见的程序
for( i = 0 ; i < 8 ; i++ )
{
for( j = i ; j >= 0 ; j-- )
for( k = 0 ; k < 4 ; k++ )
HT1632C_Writer_DATA( 0x10 * k + 2 * j , temp );
_delay_ms( 50 );
}
for( i = 1 ; i < 8 ; i++ )
{
for( m = 0 ; m < i ; m++ )
for( k = 0 ; k < 4 ; k++ )
HT1632C_Writer_DATA( 0x10 * k + 2 * m , 0x00 );
for( j = m ; j < 8 ; j++ )
for( k = 0 ; k < 4 ; k++ )
HT1632C_Writer_DATA( 0x10 * k + 2 * j , temp );
_delay_ms( 50 );
}
HT1632C_clr();
不知道对不对请多指点指点 另外LZ如果把COM口设置成纵向的话 有没有左移和右移的程序 还有几块HZ1632级联的程序
能否分享下 呵呵 刚刚才接触这个片子 所以拜托大侠了哈哈 LZ的字体用的是哪种 我用5*8的所有字体都用过 都没有LZ的那样好的效果 hoho 说实话,推箱子那样慢慢出来再一行行消失的我在写,呵呵,有时候人有点懒总不想写,呵呵,如果COM选行的当然好了,左移右移就太简单了!可是我买的点阵不是这样的所以没办法就这样用了,这样接法就是上下移动很方便,呵呵~
我用的字体是6*8的,左右各空一列,我这里还有几十块空板,有兴趣一起玩玩,还想写个根据环境光调节亮度的, 顶,正准备搞32*64的点阵 多片级联选通不同的CS就行了,多余3片用译码器会省IO ,呵呵~~ 感觉这个芯片如果驱动列是正 行是负的点阵就好了 对于双色共阳点阵 使用这个芯片 总感觉有点别扭 留底 有点意思 mark mark 不错的东西 好东西值得用 记号 做小的笔段式显示,比如7位8段的数码管,用天微的芯片,很多不到1¥的价格,比任何分立器件方便便宜。 mark 2. mark mark up 不错 多片级联效果不好说,如果是N片级联的话,是不是片选信号的走线需要走N*L(点阵的长度),好像不可取! 级联都会有LS说的问题,即使是用595的方式,OE走线也要走那么长的 记号~~ 下载看看 记号 记号
HT1632C MARK mark
支持楼主 在下新人 刚买了个8*8点阵回家玩~研究过后再来拜访! 几记号,能驱动的点阵太少点了吧,感觉前景不是很好 http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_531329.jpg
(原文件名:32.jpg) ding mark一下 MARK 用MAX7219更贵~~~~ 做个记号 ding XX哈哈 UP,还有板子送不 MARK!! mark下,谢谢 mark mark!~ 谢谢,楼主。顶起来! mark 记号,这个只能点亮8*32的点阵吗,如果要点亮更多的呢?? mark 回复【75楼】danielmi 俊俊
记号,这个只能点亮8*32的点阵吗,如果要点亮更多的呢??
-----------------------------------------------------------------------
多用几片 MARK 我的和LZ的一样,这个家伙有嗡嗡的噪声,听的很是难受,不知道怎么解决? 芯片会有噪声?奇怪了,没有发现啊。 MARK 回复【79楼】marshallemon
-----------------------------------------------------------------------
我用PC机供电时也有那个噪声,当用小5V变压器给它供电时没有,估计是滤波问题 谢谢楼主分享资料,学习中 mark mark! 本帖最后由 kbgyzp 于 2012-6-21 17:10 编辑
好奇怪啊,用手机回复的在电脑上一看内容是空白的 mark markmarkmark 我用这个芯片怎么初始化完就全显了,还没送显呢啊,而且大循环中的定时刷屏操作对它不管用。感觉初始化完ht1632c就死了,调试一天也没解决,郁闷。
他的nmos和pmos选项是设定共阴和共阳的吧,我都试了,这两个选项设定了其中一个,对应是全亮,设定另一个对应的是全灭,可是后边的刷屏更新显存根本不管用。我以前用过ht1623液晶的驱动芯片,这两个芯片的操作基本一
,我也试过楼主的驱动代码,应该不是软件的问题,也看过楼主的接线,但就是调不通。暂时没招了
是不是没加去耦电容的缘故呢?不过我看很多ht1632c的电路都没有加的,人家的就没事。 不错。好哦东西 HT1632C中文资料有没有? 有空试试 不知小猴子能不能看到这个回复,论坛不然我加好友,也无法发私信,只好发在这里了。
我用10片ht1632c级联(2416方式)做成的大屏 在滚动显示汉字的时候,会偶尔有汉字(或某个汉字的某一列)上下抖动一下。 不明原因。。求破 michrome 发表于 2014-5-13 16:41
不知小猴子能不能看到这个回复,论坛不然我加好友,也无法发私信,只好发在这里了。
我用10片ht1632c级联( ...
我也在调试点阵,24*16的,3片HT1632,但现在写一个数据,下面三个点阵上显示三列,不知道是不是点阵连接有问题,求经验 zhanglang660 发表于 2014-10-15 09:45
我也在调试点阵,24*16的,3片HT1632,但现在写一个数据,下面三个点阵上显示三列,不知道是不是点阵连接 ...
我的已经没有问题了. 原因级联时 把时钟外部输入时钟也连在一起了.断开就好了 michrome 发表于 2014-10-15 10:56
我的已经没有问题了. 原因级联时 把时钟外部输入时钟也连在一起了.断开就好了 ...
时钟是不是应该级联在一块呢,都使用自己内部的时钟,一块设置为Master,其余的设置为Slave,我看芯片手册上是这么连接的,我目前设置的也是这样连接的!上午的问题查出来是点阵行列信号搞混了 michrome 发表于 2014-10-15 10:56
我的已经没有问题了. 原因级联时 把时钟外部输入时钟也连在一起了.断开就好了 ...
加下您的Q吧,我的564437945 #define SYS_DIS 0x00 //关闭系统震荡
#define SYS_EN 0x01 //打开系统震荡
#define LED_OFF 0x02 //关闭LED显示
#define LED_ON 0x03 //打开LED显示
#define BLINK_OFF 0x08 //关闭闪烁
#define BLINK_ON 0x09 //打开闪烁
#define SLAVE_MODE 0x10 //从模式
#define RC_MASTER_MODE0x18 //内部RC时钟
#define COM_OPTION 0x24 //24*16COM,NMOS。
#define PWM_DUTY 0xA5 //PWM亮度控制 A0->AF对应最暗->最亮
只并联 wr rd data osc和sync悬空 有用,做个记号。驱动能32或48个数码管。顺便问一下有没有能驱动24个数码管而且带按键扫描的? 有用,正在搞LED点阵,谢谢 本帖最后由 lazyboyp 于 2015-5-5 16:46 编辑
请教下楼主,亮度调节更亮后,怎么显示就不稳定了 标记一下。。。。
页:
[1]
2