Difference between revisions of "Lcd text"
(14 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | == | + | == Introduction == |
Hello fellows, i've finally decided to write little bit on this wiki page. So, what i'll be writing about ? For last few days i was playing with little lcd display and i finally managed to write some text with it ;) | Hello fellows, i've finally decided to write little bit on this wiki page. So, what i'll be writing about ? For last few days i was playing with little lcd display and i finally managed to write some text with it ;) | ||
Line 6: | Line 6: | ||
Here is video how does it look like: | Here is video how does it look like: | ||
http://www.youtube.com/watch?v=i1tZwHCo_g4 | http://www.youtube.com/watch?v=i1tZwHCo_g4 | ||
+ | <youtube width="320" height="240" align="left">i1tZwHCo_g4</youtube> | ||
+ | <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> | ||
− | + | == Schematics == | |
− | + | [[Image:Lcd.png|400px|Schematics]] | |
− | + | ||
− | + | == Source == | |
+ | |||
+ | <enscript lang=c> | ||
+ | #define F_CPU 1000000UL | ||
+ | #include <util/delay.h> | ||
+ | #include <avr/io.h> | ||
void bf(); | void bf(); | ||
Line 18: | Line 25: | ||
void in_d() | void in_d() | ||
− | |||
{ | { | ||
− | |||
DDRD = 0x00; | DDRD = 0x00; | ||
− | |||
} | } | ||
void out_d() | void out_d() | ||
− | |||
{ | { | ||
− | |||
DDRD = 0xff; | DDRD = 0xff; | ||
− | |||
} | } | ||
void in_c() | void in_c() | ||
− | |||
{ | { | ||
− | |||
DDRC = 0x00; | DDRC = 0x00; | ||
− | |||
} | } | ||
void out_c() | void out_c() | ||
− | |||
{ | { | ||
− | |||
DDRC = 0xff; | DDRC = 0xff; | ||
− | |||
} | } | ||
write_i() | write_i() | ||
− | |||
{ | { | ||
− | |||
PORTC = 4; | PORTC = 4; | ||
− | |||
PORTC = 0; | PORTC = 0; | ||
− | |||
} | } | ||
read_bf() | read_bf() | ||
− | |||
{ | { | ||
− | |||
// PORTC = 4; | // PORTC = 4; | ||
− | |||
PORTC = 6; | PORTC = 6; | ||
− | |||
} | } | ||
write_d() | write_d() | ||
− | |||
{ | { | ||
− | |||
PORTC = 5; | PORTC = 5; | ||
− | |||
PORTC = 1; | PORTC = 1; | ||
− | |||
} | } | ||
read_d() | read_d() | ||
− | |||
{ | { | ||
− | |||
// PORTC = 4; | // PORTC = 4; | ||
− | |||
PORTC = 7; | PORTC = 7; | ||
− | |||
} | } | ||
clear() | clear() | ||
− | |||
{ | { | ||
− | |||
PORTD = 1; // clear display | PORTD = 1; // clear display | ||
− | |||
write_i(); | write_i(); | ||
− | |||
bf(); | bf(); | ||
PORTD = 0b00000110; // entry mode | PORTD = 0b00000110; // entry mode | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
_delay_ms(100); | _delay_ms(100); | ||
− | |||
} | } | ||
void init(void) | void init(void) | ||
− | |||
{ | { | ||
− | |||
out_d(); | out_d(); | ||
− | |||
out_c(); | out_c(); | ||
− | |||
− | |||
_delay_ms(15); | _delay_ms(15); | ||
− | |||
PORTD = 0b00110000; // function set ( DL, N, F ) | PORTD = 0b00110000; // function set ( DL, N, F ) | ||
− | |||
write_i(); | write_i(); | ||
− | + | _delay_ms(4.1); | |
− | |||
− | _delay_ms(4.1); | ||
− | |||
PORTD = 0b00110000; // function set ( DL,N,F ) | PORTD = 0b00110000; // function set ( DL,N,F ) | ||
− | |||
write_i(); | write_i(); | ||
− | + | _delay_us(100); | |
− | |||
− | _delay_us(100); | ||
− | |||
PORTD = 0b00110000; // function set ( DL,N,F ) | PORTD = 0b00110000; // function set ( DL,N,F ) | ||
− | |||
write_i(); | write_i(); | ||
− | + | _delay_ms(4.1); | |
− | |||
− | _delay_ms(4.1); | ||
− | |||
PORTD = 0b00111000; // set N and F | PORTD = 0b00111000; // set N and F | ||
− | |||
write_i(); | write_i(); | ||
− | + | _delay_ms(4.1); | |
− | |||
− | _delay_ms(4.1); | ||
− | |||
PORTD = 0b00001000; // display off | PORTD = 0b00001000; // display off | ||
− | |||
write_i(); | write_i(); | ||
− | + | _delay_ms(4.1); | |
− | |||
− | _delay_ms(4.1); | ||
− | |||
PORTD = 0b00001100; // display on | PORTD = 0b00001100; // display on | ||
− | |||
write_i(); | write_i(); | ||
− | + | _delay_ms(4.1); | |
− | |||
− | _delay_ms(4.1); | ||
− | |||
PORTD = 0b00000110; // entry mode | PORTD = 0b00000110; // entry mode | ||
− | |||
write_i(); | write_i(); | ||
Line 179: | Line 120: | ||
void bf() | void bf() | ||
− | |||
{ | { | ||
− | |||
unsigned int bf; | unsigned int bf; | ||
− | |||
DDRB=0xff; | DDRB=0xff; | ||
Line 189: | Line 127: | ||
read_bf(); | read_bf(); | ||
− | |||
bf = PORTD; | bf = PORTD; | ||
− | |||
bf &= 0b10000000; | bf &= 0b10000000; | ||
− | + | while(bf) { | |
− | while(bf) { | ||
− | |||
read_bf(); | read_bf(); | ||
− | |||
bf = PORTD; | bf = PORTD; | ||
− | |||
bf &= 0b10000000; | bf &= 0b10000000; | ||
− | |||
PORTB=0xff; | PORTB=0xff; | ||
− | |||
_delay_ms(100); | _delay_ms(100); | ||
− | |||
PORTB=0x0; | PORTB=0x0; | ||
− | |||
_delay_ms(50); | _delay_ms(50); | ||
− | |||
} | } | ||
Line 219: | Line 146: | ||
void left() | void left() | ||
− | |||
{ | { | ||
− | |||
PORTD = 0x18; | PORTD = 0x18; | ||
− | |||
write_i(); | write_i(); | ||
− | |||
bf(); | bf(); | ||
− | |||
} | } | ||
int main() | int main() | ||
− | |||
{ | { | ||
− | |||
unsigned int i; | unsigned int i; | ||
init(); | init(); | ||
− | |||
_delay_ms(11); | _delay_ms(11); | ||
clear(); | clear(); | ||
− | |||
bf(); | bf(); | ||
while(1) { | while(1) { | ||
− | + | PORTD = 0x23; // # | |
− | |||
− | PORTD = 0x23; // # | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 101; // e | |
− | |||
− | PORTD = 101; // e | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 108; // l | |
− | |||
− | PORTD = 108; // l | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 101; // e | |
− | |||
− | PORTD = 101; // e | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 99; // c | |
− | |||
− | PORTD = 99; // c | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 116; // t | |
− | |||
− | PORTD = 116; // t | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 114; // r | |
− | |||
− | PORTD = 114; // r | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 111; // o | |
− | |||
− | PORTD = 111; // o | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | ||
− | |||
− | |||
PORTD = 110; // n | PORTD = 110; // n | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 105; // i | |
− | |||
− | PORTD = 105; // i | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 99; // c | |
− | |||
− | PORTD = 99; // c | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 115; // s | |
− | |||
− | PORTD = 115; // s | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 0x20; // " " | |
− | |||
− | PORTD = 0x20; // " " | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
PORTD = 0x28; // ( | PORTD = 0x28; // ( | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | + | PORTD = 97; // a | |
− | |||
− | PORTD = 97; // a | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
PORTD = 116; // t | PORTD = 116; // t | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 0x29; // ) | PORTD = 0x29; // ) | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 0x20; // " " | PORTD = 0x20; // " " | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 0x49; // I | PORTD = 0x49; // I | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 82; // R | PORTD = 82; // R | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 67; // C | PORTD = 67; // C | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 78; // N | PORTD = 78; // N | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 101; // e | PORTD = 101; // e | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 116; // t | PORTD = 116; // t | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 0x20; // " " | PORTD = 0x20; // " " | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 114; // r | PORTD = 114; // r | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 117; // u | PORTD = 117; // u | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 108; // l | PORTD = 108; // l | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
− | |||
− | |||
left(); | left(); | ||
− | |||
PORTD = 101; // e | PORTD = 101; // e | ||
− | |||
write_d(); | write_d(); | ||
− | |||
bf(); | bf(); | ||
− | |||
_delay_ms(1000); | _delay_ms(1000); | ||
Line 569: | Line 329: | ||
clear(); | clear(); | ||
− | |||
_delay_ms(500); | _delay_ms(500); | ||
} | } | ||
− | |||
return 0; | return 0; | ||
+ | } | ||
− | + | </enscript> |
Latest revision as of 01:23, 11 March 2010
Introduction
Hello fellows, i've finally decided to write little bit on this wiki page. So, what i'll be writing about ? For last few days i was playing with little lcd display and i finally managed to write some text with it ;) The lcd has HD44780 hitachi chip.
Here is video how does it look like:
http://www.youtube.com/watch?v=i1tZwHCo_g4
<youtube width="320" height="240" align="left">i1tZwHCo_g4</youtube>
Schematics
Source
<enscript lang=c>
- define F_CPU 1000000UL
- include <util/delay.h>
- include <avr/io.h>
void bf();
void in_d()
{
DDRD = 0x00;
}
void out_d() { DDRD = 0xff; }
void in_c() { DDRC = 0x00; }
void out_c() { DDRC = 0xff; }
write_i() { PORTC = 4; PORTC = 0; }
read_bf() { // PORTC = 4; PORTC = 6; }
write_d() { PORTC = 5; PORTC = 1; }
read_d() { // PORTC = 4; PORTC = 7; }
clear() { PORTD = 1; // clear display write_i(); bf();
PORTD = 0b00000110; // entry mode write_d(); bf();
_delay_ms(100); }
void init(void)
{
out_d();
out_c();
_delay_ms(15);
PORTD = 0b00110000; // function set ( DL, N, F )
write_i();
_delay_ms(4.1); PORTD = 0b00110000; // function set ( DL,N,F ) write_i();
_delay_us(100); PORTD = 0b00110000; // function set ( DL,N,F ) write_i();
_delay_ms(4.1); PORTD = 0b00111000; // set N and F write_i();
_delay_ms(4.1); PORTD = 0b00001000; // display off write_i();
_delay_ms(4.1); PORTD = 0b00001100; // display on write_i();
_delay_ms(4.1); PORTD = 0b00000110; // entry mode write_i();
}
void bf() { unsigned int bf; DDRB=0xff;
in_d();
read_bf(); bf = PORTD; bf &= 0b10000000;
while(bf) { read_bf(); bf = PORTD; bf &= 0b10000000; PORTB=0xff; _delay_ms(100); PORTB=0x0; _delay_ms(50); }
out_d();
}
void left() {
PORTD = 0x18; write_i(); bf(); }
int main()
{
unsigned int i;
init(); _delay_ms(11);
clear(); bf();
while(1) {
PORTD = 0x23; // # write_d(); bf(); _delay_ms(500);
PORTD = 101; // e write_d(); bf(); _delay_ms(500);
PORTD = 108; // l write_d(); bf(); _delay_ms(500);
PORTD = 101; // e write_d(); bf(); _delay_ms(500);
PORTD = 99; // c write_d(); bf(); _delay_ms(500);
PORTD = 116; // t write_d(); bf(); _delay_ms(500);
PORTD = 114; // r
write_d();
bf();
_delay_ms(500);
PORTD = 111; // o
write_d();
bf();
_delay_ms(500);
PORTD = 110; // n write_d(); bf(); _delay_ms(500);
PORTD = 105; // i write_d(); bf(); _delay_ms(500);
PORTD = 99; // c write_d(); bf(); _delay_ms(500);
PORTD = 115; // s write_d(); bf(); _delay_ms(500);
PORTD = 0x20; // " " write_d(); bf(); _delay_ms(500);
PORTD = 0x28; // ( write_d(); bf(); _delay_ms(500);
PORTD = 97; // a write_d(); bf(); _delay_ms(500);
PORTD = 116; // t write_d(); bf(); _delay_ms(500);
left(); PORTD = 0x29; // ) write_d(); bf(); _delay_ms(500);
left(); PORTD = 0x20; // " " write_d(); bf(); _delay_ms(500);
left(); PORTD = 0x49; // I write_d(); bf(); _delay_ms(500);
left(); PORTD = 82; // R write_d(); bf(); _delay_ms(500);
left(); PORTD = 67; // C write_d(); bf(); _delay_ms(500);
left(); PORTD = 78; // N write_d(); bf(); _delay_ms(500);
left(); PORTD = 101; // e write_d(); bf(); _delay_ms(500);
left(); PORTD = 116; // t write_d(); bf(); _delay_ms(500);
left(); PORTD = 0x20; // " " write_d(); bf(); _delay_ms(500);
left(); PORTD = 114; // r write_d(); bf(); _delay_ms(500);
left(); PORTD = 117; // u write_d(); bf(); _delay_ms(500);
left(); PORTD = 108; // l write_d(); bf(); _delay_ms(500);
left(); PORTD = 101; // e write_d(); bf(); _delay_ms(1000);
clear(); _delay_ms(500);
} return 0; }
</enscript>