TM1650芯片驱动四位数码管
SCL:IIC的时钟线
SDA:IIC的数据线
DIGx:每个数码管的总开关,不开,怎么搞也不会亮滴,数码管1、2、3、4
A/K11~G/K17/DP/KP:因为只用了下数码管,所以建议不用键盘扫描的可以简化成如下:
A~G + DP:也就是一个数码管上的八个段。
二、IIC(Inter-Integrated Circuit BUS)结构解析
1、IIC协议介绍
I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。
软件IIC:软件IIC通信指的是用单片机的两个I/O端口模拟出来的IIC,用软件控制管脚状态以模拟I2C通信波形,软件模拟寄存器的工作方式。
硬件IIC:一块硬件电路,硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,硬件(固件)I2C是直接调用内部寄存器进行配置。
通讯协议
TM1650 采用2线串行传输协议通讯。
1:开始信号(START)/结束信号(STOP)
开始信号:保持SCL为“1”电平,SDA从“1”跳“0”,认为是开始信号,
如(图3)A段;
结束信号:保持SCL为“1”电平,SDA从“0”跳“1”,认为是结束信号,
如(图3)E段;
2:ACK信号
如果本次通讯正常,芯片在串行通讯的第8个时钟下降沿后,TM1650主动把SDA拉低。直到检
测到SCL来了上升沿,SDA释放为输入状态(对芯片而言),如(图3)D段。
3: 写“1”和写“0”。
写“1”:保持 SDA 为“1”电平,SCL 从“0”跳到“1”,再从“1”跳到“0”,则认为是写入“1”
如(图3)B段。
写“0”:保持 SDA 为“0”电平,SCL 从“0”跳到“1”,再从“1”跳到“0”,则认为是写入“0“
一个字节数据传输格式
一个字节数据的传输格式如图4,数据发送时MSB在前,LSB在后。微处理器的数据通过两线总线
接口和TM1650通信,在输入数据时当SCL是高电平时,SDA上的信号必须保持不变;只有SCL上的
时钟信号为低电平时,SDA上的信号才能改变。数据输入的开始条件是SCL为高电平时,SDA由高变
低;结束条件是SCL为高时,SDA由低电平变为高电平。
开始/停止代码:
void TM1650_start(void) //开始信号
{
TM1650_SDA_OUT = 1;
TM1650_SCL = 1;
TM1650_SDA_IN = 1;
Delay4us();
TM1650_SDA_IN = 0;
Delay4us();
TM1650_SCL = 1;
Delay4us();
}
void TM1650_stop(void) //停止信号
{
TM1650_SDA_OUT = 1;
TM1650_SCL = 1;
TM1650_SDA_IN = 0;
Delay4us();
TM1650_SCL = 1;
TM1650_SDA_IN = 1;
Delay4us();
}
发送数据
void TM1650_send(u08t data) //传输数据
{
TM1650_SDA_OUT = 1;
TM1650_SCL = 0;
TM1650_SDA_IN = 0;
Delay4us();
for(s32t i=7; i>=0; i--)
{
if(data&(1<<i)) //判断SDA为高电平还是低电平,高位到低位操作
TM1650_SDA_IN = 1;
else
TM1650_SDA_IN = 0;
Delay4us();
TM1650_SCL = 1;
Delay4us();
TM1650_SCL = 0;
Delay4us();
}
}