手上有一台报废机顶盒,拆下显示及控制电路板,研究其电路原理。显示部分是三位共阴数码管,由CT1642驱动。经查阅CT1642数据手册,其内部集成18Bit移位寄存器、恒流驱动,采用CMOS工艺制作,可满足5V和3.3V供电要求。广泛应用于各种家用电器(如机顶盒、DVD播放机)等各种设备的数码显示驱动电路。
CT1642采用串行(CLK、DATA)通信,驱动方式与74HC164芯片相似,不同之处是74HC164为8位数据传送,可联级,CT1642是18位数据传送,可同时传送段码和位码。
CT1642功能图如下:其中Q2-Q9为段码数据,C1-C4为位码数据。
CT1642时序:CLK上升沿依次传送DATA数据,在CLK第18个脉冲后,通过DATA的两个上升沿将数据输出。
研究任务:显示“315”。焊接上Vcc、CLK、DATA、GND四根线,开始编程。
参考程序:
#include <reg52.h>
sbit CLK=P1^1; //时钟
sbit DIO=P1^0; //数据
unsigned char code SEG[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9共阴代码
unsigned char code COM[]={0xfe,0xfd,0xfb}; //位代码,对应CT1642的C1-C3,本例只驱动3位数码管,C4未用到
/**************************************************************************
CT1642写数据函数 [数据结构:段码8位+空码2位+位码8位(共18位)]
**************************************************************************/
void wr_1642(unsigned char seg_dat, unsigned char seg_com)
{
unsigned char i;
unsigned long dat;
dat=(unsigned long)seg_dat<<10 | COM[seg_com]; //整合数据,使之为18位
for(i=0;i<18;i++) //发送18位数据
{
CLK=0 ;
DIO=(dat>>i)&0x01; //右移方式,先发送低位数据
CLK=1; //上升沿移入1位,循环18次
}
CLK=1; //CLK置1
DIO=0; DIO=1; //模拟第1个上升沿
CLK=0; //CLK置0
DIO=0; DIO=1; //模拟第2个上升沿,输出数据
}
/**************************************************************************
主程序
**************************************************************************/
void main()
{
while(1)
{
wr_1642(SEG[3],0); //c1位
wr_1642(SEG[1],1); //c2位
wr_1642(SEG[5],2); //c3位
}
}
|