Помогите переделать код если это не совсем так сложно под ардуино.

mkvmaks
Offline
Зарегистрирован: 07.07.2013
void Pt6961Init(void)
{
 char i;

 STB=1;
 SCL=1;
 
 // command 2 : memory r/w, address inc
 STB=0;
 sout(0x40);
 STB=1;

 // command 3 : address set, and data
 STB=0;
 sout(0xC0);
 for(i=0;i<14;i++)
  sout(0x00);
 STB=1;

 // command 1 : display mode : digit & seg
 STB=0;
 sout(0x02);
 STB=1;

 // command 4 : disp on/off, disp duty
 STB=0;
 sout(0x87);
 STB=1;

 // command 1 : display mode
 STB=0;
 sout(0x02);
 STB=1;

 // command 4 : disp on/off, disp duty
 STB=0;
 sout(0x8F);
 STB=1;

}

void sout(char data)
{
 char i;
 for(i=0;i<8;i++){
  SCL=0;
  SDO = data&0x01;
  SCL=1;
  data = data >> 1;
 }
}

void  LedPrint(char *str)
{
 char data;
 char i=0;

 // command 2
 STB=0;
 sout(0x40);   // write mode, auto inc address
 STB=1;

 // command 3
 STB=0;
 sout(0xC0);  // set write start address=0
 sout(str[0]);  // 1st digit
 sout(0x00);  // 1 digit occupy 2 bytes
 sout(str[1]);  // 2nd digit
 sout(0x00);   
 sout(str[2]);  // 3rd digit
 sout(0x00);
 STB=1;
}


// Read
 STB=0;
 sout(0x42);   // read mode, auto inc address
 data[0]=sin();  // read in 1st scan line only 0-5 useable
 data[1]=sin();  // 2nd
 data[2]=sin();  // 3rd
 data[3]=sin();  // 4th
        data[4]=sin();          // 5th
 STB=1;
 
 
 char sin(void)
{
 char i;
 char rc=0;
 
 for(i=0;i<8;i++){
  SCL=0;
  rc = rc>>1;
  SCL=1;
  if(SDI)
   rc |= 0x80;
 }

 return rc;
}

Взял от сюда http://checko.blogspot.ru/2005/09/lcd-button-controller-pt6961.html

maksmkv
Offline
Зарегистрирован: 07.04.2013

Вот, что получилось - но не считываются кнопки. (((

 

#include "OasisLED.h"
#include <Arduino.h>

uint8_t clockPin = 3;
uint8_t strobePin = 2;
uint8_t dataPin = 4;
uint8_t SDI=5;

char data0=0;
char data1=0;
char data2=0;
char data3=0;
char data4=0;

OasisLED ledDisplay = OasisLED(clockPin, strobePin, dataPin);


void setup() {
  ledDisplay.initialize();
}

void sout(char data)
{
 char i;
 for(i=0;i<8;i++){
  clockPin=0;
  dataPin = data&0x01;
  clockPin=1;
  data = data >> 1;
 }
}

void sin(char data) {// Read
 strobePin=0;
 sout(0x42);   // read mode, auto inc address
 data0=sin();  // read in 1st scan line only 0-5 useable
 data1=sin();  // 2nd
 data2=sin();  // 3rd
 data3=sin();  // 4th
 data4=sin();  // 5th
 strobePin=1;
}

char sin(void)
{
 char i;
 char rc=0;
 
 for(i=0;i<8;i++){
  clockPin=0;
  rc = rc>>1;
  clockPin=1;
  if(SDI)
   rc |= 0x80;
 }
 return rc;
}
 
 
void loop() {
  // Show "Spinning" display across all digits
    //ledDisplay.toggleColon();
char data;
 char i=0;
strobePin=0;
 sout(0x40);   // write mode, auto inc address
strobePin=1;
 
 data0=sin();
 
  ledDisplay.setValue(data0);
    delay(1000);
    ledDisplay.setValue(data1);
    delay(1000);
    ledDisplay.setValue(data2);
    delay(1000);
    ledDisplay.setValue(data3);
    delay(1000);
    ledDisplay.setValue(data4);
    delay(1000);
  }
    
//  ledDisplay.reset();
//delay(2000);

 

bwn
Offline
Зарегистрирован: 25.08.2014

С такими delay() в основном цикле,  что то считать можно только случайно. При выполнении delay() МК просто стоит.

mkvmaks
Offline
Зарегистрирован: 07.07.2013

Даже если ставить delay меньше - все равно кнопками не управляю ((( 

bwn
Offline
Зарегистрирован: 25.08.2014

Посмотрите здесь по форуму Rt6961, может найдете чего полезного.