Skip to content

Instantly share code, notes, and snippets.

@aron-bordin
Created January 28, 2015 14:08
Show Gist options
  • Save aron-bordin/5e03abe8d2662695c9fd to your computer and use it in GitHub Desktop.
Save aron-bordin/5e03abe8d2662695c9fd to your computer and use it in GitHub Desktop.
16x16 Dot LED Matrix Display Arduino Hello World
/**
*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <Arduino.h>
//IO
#define LEDARRAY_D 2
#define LEDARRAY_C 3
#define LEDARRAY_B 4
#define LEDARRAY_A 5
#define LEDARRAY_G 6
#define LEDARRAY_DI 7
#define LEDARRAY_CLK 8
#define LEDARRAY_LAT 9
unsigned char Display_Buffer[2];
unsigned int Word1[32];
//here you'll draw the scene in your screen
unsigned char Scene[16][16] =
{
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1},
{1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1},
{1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};
void SceneToWord(){
int i, k, key = 0;
unsigned int value;
for(i = 0; i < 16; i++){
for(k = 0; k < 16; k++){
if(i < 8){
value = Scene[i][k] << (7 - i);
Word1[15 - k] += value;
} else {
value = Scene[i][k] << (15 - i);
Word1[31 - k] += value;
}
}
}
}
void setup() {
pinMode(LEDARRAY_D, OUTPUT);
pinMode(LEDARRAY_C, OUTPUT);
pinMode(LEDARRAY_B, OUTPUT);
pinMode(LEDARRAY_A, OUTPUT);
pinMode(LEDARRAY_G, OUTPUT);
pinMode(LEDARRAY_DI, OUTPUT);
pinMode(LEDARRAY_CLK, OUTPUT);
pinMode(LEDARRAY_LAT, OUTPUT);
Serial.begin(9600);
}
//************************************************************
//*************************************************************
void Display(unsigned int dat[]) {
unsigned char i;
for( i = 0 ; i < 16 ; i++ )
{
digitalWrite(LEDARRAY_G, HIGH);
Display_Buffer[0] = dat[i];
Display_Buffer[1] = dat[i+16];
Send(Display_Buffer[1]);
Send(Display_Buffer[0]);
digitalWrite(LEDARRAY_LAT, HIGH);
delayMicroseconds(1);
digitalWrite(LEDARRAY_LAT, LOW);
delayMicroseconds(1);
Scan_Line(i);
digitalWrite(LEDARRAY_G, LOW);
delayMicroseconds(100);
}
}
//****************************************************
//****************************************************
void Scan_Line( unsigned int m) {
switch(m)
{
case 0:
digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, LOW);
break;
case 1:
digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, HIGH);
break;
case 2:
digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, LOW);
break;
case 3:
digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, HIGH);
break;
case 4:
digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, LOW);
break;
case 5:
digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, HIGH);
break;
case 6:
digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, LOW);
break;
case 7:
digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, HIGH);
break;
case 8:
digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, LOW);
break;
case 9:
digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, HIGH);
break;
case 10:
digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, LOW);
break;
case 11:
digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, HIGH);
break;
case 12:
digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, LOW);
break;
case 13:
digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, HIGH);
break;
case 14:
digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, LOW);
break;
case 15:
digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, HIGH);
break;
default : break;
}
}
//****************************************************
//****************************************************
void Send( unsigned int dat) {
unsigned char i;
digitalWrite(LEDARRAY_CLK, LOW);
delayMicroseconds(1);;
digitalWrite(LEDARRAY_LAT, LOW);
delayMicroseconds(1);;
for( i = 0 ; i < 8 ; i++ )
{
if( dat&0x01 )
{
digitalWrite(LEDARRAY_DI, HIGH);
}
else
{
digitalWrite(LEDARRAY_DI, LOW);
}
delayMicroseconds(1);
digitalWrite(LEDARRAY_CLK, HIGH);
delayMicroseconds(1);
digitalWrite(LEDARRAY_CLK, LOW);
delayMicroseconds(1);
dat >>= 1;
}
}
void loop() {
update();
Display(Word1);
}
void update(){
clearWord();
SceneToWord();
}
void clearWord(){
for(int i = 0; i < 32; i++)
Word1[i] = 0;
}
@alam2214
Copy link

My need schematic circuit diagram

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment