Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronic Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Register Log in

[SOLVED] LCD Shift Left and Shift Right Text Problem

Status
Not open for further replies.

tahir4awan

Full Member level 4
Joined
Nov 29, 2010
Messages
190
Helped
16
Reputation
32
Reaction score
16
Trophy points
1,308
Activity points
2,893
Hi guys I am usig MikroC Compiler with PIC16F887 microcontroller. I have written a program to move text left and right. The text is moving left and right but the problem is when text moves left the moved part of the text comes from right.
See the picture below,



I want the text moves towards left completely so that LCD become blank then text moves in.But as you can see in the picture when text moves left it comes in from right. Note that it happens for both left and right but I am only giving left move example.

The program is,
----------------------------------------------------------------------------------------------------------
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

char txt1[] = "mikroElektronika";
char txt2[] = "EasyPIC6";
char txt3[] = "Lcd4bit";
char txt4[] = "example";

char i; // Loop variable

void Move_Delay() { // Function used for text moving
Delay_ms(500); // You can change the moving speed here
}

void main(){
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;

Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,6,txt3); // Write text in first row

Lcd_Out(2,6,txt4); // Write text in second row
Delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR); // Clear display

Lcd_Out(1,1,txt1); // Write text in first row
Lcd_Out(2,5,txt2); // Write text in second row

Delay_ms(1000);

// Moving text


while(1) { // Endless loop
for(i=0; i<13; i++) { // Move text to the left 7 times
Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
}

for(i=0; i<13; i++) { // Move text to the right 7 times
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}
}
}
----------------------------------------------------------------------------------------------------------
Any idea
 

grieblm

Member level 4
Joined
May 7, 2011
Messages
75
Helped
18
Reputation
36
Reaction score
18
Trophy points
1,308
Location
Georgetown, Canada
Activity points
1,734
My guess would be that the Lcd_Cmd(_LCD_SHIFT_LEFT) function is changing the viewing window into the LCD's RAM (it isn't really shifting the characters). Perhaps this is just a bug in the simulator? Does the real LCD behave this way?

It may be by shifting this window too far, you start seeing the end of the RAM buffer and thus your characters become visible again.

You may need to implement your own function to do what you want.
 
Last edited:

betwixt

Super Moderator
Staff member
Joined
Jul 4, 2009
Messages
14,460
Helped
4,745
Reputation
9,505
Reaction score
4,520
Trophy points
1,393
Location
Aberdyfi, West Wales, UK
Activity points
123,318
Check the RAM map of the LCD module, it's quite common for the top line memory to be longer than the physical display line and it may be wrapping around to the third line. Same with the second and last lines.
As @grieblm states, the shift commands just slide the viewable part of the RAM along the memory map.

It isn't easy to fix, the simplest way is to treat each line as a RAM buffer in your program then transfer it to the LCD each time you update it, in other words do the shift in your own software then update the whole display in one go.

Brian.
 

tahir4awan

Full Member level 4
Joined
Nov 29, 2010
Messages
190
Helped
16
Reputation
32
Reaction score
16
Trophy points
1,308
Activity points
2,893
You guys are right the MikroC manual says about these commands, that

"_LCD_SHIFT_LEFT Shift display left without changing display data RAM
_LCD_SHIFT_RIGHT Shift display right without changing display data RAM
"
 

Status
Not open for further replies.
Toggle Sidebar

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top