TM1635. Управление 4х разрядным семисегментным индикатором и семью кнопками по последовательному интерфейсу.
- Войдите на сайт для отправки комментариев
Пт, 04/09/2015 - 08:08
Здравствуйте.
Попала в руки плата управления и индикации от чегото. На ней 4-х разрядный семисегментный индикатор и 7 кнопок. Подключено всё это к единственному полупроводниковому элементу на прлате: микросхеме TM1635.
Есть даташит на китайском. Больше информации не нашёл.

Код из даташита на С:
#include<reg52.h>
#include<intrins.h>
//Определение порта
sbit clk = P1^2;
sbit dio = P1^1;
///=======================================
void Delay_us(unsigned int i) //nus задержка
{
for(;i>0;i--)
_nop_();
}
///======================================
void I2CStart(void) //1635 старт
{
clk = 1;
dio = 1;
Delay_us(2);
dio = 0;
}
//=============================================
void I2Cask(void) //1635 ответ
{
clk = 0;
Delay_us(5);
clk = 1;
while(dio);
clk=0;
}
//========================================
void I2CStop(void) // 1635 Стоп
{
clk = 1;
dio = 0;
Delay_us(2);
dio = 1;
}
//=========================================
void I2CWrByte(unsigned char oneByte) //записать байт
{
unsigned char i;
for(i=0;i<8;i++)
{ clk = 0;
if(oneByte&0x01) //低位在前
{
dio = 1;
}
else
{
dio = 0;
}
Delay_us(3);
oneByte=oneByte>>1;
clk=1;
Delay_us(3);
}
}
//-------------------------------------------------
unsigned char ScanKey(void) //считываем ключи
{
unsigned char rekey,rkey,i;
I2CStart();
I2CWrByte(0x46); //Читаем ключевые команды
I2Cask();
dio=1; // Перед чтением линия данных вытащил ключи
for(i=0;i<8;i++) //Начните читать от минимумов
{ clk=0;
rekey=rekey>>1;
Delay_us(30);
clk=1;
if(dio)
{
rekey=rekey|0x80;
}
else
{
rekey=rekey|0x00;
}
Delay_us(30);
}
I2Cask();
I2CStop();
return (rekey);
}
///================================================
void SmgDisplay(void) //отправить в регистр дисплея
{
unsigned char i;
I2CStart();
I2CWrByte(0x40); // 40H地址自加 (??адрес) 44H Режим фиксированной адрес
I2Cask();
I2CStop();
I2CStart();
I2CWrByte(0xc0); //устанливаем первый адрес
I2Cask();
for(i=0;i<4;i++) //Не всегда пишут адрес
{
I2CWrByte(0xff); //передавать данные
I2Cask();
}
I2CStop();
I2CStart();
I2CWrByte(0x8f); //Открыть дисплей, максимальная яркость+
I2Cask();
I2CStop();
}
///==============================================
void init() //подпрограмма инициализации
{
//Инициализация немного
}
///==============================================
void main(void)
{
unsigned char keydate;
//init(); //инициализация
SmgDisplay(); // Написать зарегистрироваться и открыть дисплей
while(1)
{
keydate=Scankey(); //Читайте ключевое значение, значение ключа считывается необработанный.
}
}
//===========end==================================
Самому никак не разобраться. Нашел библиотеки, но застрял на определении порта sbit, в reg52.h нет таких портов.
Может кого нибудь из гуру заинтересует данная микросхема и он подскажет как написать библиотеку для неё.
Микросхема стоит на Алиэкспресе 35 центов. За небольшие деньги можно сэкономить порты и получить "универсальный индикатор + кнопки" по двум проводам.
попробуй либу от 1637
https://github.com/avishorp/TM1637
и 1637 лучше использовать как по мне. более распрастраненная
Спасибо большое. Пошёл пробовать.
Даташит на английском - http://www.chipdocs.com/pndecoder/datasheets/TITAN/TM1635.html
Подошла другая библиотека.
Спасибо за помощь.