1、TM1637 是一种带键盘扫描接口的 LED(发光二极管显示器 )驱动控制专用电路,内部集成有 MCU 数字接口,数据锁存器,LED 高压驱动,键盘扫描等电路。采用功率 CMOS 工艺,显示模式(8 段6 位),支持共阳数码管输出,键扫描(82bit),增强型抗干扰按键识别电路,辉度调节电路(占空比 8 级可调 ),两线串行接口(CLK,DIO),振荡方式:内置 RC 振荡(450Khz+-5%),内置上电复位电路,内置自动消隐电路。引脚功能:当传输数据时,当 SCL 高电平时,DIO 由高变低则代表开始信号,当 SCL 高电平时,DIO 由低变高则代表停止信号,只有当 SCL 低电平时 DI
2、O 上的数据才可以发生改变,在 SCL高电平时 DIO 上的数据要保持不变,此时数据发送出去,当正确传输 8 位数据后 TM1637会第九个时钟在 DIO 管脚上给出一个 ACK 信号,把 DIO 拉低。传输时序类似于 I2C 通信。传输数据是低位在前高位在后。传输过程:下面仅是数码管驱动程序:(注有待改进)驱动的下面这种数码管,普通也行,只是看不到 1s 的闪烁效果。/* Describe: TM1673 控制芯片,可以设置时间的倒计时(定时不准,可以自己校准),四个数码管 0xc0,0xc1,0xc2,0xc3* Time: 2015.05.14* Author: zys*/#includ
3、e #includesbit CLK = P00; /时钟信号sbit DIO = P01; /数据/ 地址数据/共阴极数码管unsigned char code SEGData=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/1-9unsigned char code SEGDataDp=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; /有小数点只用于地址 0xc1unsigned char dpFlag = 0; /控制第二个数码管的 dp 的显示void TM1637_start(
4、 void );void TM1637_stop( void );void TM1637_write1Bit(unsigned char mBit);void TM1637_write1Byte(unsigned char mByte);void TM1637_writeCammand(unsigned char mData);void TM1637_writeData(unsigned char addr, unsigned char mData);void time_set(char hour, char min);void time_judge( void );void time_dis
5、play( void );void timer0_init( void );void delay_140us( void );void delay_1ms(unsigned int i);unsigned int countTime = 0;unsigned char time, sec;struct char shi;char ge;Hour;struct char shi;char ge;Min;/* 主函数*/void main( void )timer0_init();time_set(5, 0); /设置 5 小时倒计时while(1)time_display(); /显示时间if(
6、countTime loop) /取得最低位CLK = 0;delay_140us();DIO = 1;delay_140us();CLK = 1;delay_140us();while(DIO = 1); /获得应答位 /* 名称 : void TM1637_writeCammand(unsigned char mData)* 功能 : 写指令 1byte* 输入 : unsigned char mData* 输出 : 无*/void TM1637_writeCammand(unsigned char mData)TM1637_start();TM1637_write1Byte(mData)
7、; /数据TM1637_stop();/* 名称 : void TM1637_writeData(unsigned char addr, unsigned char mData)* 功能 : 固定地址写数据 1byte* 输入 : unsigned char addr, unsigned char mData* 输出 : 无*/void TM1637_writeData(unsigned char addr, unsigned char mData)TM1637_start();TM1637_write1Byte(addr); /地址TM1637_write1Byte(mData); /数据T
8、M1637_stop();/* 名称 : void timer0_init()* 功能 : 定时 50ms,实际运行中由于指令运行造成的延时,实际时间肯定大于 50ms* 输入 : 无* 输出 : 无*/void timer0_init( void )TMOD=0X01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;ET0=1;EA=1;TR0=1; /* 名称 : * 功能 : 定时 50ms,实际运行中由于指令运行造成的延时,实际时间肯定大于 50ms* 输入 : 无* 输出 : 无*/void timer0_isr() interrupt 1TH
9、0=(65535-50000)/256; /50msTL0=(65535-50000)%256; /countTime+;/* 名称 : Delay_1ms(unsigned int i)* 功能 : 延时子程序,延时时间为 140us* 输入 : * 输出 : 无*/void delay_140us( void )int i;for(i=0; i20; i+)_nop_();/* 名称 : Delay_1ms(unsigned int i)* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无*/*void Delay_1ms(unsigned int i)/1ms 延时unsigned char x,j;for(j=0;ji;j+)for(x=0;x=148;x+);*/