помогите в адаптации библиотеки.

goldpistol
Offline
Зарегистрирован: 01.10.2014

ребят,нужна помощь в адаптации библиотеки
https://github.com/project37cat/PT6961_lib
библиотека край как нужна,а знаний ноль чтоб переписать...

goldpistol
Offline
Зарегистрирован: 01.10.2014

ребят,ну помогите же...край как нужно...

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Может стОит, всё же, озвучить, что требуется?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

goldpistol пишет:
ребят,нужна помощь в адаптации библиотеки https://github.com/project37cat/PT6961_lib библиотека край как нужна,а знаний ноль чтоб переписать...

курсивом переписать?

там каждая строчка по русски прокоментирована.

goldpistol
Offline
Зарегистрирован: 01.10.2014

она судя по всему не для arduino...она не работает в arduino ide..

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ага. она для пиков

глянь в соседней ветке обсуждают. поиском поищи если не увидишь

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Попробуйте чуток подкорректировать -

добавить

#include <Arduino.h>

задать ноги (номера чисто для примера)

// программный SPI
// работает на любых трех ногах
#define DAT 10 //DIN
#define CLK 11
#define STB 12

 

добавить пропущенные директивы void (кое-где пропущены)

управление пинами типа

STB=0;

заменить на

digitalWrite(STB, LOW);

и так все, по аналогии...

 

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Вот как-то так (IDE, по крайней мере не ругаеццо) -

// управление LED дисплеем с контроллером PT6961 (7 знаков по 7 сегментов, от китайского DVD плеера)
// "led.h" версия 1 от 22.10.2014 
// компилятор HI-TECH C PRO PIC18 V9.63PL3


#include <Arduino.h>
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))


// программный SPI
// работает на любых трех ногах
#define DAT 10 //DIN
#define CLK 11
#define STB 12


char ledbuff[13]; //видеобуфер

const unsigned char ce=0b1000000; //"прочерк"
const unsigned char cn=0b0000000; //"пробел"
const unsigned char c0=0b0111111; //"0"
const unsigned char c1=0b0000110; //"1"
const unsigned char c2=0b1110011; //"2"
const unsigned char c3=0b1110110; //"3"
const unsigned char c4=0b1001110; //"4"
const unsigned char c5=0b1111100; //"5"
const unsigned char c6=0b1111101; //"6"
const unsigned char c7=0b0100110; //"7"
const unsigned char c8=0b1111111; //"8"
const unsigned char c9=0b1111110; //"9"


///////////////////////////////////////////////////////////////////////////////////////////////////
void led_data(unsigned char data) //последовательная передача байта в порт начиная с нулевого бита
{
for(unsigned char i=0; i<8; i++)
	{
	if(data & 0x01) {
  digitalWrite(DAT, HIGH);;
  }
  else {
  digitalWrite(DAT, LOW);
  }
	data>>=0x01;
	digitalWrite(CLK, LOW);
  digitalWrite(CLK, HIGH);
	}
}


///////////////////////////////////////////////////////////////////////////////////////////////////
void led_dimm(unsigned char vol) //vol 0..7 - яркость
{
digitalWrite(STB, LOW);
led_data(0b10001000+vol);
digitalWrite(STB, HIGH);
}


///////////////////////////////////////////////////////////////////////////////////////////////////
void led_init(void) //инициализация PT6961
{
digitalWrite(DAT, LOW);
digitalWrite(CLK, HIGH);
digitalWrite(STB, HIGH);

 delay(30); //в даташите рекомендуют 200мс

digitalWrite(STB, LOW);
led_data(0b01000000); //command 2
digitalWrite(STB, HIGH);

digitalWrite(STB, LOW);
led_data(0b11000000); //command 3
for(unsigned char i=0; i<13; i++) led_data(0); //очистка дисплея
digitalWrite(STB, HIGH);

digitalWrite(STB, LOW);
led_data(0b00000011); //command 1
digitalWrite(STB, HIGH);

digitalWrite(STB, LOW);
led_data(0b10001000); //command 4  //биты 0..2 регулировка яркости (000..111)
digitalWrite(STB, HIGH);
}



///////////////////////////////////////////////////////////////////////////////////////////////////
void led_digit(unsigned char digit, unsigned char sign) // в позиции 1..7 нарисовать символ
{
unsigned char tmp=0;
switch(sign) //по полученному коду символа выбираем код сегментов
	{
	case 32: tmp=cn; break; //пробел
	case 48: tmp=c0; break;
	case 49: tmp=c1; break;
	case 50: tmp=c2; break;
	case 51: tmp=c3; break;
	case 52: tmp=c4; break;
	case 53: tmp=c5; break;
	case 54: tmp=c6; break;
	case 55: tmp=c7; break;
	case 56: tmp=c8; break;
	case 57: tmp=c9; break;
	default: tmp=ce; break; //прочерк если неподдерживаемый символ
	}

for(unsigned char i=0; i<14; i=i+2) //передача кода в буфер
	{
	if(tmp & 0x01) set_bit(ledbuff[i],digit);
	else clear_bit(ledbuff[i],digit);
	tmp>>=0x01;
	}
}


///////////////////////////////////////////////////////////////////////////////////////////////////
void led_print(unsigned char digit, const char *string) //вывод строки на дисплей //digit - знакоместо 1..7
{
for(unsigned char i=0; string[i]!='\0'; i++)
led_digit(i+digit,string[i]);
}


///////////////////////////////////////////////////////////////////////////////////////////////////
void led_update(void) //обновление картинки - отправляем весь буфер в порт
{
digitalWrite(STB, LOW);
led_data(0b11000000); //command 3
for(unsigned char i=0; i<13; i++) led_data(ledbuff[i]);
digitalWrite(STB, HIGH);
}

 

goldpistol
Offline
Зарегистрирован: 01.10.2014

Спасибо вам!!Дальше уже сам мудрить буду!