自制Arduino 使用TM1637显示时间
硬件
TM1637芯片
TM1637是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU&数字接口、数据锁存器、LED高压驱动、键盘扫描等电路。主要应用于电磁炉、微波炉及小家电产品的显示屏驱动。
TM1637数码管模块
TM1637和Arduino uno 的接线关系
TM1637 Arduino uno
CLK --》2
DIO --》3
VCC--》5V
GND==》GND 由于我的Arduino是自制的,需要找到对应的引脚,下面是引脚图:
程序
//unsigned char LED[4]; //用于LED的4位显示缓存
int CLK = 2;
int DIO = 3; //
//sbit CLK= P3^4; //定义模拟IIC总线的时钟线
//sbit DIO = P3^5; //定义模拟IIC总线的数据线
unsigned char tab[] =
{
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
0x77,/*10 A*/
0x7C,/*11 b*/
0x58,/*12 c*/
0x5E,/*13 d*/
0x79,/*14 E*/
0x71,/*15 F*/
0x76,/*16 H*/
0x38,/*17 L*/
0x54,/*18 n*/
0x73,/*19 P*/
0x3E,/*20 U*/
0x00,/*21 黑屏*/
};
void setup ()
{
pinMode(CLK, OUTPUT);
pinMode(DIO, OUTPUT); //让管脚为输出状态
}
void loop()
{
/*LED[0]=1;
LED[1]=2;
LED[2]=3;
LED[3]=4;*/
//unsigned char data_add4=1;
while (1)
{
//DIO=1;
//digitalWrite(DIO,HIGH);
TM1637_display(0x01, 0x02, 0x03, 0x04, 0x00); //演示怎样按顺序显示
// LED4_Display ();
delay(500);
TM1637_display(0x01, 0x02, 0x03, 0x04, 0x01); //演示怎样让两个点儿闪烁
delay(500);
unsigned char i;
for (i = 1; i <= 9; i++) //演示按地址显示
{
display_fix(0x03, i);
delay(500);
}
}
}
//IIC开始
void TM1637_start(void)
{
digitalWrite(CLK, HIGH);
digitalWrite(DIO, HIGH);
delay(2);
digitalWrite(DIO, LOW);
}
//IIC应答
void TM1637_ack(void)
{
char i;
digitalWrite(CLK, LOW);
delay(5);
while (DIO == 1 && (i < 250))i++;
digitalWrite(CLK, HIGH);
delay(2);
digitalWrite(CLK, LOW);
}
//IIC停止
void TM1637_stop(void)
{
digitalWrite(CLK, LOW);
delay(2);
digitalWrite(DIO, LOW);
delay(2);
digitalWrite(CLK, HIGH);
delay(2);
digitalWrite(DIO, HIGH);
delay(2);
}
//写数据函数
void TM1637_Write(unsigned char DATA)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
digitalWrite(CLK, LOW);
if (DATA & 0x01)
digitalWrite(DIO, HIGH);
else
digitalWrite(DIO, LOW);
delay(3);
DATA = DATA >> 1;
digitalWrite(CLK, HIGH);
delay(3);
}
}
//按顺序显示
void TM1637_display(unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char h)
{
TM1637_start();
TM1637_Write(0x40);//写数据+自动地址加1+普通模式
TM1637_ack();
TM1637_stop();
TM1637_start();
TM1637_Write(0xc0);//设置显示首地址即第一个LED
TM1637_ack();
TM1637_Write(tab[a]);
TM1637_ack();
TM1637_Write(tab[b] | h << 7); //h为1时显示时钟中间的两点
TM1637_ack();
TM1637_Write(tab[c]);
TM1637_ack();
TM1637_Write(tab[d]);
TM1637_ack();
TM1637_stop();
TM1637_start();
TM1637_Write(0x89);//开显示,2/16亮度
TM1637_ack();
TM1637_stop();
}
//指定地址写入数据
void display_fix(unsigned char add, unsigned char DispData)
{
TM1637_start();
TM1637_Write(0x40);
TM1637_ack();
TM1637_stop();
TM1637_start();
TM1637_Write(0xc0 | add); //设置显示地址
TM1637_ack();
TM1637_Write(tab[DispData]);//写入数据如果第2个加0x80则显示两小点
TM1637_ack();
TM1637_stop();
TM1637_start();
TM1637_Write(0x89);
TM1637_ack();
TM1637_stop();
}
文档信息
版权声明:可自由转载(请注明转载出处)-非商用-非衍生
发表时间:2021年12月29日 11:36