Jump to content
43oh

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);
}

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_ */

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_ */

Link to post
Share on other sites
  • 5 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...