first commit
This commit is contained in:
131
LCD_TEST_01/LCD_TEST_01.ino
Executable file
131
LCD_TEST_01/LCD_TEST_01.ino
Executable file
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
7-17-2011
|
||||
Spark Fun Electronics 2011
|
||||
Nathan Seidle
|
||||
|
||||
This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
|
||||
|
||||
This code writes a series of images and text to the Nokia 5110 84x48 graphic LCD:
|
||||
http://www.sparkfun.com/products/10168
|
||||
|
||||
Do not drive the backlight with 5V. It will smoke. However, the backlight on the LCD seems to be
|
||||
happy with direct drive from the 3.3V regulator.
|
||||
|
||||
Although the PCD8544 controller datasheet recommends 3.3V, the graphic Nokia 5110 LCD can run at 3.3V or 5V.
|
||||
No resistors needed on the signal lines.
|
||||
|
||||
You will need 5 signal lines to connect to the LCD, 3.3 or 5V for power, 3.3V for LED backlight, and 1 for ground.
|
||||
*/
|
||||
|
||||
#define PIN_SCE 7 //Pin 3 on LCD
|
||||
#define PIN_RESET 6 //Pin 4 on LCD
|
||||
#define PIN_DC 5 //Pin 5 on LCD
|
||||
#define PIN_SDIN 4 //Pin 6 on LCD
|
||||
#define PIN_SCLK 3 //Pin 7 on LCD
|
||||
|
||||
//The DC pin tells the LCD if we are sending a command or data
|
||||
#define LCD_COMMAND 0
|
||||
#define LCD_DATA 1
|
||||
|
||||
//You may find a different size screen, but this one is 84 by 48 pixels
|
||||
#define LCD_X 84
|
||||
#define LCD_Y 48
|
||||
|
||||
//This is awesome in bitmap form
|
||||
char awesome[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x30, 0x18, 0x1C,
|
||||
0x0C, 0x0C, 0x06, 0x06, 0x07, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07,
|
||||
0x07, 0x07, 0x0E, 0x06, 0x1C, 0x1C, 0x38, 0x70, 0x70, 0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0x3C, 0xCE, 0x67, 0x33, 0x18, 0x08,
|
||||
0x08, 0xC8, 0xF8, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
|
||||
0x70, 0x38, 0x18, 0x18, 0x08, 0x08, 0x08, 0xF8, 0xF0, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x01, 0x07,
|
||||
0x0F, 0x3C, 0xF8, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x0F, 0x00, 0x0C, 0x7F,
|
||||
0x60, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x63,
|
||||
0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF,
|
||||
0xF0, 0x00, 0x00, 0x00, 0x08, 0x08, 0xFC, 0x8C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
|
||||
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
|
||||
0x0C, 0x0C, 0x0C, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x3C, 0x70, 0xE0, 0x80, 0x00, 0x07, 0x0C, 0x38, 0x60, 0xC0,
|
||||
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0,
|
||||
0xF0, 0xE0, 0xC0, 0x80, 0xC0, 0x30, 0x18, 0x0F, 0x00, 0x00, 0x80, 0xC0, 0x70, 0x3C, 0x1F, 0x07,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06,
|
||||
0x0E, 0x1C, 0x18, 0x38, 0x31, 0x73, 0x62, 0x66, 0x64, 0xC7, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF,
|
||||
0xC7, 0xC7, 0xC7, 0x67, 0x63, 0x63, 0x71, 0x30, 0x38, 0x18, 0x1C, 0x0C, 0x06, 0x03, 0x03, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
void setup(void) {
|
||||
LCDInit(); //Init the LCD
|
||||
LCDClear();
|
||||
LCDBitmap(awesome);
|
||||
}
|
||||
|
||||
void gotoXY(int x, int y) {
|
||||
LCDWrite(0, 0x80 | x); // Column.
|
||||
LCDWrite(0, 0x40 | y); // Row. ?
|
||||
}
|
||||
|
||||
//This takes a large array of bits and sends them to the LCD
|
||||
void LCDBitmap(char my_array[]){
|
||||
for (int index = 0 ; index < (LCD_X * LCD_Y / 8 ) ; index++)
|
||||
LCDWrite(LCD_DATA, my_array[index]);
|
||||
}
|
||||
|
||||
//Clears the LCD by writing zeros to the entire screen
|
||||
void LCDClear(void) {
|
||||
for (int index = 0 ; index < (LCD_X * LCD_Y / 8 ) ; index++)
|
||||
LCDWrite(LCD_DATA, 0x00);
|
||||
|
||||
gotoXY(0, 0); //After we clear the display, return to the home position
|
||||
}
|
||||
|
||||
//This sends the magical commands to the PCD8544
|
||||
void LCDInit(void) {
|
||||
|
||||
//Configure control pins
|
||||
pinMode(PIN_SCE, OUTPUT);
|
||||
pinMode(PIN_RESET, OUTPUT);
|
||||
pinMode(PIN_DC, OUTPUT);
|
||||
pinMode(PIN_SDIN, OUTPUT);
|
||||
pinMode(PIN_SCLK, OUTPUT);
|
||||
|
||||
//Reset the LCD to a known state
|
||||
digitalWrite(PIN_RESET, LOW);
|
||||
digitalWrite(PIN_RESET, HIGH);
|
||||
|
||||
LCDWrite(LCD_COMMAND, 0x21); //Tell LCD that extended commands follow
|
||||
LCDWrite(LCD_COMMAND, 0xBF); //Set LCD Vop (Contrast): Try 0xB1(good @ 3.3V) or 0xBF if your display is too dark
|
||||
LCDWrite(LCD_COMMAND, 0x04); //Set Temp coefficent
|
||||
LCDWrite(LCD_COMMAND, 0x14); //LCD bias mode 1:48: Try 0x13 or 0x14
|
||||
|
||||
LCDWrite(LCD_COMMAND, 0x20); //We must send 0x20 before modifying the display control mode
|
||||
LCDWrite(LCD_COMMAND, 0x0C); //Set display control, normal mode. 0x0D for inverse
|
||||
}
|
||||
|
||||
//There are two memory banks in the LCD, data/RAM and commands. This
|
||||
//function sets the DC pin high or low depending, and then sends
|
||||
//the data byte
|
||||
void LCDWrite(byte data_or_command, byte data) {
|
||||
digitalWrite(PIN_DC, data_or_command); //Tell the LCD that we are writing either to data or a command
|
||||
|
||||
//Send the data
|
||||
digitalWrite(PIN_SCE, LOW);
|
||||
shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data);
|
||||
digitalWrite(PIN_SCE, HIGH);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
}
|
||||
Reference in New Issue
Block a user