Skip to content

Instantly share code, notes, and snippets.

@aklyk
Created January 3, 2019 21:49
Show Gist options
  • Save aklyk/206f3fd5d88c174597aa571d8fb15e59 to your computer and use it in GitHub Desktop.
Save aklyk/206f3fd5d88c174597aa571d8fb15e59 to your computer and use it in GitHub Desktop.
const int dataPin = 9; // VDIO
const int clockPin = 8; // VCLK
const int strobePin = 7; // VSTR
const int intensity = 7; // яркость 0-7
unsigned char segments[ 10 ] = {
0b00111111 ,
0b00000110 ,
0b01011011 ,
0b01001111 ,
0b01100110 ,
0b01101101 ,
0b01111101 ,
0b00000111 ,
0b01111111 ,
0b01101111 }; // цифры от 0 до 9 на 7-сегментном дисплее
unsigned char karika[ 6 ] = {
0b00000010,
0b00000100,
0b00010000,
0b00001000,
0b01000000,
0b00100000 }; // сегменты круга
unsigned char number,ciklus,i;
unsigned char charcode0;
unsigned char charcode1,charcode2;
unsigned char outchar;
unsigned char dnumber,dciklus;
void setup() {
i = 0;
number = 0;
ciklus = 0;
dnumber = 7;
dciklus = 3;
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(strobePin, OUTPUT);
digitalWrite(strobePin, HIGH);
digitalWrite(clockPin, HIGH);
t_sendCommand(0x40);
t_sendCommand(0x88 | min(7, intensity));
digitalWrite(strobePin, LOW);
t_send(0xC0);
for (int i = 0; i < 14; i++) {
t_send(0x00);
}
digitalWrite(strobePin, HIGH);
digitalWrite(strobePin, LOW);
t_send(0x03);
digitalWrite(strobePin, HIGH);
}
void loop() {
digitalWrite(strobePin, LOW);
t_send( 0x40);
digitalWrite(strobePin, HIGH);
digitalWrite(strobePin, LOW);
t_send( 0xC0 );
if( (--dciklus) == 0 )
{
ciklus++;
dciklus = 2;
}
if( ciklus == 6 ) ciklus = 0;
charcode0 = karika[ ciklus ];
charcode1 = segments[ (number & 0x0F) ];
charcode2 = segments[ (number >> 4) ];
for( i = 0 ; i < 7 ; i++ )
{
outchar = (( charcode2 & 0x01 ) << 2 ) | (( charcode1 & 0x01 ) << 3 ) | (( charcode0 & 0x01 ) << 6 );
t_send( outchar );
t_send( 0x00 );
charcode0 >>= 1;
charcode1 >>= 1;
charcode2 >>= 1;
}
if( (--dnumber) == 0 )
{
number ++;
dnumber = 7;
}
if( ( number & 0x0F ) == 10 ) number += 0x06; // подсчет в 10тичной
if( ( number >> 4 ) == 10 ) number = 0;
digitalWrite(strobePin, HIGH);
delay( 100 );
digitalWrite(strobePin, LOW);
t_send( 0x8F );
digitalWrite(strobePin, HIGH);
delay( 100 );
}
//functions
void t_sendCommand(byte cmd)
{
digitalWrite(strobePin, LOW);
t_send(cmd);
digitalWrite(strobePin, HIGH);
}
void t_sendData(byte address, byte data)
{
t_sendCommand(0x44);
digitalWrite(strobePin, LOW);
t_send(0xC0 | address);
t_send(data);
digitalWrite(strobePin, HIGH);
}
void t_send(byte data)
{
for (int i = 0; i < 8; i++) {
digitalWrite(clockPin, LOW);
digitalWrite(dataPin, data & 1 ? HIGH : LOW);
data >>= 1;
digitalWrite(clockPin, HIGH);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment