Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics 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.

Interfacing JHD162 LCD with ATMEGA8

Status
Not open for further replies.

Nicole575

Newbie level 1
Joined
Aug 18, 2015
Messages
1
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
39
I made a simple circuit to interface 16X2 LCD with atmega8 micro-controller.Everything seems to work fine but when i tried to display a text in second line of the LCD, i get nothing.The text doesn't get displayed. I believe I've send proper command and all but still i don't get anything displayed in the second line. Then i tried to display a single character in the middle portion of the first line and same thing happens here.Nothing gets displayed.The cursor seems to appear but the text doesn't.
Here is the code.


Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
 * LCD_interfacing_along_with_UI.c
 *
 * Created: 8/12/2015 3:42:05 PM
 *  Author: Aastha
 */ 
 
 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
 
 
/* All the macro definitions related to LCD */
#define RS      PB0
#define RW      PB1
#define E       PB2
#define SW_1_SELECT PC0
#define SW_2_UP     PC1
#define SW_3_DOWN   PC2
#define SW_4_LEFT   PC3
#define SW_5_RIGHT  PC4
#define data    PORTD
#define SET_RS()    (PORTB|=(1<<RS))     
#define SET_RW()    (PORTB|=(1<<RW))
#define SET_E()     (PORTB|=(1<<E))
#define RESET_RS()  (PORTB&=~(1<<RS))
#define RESET_RW()  (PORTB&=~(1<<RW))
#define RESET_E()   (PORTB&=~(1<<E))
void initalize_lcd(unsigned char cmd1,unsigned char cmd2,unsigned char cmd3);
void lcd_busy(void);
void write_string( char *str);
void write_data(unsigned char datas);
void send_command(unsigned char cmd);
void display_multiple_options(void);
 
 
int main(void)
{
    DDRD=0b11111111;            //making PORTD as output port for data
    DDRB=0b00000111;            //making PORTB for control signals
    DDRC=0b0000000;             //making PORTC as input port for switches
    PORTC=0b1111111;
    initalize_lcd(0x38,0x01,0x0E);
    _delay_ms(50);
    send_command(0xC5);
    _delay_ms(50);
    write_string("GUITAR");
    _delay_ms(1000);
    /*initalize_lcd(0x30,0x01,0x0E);
    send_command(0xC0);*/
   
    while(1)
    {
        /*if(bit_is_clear(PINC,SW_1_SELECT))
        {
            display_multiple_options();
            break;
            /*if(bit_is_clear(PINC,SW_2_UP))
            {
                
            }
            else if(bit_is_clear(PINC,SW_3_DOWN))
            {
                
            }
            else if(bit_is_clear(PINC,SW_4_LEFT))
            {
                
            }
            else if(bit_is_clear(PINC,SW_5_RIGHT))
            {
                
            }
            else
            {
                
            }
            
        }           
        else
        {
            
            
         write_string("...PRESS SELECT BUTTON ");
            _delay_ms(1000);
         send_command(0x18);
                 
        }        
 
    }
    
    return 0;*/
    }
}   
void initalize_lcd(unsigned char cmd1,unsigned char cmd2,unsigned char cmd3)
{
    send_command(cmd1);     //to display content in one/two line in 5x7 matrix
    _delay_ms(1);           
    send_command(cmd2);     //clearing the display including/not including RAM data
    _delay_ms(1);
    send_command(cmd3);     //making cursor and display on
    _delay_ms(1);
    
}
void send_command(unsigned char cmd)
{
    lcd_busy();
    data=cmd;
    SET_E();        //setting the enable to latch data to data lines of LCD
    RESET_RS();     //resetting register select to choose command register
    RESET_RW();     //resetting R/W to write commands to data lines of LCD
    _delay_ms(50);
    RESET_E();      //resetting enable to send data to LCD
    _delay_ms(50);
}
void write_string( char *str)
{
    int i=0;
    while(str[i]!='\0')
    {
        write_data(str[i]);
        i++;
    }
}
void write_data(unsigned char datas)
{
    lcd_busy();
    data=datas;
    SET_E();
    RESET_RW();
    SET_RS();
    _delay_ms(1);
    RESET_E();
}
void lcd_busy()
{
    DDRD=0b00000000;
    RESET_RS();      //resetting RS to select command register
    SET_RW();       //setting RW to read from LCD to micro controller
    while(PORTD>=0x80)      // when pin PD7 is 1 the LCD is busy
    {
        SET_E();
        _delay_ms(1);
        RESET_E();
    }
    DDRD=0b11111111;
    
}
/*void display_multiple_options()
{
    initalize_lcd(0X38,0x01,0x0E);
    _delay_ms(50);
    send_command(0X85);
    _delay_ms(1);
    write_string("GUITAR");
    send_command(0xC0);
    _delay_ms(1);
    write_string("AA");
    _delay_ms(100);
}*/

 
Last edited by a moderator:

KlausST

Super Moderator
Staff member
Joined
Apr 17, 2014
Messages
19,777
Helped
4,350
Reputation
8,709
Reaction score
4,316
Trophy points
1,393
Activity points
130,886
Hi,

Most of the displays have an offset in the addres to the second line.
Please read datasheet.

Klaus
 
Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top