-
TM1637
是一种带键盘扫描接口的
LED(
发光二极管显示器
)
驱动控制专用电路
,
内部集成
有
MCU
< br>数字接口,数据锁存器,
LED
高压驱动,键盘扫描等电
路。
采用功率
CMOS
工艺,显示模式
(8
段×
6
位
)
,支持共阳数码管输出,键扫描<
/p>
(8
×
2bit)
,
增强型抗干扰按键识别电路,辉度调节电路
(
占空比
8
级可调
)
,两线串行接口
(CLK,DIO)
,振
荡方式:内置
RC
振荡
(450Khz+-5%)
,内置上电复位电路,内置自动消隐电路。
引脚功能:
当传输数据时,
当
< br>SCL
高电平时,
DIO
由高变
低则代表开始信号,
当
SCL
高电平时
,
DIO
由低变高则代表停止信号,
只
有当
SCL
低电平时
DIO
上的数据才可以发生改变,
在
SCL
高电
平时
DIO
上的数据要
保持不变,
此时数据发送出去,
当正确传输
8
位数据后
TM1637
会第九<
/p>
个时钟在
DIO
管脚上给出一个
ACK
信号,
把
DIO
拉低。
传输时序类似于
I2C
通信。
传输数据
是低位在前高位在后。
传输过程:
下面仅是数码管驱动程序:
(
注有待改进
)
驱动的下面这种数码管,普通
也行,只是看不到
1s
的闪烁效果。
/*******************************
**** Describe: TM1673
控制芯片,可以设置时间的倒计时
(
定时不准,可以
自己校准
)
,四个数码管
0xc0,0
xc1,0xc2,0xc3
****
Time: 2015.05.14
****
Author: zys
********************************/
#include
#include
sbit CLK = P0^0;
//
时钟信号
sbit DIO = P0^1;
//
数据
/
地址数据
//
共阴极数码管
unsigned char code SEGData[]={0x3f,0x06
,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//1-9
unsigned char code SEGDataDp[]={0xbf,0x
86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
//
有小数点只用于地址
0xc1
unsigned char dpFlag = 0; //
控制第二个数码管的
dp
的显示
void TM1637_start( 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_display(
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;
<
/p>
/***************************************
********************
*****
*****
主函数
*****
**********************
*************************************/
void main( void )
{
timer0_init();
time_set(5, 0);
//
设置
5
小时倒计时
while(1)
{
}
}
/
**************************************************
******************
*
名称
: void
time_set(char hour, char min)
*
功能
:
设置时间
*
输入
: char hour,
char min
*
输出
:
无
**
**************************************************
**********/
void time_set(char hour,
char min)
{
if((hour < 0) || (min<0))
{
}
= hour/10;
=
hour%10;
= min/10;
= min%10;
}
/*************
************************************************
*
名称
:
time_judge( void )
hour =
0;
min = 0;
time_display();
if(countTime <= 10)
{
}
else
if(countTime <= 20)
{
}
else
{
}
countTime = 0;
time_judge();
dpFlag = 1;
dpFlag = 0;
//
显示时间
*
功能
:
判断时间变化
*
输入
: void
*
输出
:
无
***************
***********************************************/
void time_judge( void )
{
if(++sec == 60)
{
}
}
/**************************
******************************************
sec = 0;
if(( ||
|| || ) && (-- <= -1))
{
}
else
if(((!) && (!) && (!) )
&& ( <= -1))
{
}
= 0;
= 9;
if(() ||() && (-- <= -1))
{
}
else
if((!) && (!) && (-- <=
-1))
{
}
= 0;
= 5;
if(
&& (-- <= -1))
{
}
else
if((!) &&
(-- <= -1))
{
}
= 0;
= 9;
if(--
<= -1)
{
}
= 0;
//
60
秒
-
-
-
-
-
-
-
-
-
上一篇:Linux系统主机安全加固
下一篇:新概念英语第一册课后练习题及答案:19-20