The interface between the LCD driver and the microcontroller is done by using only 3 pins (CLK, CE and DATA).
I know this is an old and rare LCD driver but the library code can be used to adapt other LCD drivers. I use this because I have a broken Samsung MM-N7 audio system with a good display using this IC.
LC75824 pinout |
LC75824 communication protocol
LC75824 signal timings |
There are to cases - when CLK is stopped at the low level or at the high level.
The signals are - CE (chip enable), CL or CLK (synchronization clock), DI (data input).
By looking at the above image, notice the timings between each signals. Checking the datasheet we find that all those time periods are 160 ns (nanoseconds). Initially the CLK is low. When the CLK becomes high, the driver will read the DATA bit - high or low; but the DI (DATA) pin must be set high or low 160 ns before the CLK is set high. Both CLK and DATA must be maintained high for at least 160 ns.
LC75824 serial data input
Sending serial data is done using 4 frames. Bits are sent MSB (most significant bit) first. Notice that on idle, the CE signal is low and also during address transmission. Another important thing to notice is the transition from where the address transmission ends and data transmission begins. First the data bit is set and the CE and CLK are low for at least 160 ns, then CE is pulled high for another 160 ns, after that, the CLK is pulled high for 160 ns then the protocol continues as discussed above in the signal timings, with CE being high until the frame is completed.frame 1 |
frame 2 |
frame 3 |
frame 4 |
Display data - 52 bits per frame, except the last frame when is 48 bits. This tells the LCD driver what segments to drive from 1 to 204. On frame 1 are the segments with numbers from 1 to 52 and on each frame, the next 52 until 204.
Display data to output pin correspondence |
Control Data Functions:
- CU: Normal mode current drain control data. This control data bit controls the current drain in normal mode.
0 - Normal current drain mode
1 - Low current drain mode - P0 to P3: Segment output port/general-purpose output port switching control data. These control data bits switch the segment output port/general-purpose output port functions of the S1/P1 to S12/P12 output pins.
- DR: 1/2 bias drive or 1/3 bias drive switching control data. This control data bit selects either 1/2 bias drive or 1/3 bias drive.
0 - 1/3 bias drive
1 - 1/2 bias drive - SC: Segments on/off control data. This control data bit controls the on/off state of the segments.
0 - On
1 - Off - BU: Normal mode/power-saving mode control data. This control data bit selects either normal mode or power-saving mode.
0 - Normal mode
1 - Power-saving mode. In this mode the OSC pin oscillator is stopped and the common and segment pins output low levels. However, the S1/P1 to S12/P12 output pins can still be used as general-purpose output ports under the control of the control data bits P0 to P3.
Library for interfacing LC75824 LCD driver with an EFM8 microcontroller
Setup
In order to use this code, first you need to set some things first in the LC75824.h file. These are IO pins, number of digits that your LCD has and the scroll speed.CE_CLK_DATA_PORT is the port where the pins for CE, CLK and DATA are located
//----------------------------------------------------------------------------- // Defines //----------------------------------------------------------------------------- // USER SETUP START #define CE_CLK_DATA_PORT P0 #define CE_PIN 2 #define CLK_PIN 1 #define DATA_PIN 3 #define LCD_DIGITS 7 // number of digits #define LCD_SCROLL_SPEED 300 // milliseconds // USER SETUP END //-----------------------------------------------------------------------------
Functions
LCD_WriteString()
void LCD_WriteString(const char *string, uint8_t start_position);
-
string: string to be displayed to LCD
-
start_position: digit position from where the characters will be displayed.
Starts from 1
LCD_WriteInt()
void LCD_WriteInt(int16_t number, int8_t nrOfDigits, uint8_t start_position);
number: display an integer on LCD. Maximum value is 32768 for negative
numbers and 32767 for positive
nrOfDigits: how many digits the number has. If this is greater than the
actual number of digits, the number will be padded by zeros at the beginning
start_position: digit position from where the characters will be displayed. Starts from 1
LCD_Clear()
void LCD_Clear(bool sequential_writes);
Clears the display. If sequential_writes is false, the display will be cleared
immediately by executing LCD_WriteString function. If sequential_writes is true
the display will be cleared only after you output something to the display, and
the LCD_WriteString function won't be executed.
LCD_ScrollString()
void LCD_ScrollString(const char *string);
Scrolls a string on LCD at a predefined speed
LCD_SetAnnunciator() and LCD_ClearAnnunciator()
void LCD_SetAnnunciator(uint8_t annunciator);
void LCD_ClearAnnunciator(uint8_t annunciator);
An annunciator is any symbol on the LCD that is not a digit.
annunciator: an LCD segment number from 1 to 204 or a macro like
DISPLAY_STEREO, DISPLAY_ANALOG_CLOCK_SYMBOL, etc.
A list with all macros can be found in the library header.
These can be modified according to the LCD that you use.
LCD_NonStandardASCII()
void LCD_NonStandardASCII(uint16_t index, uint8_t start_position);
Display characters that are not in the standard ASCII table.
index: a number that represents an index used to access the FONTS
array where the symbol is defined.
Also a macro can be used, like LCD_CELSIUS_DEGREE. At the moment only
LCD_CELSIUS_DEGREE exists and it's the last element in the FONTS array.
Using LCD_CELSIUS_DEGREE will display degree Celsius symbol.
Macro Functions
LCD_AllSegmentsOn()
Turn on all segments on LCD.LCD_SetControlBits(cmd)
Send control commands to the LCD driver IC. Takes a macro as a parameter.- LCD_SEGMENTS_ON: turn on all LCD segments
- LCD_SEGMENTS_OFF: turn off all LCD segments
- LCD_NORMAL_MODE
- LCD_POWER_SAVING_MODE
- LCD_NORMAL_CURRENT_DRAIN
- LCD_LOW_CURRENT_DRAIN
- LCD_1_3_BIAS_DRIVE: 1/3 bias drive
- LCD_1_2_BIAS_DRIVE: 1/2 bias drive
- LCD_P0_OFF: turn off general purpose output port mode to use pins as segments instead
- LCD_P0_ON: turn on general purpose output port mode to use segments as output pins
- LCD_P1_OFF
- LCD_P1_ON
- LCD_P2_OFF
- LCD_P2_ON
- LCD_P3_OFF
- LCD_P3_ON
Download links
Library - LC75824 v1.0Datasheet - LCD Driver - LC75824E
Technical Manual - Samsung MM-N6, MM-N7
please write the full code of drive LCD with micro controller avr such as atmega8
ReplyDelete