Помогите переделать код если это не совсем так сложно под ардуино.
- Войдите на сайт для отправки комментариев
Вс, 01/03/2015 - 22:28
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
Вот, что получилось - но не считываются кнопки. (((
#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);С такими delay() в основном цикле, что то считать можно только случайно. При выполнении delay() МК просто стоит.
Даже если ставить delay меньше - все равно кнопками не управляю (((
Посмотрите здесь по форуму Rt6961, может найдете чего полезного.