Jump to content
SugarAddict

7110 LCD SPI

Recommended Posts

Played with the Stellaris LP last night for the first time, got the basics working. Very easy to work with, I'm shock and awed.

 

/*
* main.c
*/
#include "inc\hw_types.h"
#include "inc\hw_memmap.h"
#include "driverlib\pin_map.h"
#include "inc\lm4f120h5qr.h"
#include "driverlib\sysctl.h"
#include "driverlib\ssi.h"
#include "driverlib\gpio.h"
void LCDSend(unsigned long ulData);
void LCDInit();
void LCDGotoXY(short col, short row);
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
// Nuke on-board LEDs
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
GPIOPinWrite(GPIO_PORTF_BASE, (GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3), 0x00);
// PB0: Reset
// PB1: Chip Select(L)
// PB2: Data(H)/Command(L)
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); // Before SSI
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2);
// Setup SSI
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2);
GPIOPinConfigure(GPIO_PB4_SSI2CLK);
GPIOPinConfigure(GPIO_PB5_SSI2FSS);
GPIOPinConfigure(GPIO_PB6_SSI2RX);
GPIOPinConfigure(GPIO_PB7_SSI2TX);
GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
SSIConfigSetExpClk(SSI2_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 20000000, 8);
SSIEnable(SSI2_BASE);
LCDInit();
LCDGotoXY(1,1);
LCDSend(0x46);
LCDSend(0x49);
LCDSend(0x49);
LCDSend(0x49);
LCDSend(0x31);
while(1)
{
 SysCtlDelay(100);
}
}
void LCDSend(unsigned long ulData)
{
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, 0x00); // CS LOW
SysCtlDelay(200);
SSIDataPut(SSI2_BASE,ulData);
while(SSIBusy(SSI2_BASE))
{ //kill time
}
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, 0x02); // CS HIGH
SysCtlDelay(200);
}
void LCDInit()
{
// Initially only Reset High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x01);
SysCtlDelay(200);
// Set all High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x07);
SysCtlDelay(200);
// Reset Low
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x06);
SysCtlDelay(200);
// Reset High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x07);
SysCtlDelay(200);
// Command Low
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x03);
SysCtlDelay(200);
LCDSend(0xA6); //Display: Normal
LCDSend(0xA3); //LCD Bias Settings: 1/7 (0xA2 for 1/9)
LCDSend(0xA0); //ADC Selection: Reverse
LCDSend(0xA1); //ADC Selection: Reverse
//LCDSend(0xC8); //Common Output: Upside Down
LCDSend(0xC0); //Common Output: Normal Direction
LCDSend(0x22); //Set the V5 output Voltage
LCDSend(0x81); //set Electronic Volume - brightness
LCDSend(0x2E); //Power Controller Set:
LCDSend(0x2F); //Power Controller Set: Voltage follower circuit: ON
LCDSend(0xE3); //Non-OPeration Command
LCDSend(0x40); //Set the start line
LCDSend(0xAF); //LCD On
LCDSend(0xA4); //Display All Points: NORMAL
// Data High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x07);
SysCtlDelay(200);
}
void LCDGotoXY(short col, short row)
{
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, 0x00); // Command Low
SysCtlDelay(200);
LCDSend(0xB0+row); // page address
col += 18;
LCDSend(0x10+(col>>4));	 // column address
LCDSend(0x00+(col&0x0F));
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, 0x04); // Data High
SysCtlDelay(200);
}

Share this post


Link to post
Share on other sites

/*
* main.c
*/
#include "inc\hw_types.h"
#include "inc\hw_memmap.h"
#include "driverlib\pin_map.h"
#include "inc\lm4f120h5qr.h"
#include "driverlib\sysctl.h"
#include "driverlib\ssi.h"
#include "driverlib\gpio.h"
#include "7110LCD.h"
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
// Nuke on-board LEDs
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
GPIOPinWrite(GPIO_PORTF_BASE, (GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3), 0x00);
// PB0: Reset
// PB1: Chip Select(L)
// PB2: Data(H)/Command(L)
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); // Before SSI
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2);
// Setup SSI
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2);
GPIOPinConfigure(GPIO_PB4_SSI2CLK);
GPIOPinConfigure(GPIO_PB5_SSI2FSS);
GPIOPinConfigure(GPIO_PB6_SSI2RX);
GPIOPinConfigure(GPIO_PB7_SSI2TX);
GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
SSIConfigSetExpClk(SSI2_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8);
SSIEnable(SSI2_BASE);
LCDInit();
LCDCLS();
LCDGotoXY(0,0);
LCDSendChar('S');
LCDSendChar('t');
LCDSendChar('e');
LCDSendChar('l');
LCDSendChar('l');
LCDSendChar('a');
LCDSendChar(' ');
LCDSendChar('L');
LCDSendChar('C');
LCDSendChar('D');
while(1)
{
 SysCtlDelay(100);
}
}

 

/*
* 7110LCD.h
*
* Created on: Oct 16, 2012
*	 Author: SugarAddict
*/
#ifndef __7110LCD_H__
#define __7110LCD_H__
#define LCD_WIDTH 96
#define LCD_HEIGHT 64
void LCDSend(unsigned long ulData);
void LCDInit();
void LCDGotoXY(short col, short row);
void LCDClearRow(short row);
void LCDCLS();
const unsigned char table [][5] = {
{0x00, 0x00, 0x00, 0x00, 0x00}// (space)
,{0x00, 0x00, 0x5F, 0x00, 0x00}// !
,{0x00, 0x07, 0x00, 0x07, 0x00}// "
,{0x14, 0x7F, 0x14, 0x7F, 0x14}// #
,{0x24, 0x2A, 0x7F, 0x2A, 0x12}// $
,{0x23, 0x13, 0x08, 0x64, 0x62}// %
,{0x36, 0x49, 0x55, 0x22, 0x50}// &
,{0x00, 0x05, 0x03, 0x00, 0x00}// '
,{0x00, 0x1C, 0x22, 0x41, 0x00}// (
,{0x00, 0x41, 0x22, 0x1C, 0x00}// )
,{0x08, 0x2A, 0x1C, 0x2A, 0x08}// *
,{0x08, 0x08, 0x3E, 0x08, 0x08}// +
,{0x00, 0x50, 0x30, 0x00, 0x00}// ,
,{0x08, 0x08, 0x08, 0x08, 0x08}// -
,{0x00, 0x60, 0x60, 0x00, 0x00}// .
,{0x20, 0x10, 0x08, 0x04, 0x02}// /
,{0x3E, 0x51, 0x49, 0x45, 0x3E}// 0
,{0x00, 0x42, 0x7F, 0x40, 0x00}// 1
,{0x42, 0x61, 0x51, 0x49, 0x46}// 2
,{0x21, 0x41, 0x45, 0x4B, 0x31}// 3
,{0x18, 0x14, 0x12, 0x7F, 0x10}// 4
,{0x27, 0x45, 0x45, 0x45, 0x39}// 5
,{0x3C, 0x4A, 0x49, 0x49, 0x30}// 6
,{0x01, 0x71, 0x09, 0x05, 0x03}// 7
,{0x36, 0x49, 0x49, 0x49, 0x36}// 8
,{0x06, 0x49, 0x49, 0x29, 0x1E}// 9
,{0x00, 0x36, 0x36, 0x00, 0x00}// :
,{0x00, 0x56, 0x36, 0x00, 0x00}// ;
,{0x00, 0x08, 0x14, 0x22, 0x41}// <
,{0x14, 0x14, 0x14, 0x14, 0x14}// =
,{0x41, 0x22, 0x14, 0x08, 0x00}// >
,{0x02, 0x01, 0x51, 0x09, 0x06}// ?
,{0x32, 0x49, 0x79, 0x41, 0x3E}// @
,{0x7E, 0x11, 0x11, 0x11, 0x7E}// A
,{0x7F, 0x49, 0x49, 0x49, 0x36}// B
,{0x3E, 0x41, 0x41, 0x41, 0x22}// C
,{0x7F, 0x41, 0x41, 0x22, 0x1C}// D
,{0x7F, 0x49, 0x49, 0x49, 0x41}// E
,{0x7F, 0x09, 0x09, 0x01, 0x01}// F
,{0x3E, 0x41, 0x41, 0x51, 0x32}// G
,{0x7F, 0x08, 0x08, 0x08, 0x7F}// H
,{0x00, 0x41, 0x7F, 0x41, 0x00}// I
,{0x20, 0x40, 0x41, 0x3F, 0x01}// J
,{0x7F, 0x08, 0x14, 0x22, 0x41}// K
,{0x7F, 0x40, 0x40, 0x40, 0x40}// L
,{0x7F, 0x02, 0x04, 0x02, 0x7F}// M
,{0x7F, 0x04, 0x08, 0x10, 0x7F}// N
,{0x3E, 0x41, 0x41, 0x41, 0x3E}// O
,{0x7F, 0x09, 0x09, 0x09, 0x06}// P
,{0x3E, 0x41, 0x51, 0x21, 0x5E}// Q
,{0x7F, 0x09, 0x19, 0x29, 0x46}// R
,{0x46, 0x49, 0x49, 0x49, 0x31}// S
,{0x01, 0x01, 0x7F, 0x01, 0x01}// T
,{0x3F, 0x40, 0x40, 0x40, 0x3F}// U
,{0x1F, 0x20, 0x40, 0x20, 0x1F}// V
,{0x7F, 0x20, 0x18, 0x20, 0x7F}// W
,{0x63, 0x14, 0x08, 0x14, 0x63}// X
,{0x03, 0x04, 0x78, 0x04, 0x03}// Y
,{0x61, 0x51, 0x49, 0x45, 0x43}// Z
,{0x00, 0x00, 0x7F, 0x41, 0x41}// [
,{0x02, 0x04, 0x08, 0x10, 0x20}// "\"
,{0x41, 0x41, 0x7F, 0x00, 0x00}// ]
,{0x04, 0x02, 0x01, 0x02, 0x04}// ^
,{0x40, 0x40, 0x40, 0x40, 0x40}// _
,{0x00, 0x01, 0x02, 0x04, 0x00}// `
,{0x20, 0x54, 0x54, 0x54, 0x78}// a
,{0x7F, 0x48, 0x44, 0x44, 0x38}// b
,{0x38, 0x44, 0x44, 0x44, 0x20}// c
,{0x38, 0x44, 0x44, 0x48, 0x7F}// d
,{0x38, 0x54, 0x54, 0x54, 0x18}// e
,{0x08, 0x7E, 0x09, 0x01, 0x02}// f
,{0x08, 0x14, 0x54, 0x54, 0x3C}// g
,{0x7F, 0x08, 0x04, 0x04, 0x78}// h
,{0x00, 0x44, 0x7D, 0x40, 0x00}// i
,{0x20, 0x40, 0x44, 0x3D, 0x00}// j
,{0x00, 0x7F, 0x10, 0x28, 0x44}// k
,{0x00, 0x41, 0x7F, 0x40, 0x00}// l
,{0x7C, 0x04, 0x18, 0x04, 0x78}// m
,{0x7C, 0x08, 0x04, 0x04, 0x78}// n
,{0x38, 0x44, 0x44, 0x44, 0x38}// o
,{0x7C, 0x14, 0x14, 0x14, 0x08}// p
,{0x08, 0x14, 0x14, 0x18, 0x7C}// q
,{0x7C, 0x08, 0x04, 0x04, 0x08}// r
,{0x48, 0x54, 0x54, 0x54, 0x20}// s
,{0x04, 0x3F, 0x44, 0x40, 0x20}// t
,{0x3C, 0x40, 0x40, 0x20, 0x7C}// u
,{0x1C, 0x20, 0x40, 0x20, 0x1C}// v
,{0x3C, 0x40, 0x30, 0x40, 0x3C}// w
,{0x44, 0x28, 0x10, 0x28, 0x44}// x
,{0x0C, 0x50, 0x50, 0x50, 0x3C}// y
,{0x44, 0x64, 0x54, 0x4C, 0x44}// z
,{0x00, 0x08, 0x36, 0x41, 0x00}// {
,{0x00, 0x00, 0x7F, 0x00, 0x00}// |
,{0x00, 0x41, 0x36, 0x08, 0x00}// }
,{0x08, 0x08, 0x2A, 0x1C, 0x08}// ->
,{0x08, 0x1C, 0x2A, 0x08, 0x08} // <-
};
void LCDSend(unsigned long ulData)
{
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, 0x00); // CS LOW
SSIDataPut(SSI2_BASE,ulData);
while(SSIBusy(SSI2_BASE))
{ //kill time
}
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, 0x02); // CS HIGH
}
void LCDInit()
{
// Initially only Reset High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x01);
SysCtlDelay(100);
// Set all High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x07);
SysCtlDelay(100);
// Reset Low
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x06);
SysCtlDelay(100);
// Reset High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x07);
SysCtlDelay(100);
// Command Low
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x03);
SysCtlDelay(100);
LCDSend(0xA6); //Display: Normal
LCDSend(0xA3); //LCD Bias Settings: 1/7 (0xA2 for 1/9)
LCDSend(0xA0); //ADC Selection: Reverse
LCDSend(0xA1); //ADC Selection: Reverse
//LCDSend(0xC8); //Common Output: Upside Down
LCDSend(0xC0); //Common Output: Normal Direction
LCDSend(0x22); //Set the V5 output Voltage
LCDSend(0x81); //set Electronic Volume - brightness
LCDSend(0x2E); //Power Controller Set:
LCDSend(0x2F); //Power Controller Set: Voltage follower circuit: ON
LCDSend(0xE3); //Non-OPeration Command
LCDSend(0x40); //Set the start line
LCDSend(0xAF); //LCD On
LCDSend(0xA4); //Display All Points: NORMAL
// Data High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x07);
}
void LCDGotoXY(short col, short row)
{
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, 0x00); // Command Low
LCDSend(0xB0+row); // page address
col += 18;
LCDSend(0x10+(col>>4));	 // column address
LCDSend(0x00+(col&0x0F));
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, 0x04); // Data High
}
void LCDClearRow(short row)
{
short i = 0;
LCDGotoXY(0, row);
for(i=0;i<LCD_WIDTH;i++) LCDSend(0x00);
}
void LCDCLS()
{
short i = 0;
for(i=0;i<=(LCD_HEIGHT/8);i++) LCDClearRow(i);
}
void LCDSendChar(char cChar)
{
LCDSend(table[cChar-32][0]);
LCDSend(table[cChar-32][1]);
LCDSend(table[cChar-32][2]);
LCDSend(table[cChar-32][3]);
LCDSend(table[cChar-32][4]);
LCDSend(0x00);
}
#endif /* 7110LCD_H_ */

Share this post


Link to post
Share on other sites

5110 nokia lcd version:

 

*
* 5110LCD.h
*
* Created on: Oct 16, 2012
*	    Author: SugarAddict
*/

#ifndef __5110LCD_H__
#define __5110LCD_H__
#define LCD_WIDTH 84
#define LCD_HEIGHT 48
void LCDSend(unsigned long ulData);
void LCDInit();
void LCDGotoXY(short col, short row);
void LCDClearRow(short row);
void LCDCLS();

const unsigned char table [][5] = {
{0x00, 0x00, 0x00, 0x00, 0x00}// (space)
,{0x00, 0x00, 0x5F, 0x00, 0x00}// !
,{0x00, 0x07, 0x00, 0x07, 0x00}// "
,{0x14, 0x7F, 0x14, 0x7F, 0x14}// #
,{0x24, 0x2A, 0x7F, 0x2A, 0x12}// $
,{0x23, 0x13, 0x08, 0x64, 0x62}// %
,{0x36, 0x49, 0x55, 0x22, 0x50}// &
,{0x00, 0x05, 0x03, 0x00, 0x00}// '
,{0x00, 0x1C, 0x22, 0x41, 0x00}// (
,{0x00, 0x41, 0x22, 0x1C, 0x00}// )
,{0x08, 0x2A, 0x1C, 0x2A, 0x08}// *
,{0x08, 0x08, 0x3E, 0x08, 0x08}// +
,{0x00, 0x50, 0x30, 0x00, 0x00}// ,
,{0x08, 0x08, 0x08, 0x08, 0x08}// -
,{0x00, 0x60, 0x60, 0x00, 0x00}// .
,{0x20, 0x10, 0x08, 0x04, 0x02}// /
,{0x3E, 0x51, 0x49, 0x45, 0x3E}// 0
,{0x00, 0x42, 0x7F, 0x40, 0x00}// 1
,{0x42, 0x61, 0x51, 0x49, 0x46}// 2
,{0x21, 0x41, 0x45, 0x4B, 0x31}// 3
,{0x18, 0x14, 0x12, 0x7F, 0x10}// 4
,{0x27, 0x45, 0x45, 0x45, 0x39}// 5
,{0x3C, 0x4A, 0x49, 0x49, 0x30}// 6
,{0x01, 0x71, 0x09, 0x05, 0x03}// 7
,{0x36, 0x49, 0x49, 0x49, 0x36}// 8
,{0x06, 0x49, 0x49, 0x29, 0x1E}// 9
,{0x00, 0x36, 0x36, 0x00, 0x00}// :
,{0x00, 0x56, 0x36, 0x00, 0x00}// ;
,{0x00, 0x08, 0x14, 0x22, 0x41}// <
,{0x14, 0x14, 0x14, 0x14, 0x14}// =
,{0x41, 0x22, 0x14, 0x08, 0x00}// >
,{0x02, 0x01, 0x51, 0x09, 0x06}// ?
,{0x32, 0x49, 0x79, 0x41, 0x3E}// @
,{0x7E, 0x11, 0x11, 0x11, 0x7E}// A
,{0x7F, 0x49, 0x49, 0x49, 0x36}// B
,{0x3E, 0x41, 0x41, 0x41, 0x22}// C
,{0x7F, 0x41, 0x41, 0x22, 0x1C}// D
,{0x7F, 0x49, 0x49, 0x49, 0x41}// E
,{0x7F, 0x09, 0x09, 0x01, 0x01}// F
,{0x3E, 0x41, 0x41, 0x51, 0x32}// G
,{0x7F, 0x08, 0x08, 0x08, 0x7F}// H
,{0x00, 0x41, 0x7F, 0x41, 0x00}// I
,{0x20, 0x40, 0x41, 0x3F, 0x01}// J
,{0x7F, 0x08, 0x14, 0x22, 0x41}// K
,{0x7F, 0x40, 0x40, 0x40, 0x40}// L
,{0x7F, 0x02, 0x04, 0x02, 0x7F}// M
,{0x7F, 0x04, 0x08, 0x10, 0x7F}// N
,{0x3E, 0x41, 0x41, 0x41, 0x3E}// O
,{0x7F, 0x09, 0x09, 0x09, 0x06}// P
,{0x3E, 0x41, 0x51, 0x21, 0x5E}// Q
,{0x7F, 0x09, 0x19, 0x29, 0x46}// R
,{0x46, 0x49, 0x49, 0x49, 0x31}// S
,{0x01, 0x01, 0x7F, 0x01, 0x01}// T
,{0x3F, 0x40, 0x40, 0x40, 0x3F}// U
,{0x1F, 0x20, 0x40, 0x20, 0x1F}// V
,{0x7F, 0x20, 0x18, 0x20, 0x7F}// W
,{0x63, 0x14, 0x08, 0x14, 0x63}// X
,{0x03, 0x04, 0x78, 0x04, 0x03}// Y
,{0x61, 0x51, 0x49, 0x45, 0x43}// Z
,{0x00, 0x00, 0x7F, 0x41, 0x41}// [
,{0x02, 0x04, 0x08, 0x10, 0x20}// "\"
,{0x41, 0x41, 0x7F, 0x00, 0x00}// ]
,{0x04, 0x02, 0x01, 0x02, 0x04}// ^
,{0x40, 0x40, 0x40, 0x40, 0x40}// _
,{0x00, 0x01, 0x02, 0x04, 0x00}// `
,{0x20, 0x54, 0x54, 0x54, 0x78}// a
,{0x7F, 0x48, 0x44, 0x44, 0x38}// b
,{0x38, 0x44, 0x44, 0x44, 0x20}// c
,{0x38, 0x44, 0x44, 0x48, 0x7F}// d
,{0x38, 0x54, 0x54, 0x54, 0x18}// e
,{0x08, 0x7E, 0x09, 0x01, 0x02}// f
,{0x08, 0x14, 0x54, 0x54, 0x3C}// g
,{0x7F, 0x08, 0x04, 0x04, 0x78}// h
,{0x00, 0x44, 0x7D, 0x40, 0x00}// i
,{0x20, 0x40, 0x44, 0x3D, 0x00}// j
,{0x00, 0x7F, 0x10, 0x28, 0x44}// k
,{0x00, 0x41, 0x7F, 0x40, 0x00}// l
,{0x7C, 0x04, 0x18, 0x04, 0x78}// m
,{0x7C, 0x08, 0x04, 0x04, 0x78}// n
,{0x38, 0x44, 0x44, 0x44, 0x38}// o
,{0x7C, 0x14, 0x14, 0x14, 0x08}// p
,{0x08, 0x14, 0x14, 0x18, 0x7C}// q
,{0x7C, 0x08, 0x04, 0x04, 0x08}// r
,{0x48, 0x54, 0x54, 0x54, 0x20}// s
,{0x04, 0x3F, 0x44, 0x40, 0x20}// t
,{0x3C, 0x40, 0x40, 0x20, 0x7C}// u
,{0x1C, 0x20, 0x40, 0x20, 0x1C}// v
,{0x3C, 0x40, 0x30, 0x40, 0x3C}// w
,{0x44, 0x28, 0x10, 0x28, 0x44}// x
,{0x0C, 0x50, 0x50, 0x50, 0x3C}// y
,{0x44, 0x64, 0x54, 0x4C, 0x44}// z
,{0x00, 0x08, 0x36, 0x41, 0x00}// {
,{0x00, 0x00, 0x7F, 0x00, 0x00}// |
,{0x00, 0x41, 0x36, 0x08, 0x00}// }
,{0x08, 0x08, 0x2A, 0x1C, 0x08}// ->
,{0x08, 0x1C, 0x2A, 0x08, 0x08} // <-
};
void LCDSend(unsigned long ulData)
{
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, 0x00); // CS LOW
SSIDataPut(SSI2_BASE,ulData);
while(SSIBusy(SSI2_BASE))
{ //kill time
}
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, 0x02); // CS HIGH
}
void LCDInit()
{
// Initially only Reset High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x01);
SysCtlDelay(100);
// Set all High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x07);
SysCtlDelay(100);
// Reset Low
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x06);
SysCtlDelay(100);
// Reset High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x07);
SysCtlDelay(100);
// Command Low
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x03);
SysCtlDelay(100);
LCDSend(0x21); // Function set - extended instructions enabled
//LCDSend(0x21); // Set vop (contrast) 0 - 127
LCDSend(0xE6); // This is better for fast LCD update
LCDSend(0x06); // Temperature control
LCDSend(0x13); // Set bias system
LCDSend(0x20); // Function set - chip active, horizontal addressing, basic instructions
LCDSend(0x0C); // Display control - normal mode

// Data High
GPIOPinWrite(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2), 0x07);
}
void LCDGotoXY(short col, short row)
{
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, 0x00); // Command Low
LCDSend(0x80+col);
//col += 18;
//LCDSend(0x40+(col>>4));  // column address
//LCDSend(0x00+(col&0x0F));
LCDSend(0x40+row);
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, 0x04); // Data High
}
void LCDClearRow(short row)
{
short i = 0;
LCDGotoXY(0, row);
for(i=0;i<LCD_WIDTH;i++) LCDSend(0x00);
}
void LCDCLS()
{
short i = 0;
for(i=0;i<=(LCD_HEIGHT/8);i++) LCDClearRow(i);
}
void LCDSendChar(char cChar)
{
LCDSend(table[cChar-32][0]);
LCDSend(table[cChar-32][1]);
LCDSend(table[cChar-32][2]);
LCDSend(table[cChar-32][3]);
LCDSend(table[cChar-32][4]);
LCDSend(0x00);
}
#endif /* 5110LCD_H_ */

Share this post


Link to post
Share on other sites

You can add to 5110LCD.h before void LCDSendChar... something like this to write string at X,Y

void LCDSendText(short col, short row, char *string)
{
LCDGotoXY(col, row);
while (*string)
{
LCDSendChar(*string);
string++;
}
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×