| tesla80 
 
 
 Joined: 23 May 2007
 Posts: 81
 
 
 
			    
 
 | 
			
				| 16x1 (GDM1601) Text Lcd Driver for PIC |  
				|  Posted: Wed May 23, 2007 3:35 pm |   |  
				| 
 |  
				| Hi All, 
 16x1 (GDM1601) Text Lcd Driver for PIC
 
 
   
 16x1_lcd_gdm1601.c
 
  	  | Code: |  	  | /* GDM1601(16 Character, 1 Row Text LCD) Driver for PIC
 Eray Ozturk 'SpeedyX' - 14.09.2006 00:33
 Mail: erayozturk1(at)gmail.com
 
 lcd_init                    : init (first and once)
 lcd_command(x)              : send a command
 lcd_data(x)                 : send a character
 printf(lcd_data,"SpeedyX"); : send a word
 
 lcd_goto1                   : cursor goto home
 lcd_ramch                   : lcd line 2 (after 8th char)
 lcd_clrscr                  : clear screen
 
 PIC             LCD
 lcd_port.0      D4
 lcd_port.1      D5
 lcd_port.2      D6
 lcd_port.3      D7
 lcd_port.4      RS
 lcd_port.5      E      lcd RW pin -> ground
 
 */
 
 #define lcd_port     portb
 
 #define t 2 // enable wait time (us)
 
 #define lcd_putc(c)  lcd_data(c)
 #define lcd_goto1    lcd_command(0b10000000)      // lcd goto home
 #define lcd_ramch    lcd_command(0b11000000)      // lcd line 2
 #define lcd_clrscr   lcd_command(0b00000001);bekle_ms(2)   // lcd clear
 
 void bekle_ms(int x) {
 delay_ms(x);
 }
 
 void bekle_us(int y) {
 delay_us(y);
 }
 
 void lcd_gonder(char alt4, int1 tip) {
 int ust4;
 ust4 = alt4 & 0b11110000;
 ust4 = ust4 >> 4;
 ust4 &= 0x0F;
 alt4 &= 0x0F;
 if(tip==1) ust4 |= 0b00010000;
 lcd_port=ust4;
 bekle_us(t);
 lcd_port |= 0b00100000; // enable=1
 bekle_us(t);
 lcd_port &= 0b11011111; // enable=0
 bekle_us(t);
 if(tip==1) alt4 |= 0b00010000;
 lcd_port=alt4;
 bekle_us(t);
 lcd_port |= 0b00100000; // enable=1
 bekle_us(t);
 lcd_port &= 0b11011111; // enable=0
 bekle_us(t);
 }
 
 void lcd_data(char c) { lcd_gonder(c,1); }
 
 void lcd_command(char c) { lcd_gonder(c,0); }
 
 void lcd_scroll_right(){lcd_command(0x1E);}
 
 void lcd_scroll_left(){lcd_command(0x18);}
 
 void lcd_gotox(int x) {
 int adr=0x80;
 if(x>8) adr=0xC0;
 lcd_command(adr|(x-1));
 }
 
 void lcd_init() {
 bekle_ms(20);
 lcd_command(0b00000010);
 lcd_command(0b00101000);
 bekle_us(50);
 lcd_command(0b00001100);
 bekle_us(50);
 lcd_clrscr;
 lcd_command(0b00000110);
 bekle_ms(10);
 }
 | 
 
 main.c
 
  	  | Code: |  	  | #include <16F88.h> #FUSES INTRC_IO,NOWDT,NOMCLR,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG,NOPROTECT
 #use delay(clock=4000000)
 
 #use  fast_io(A)
 #use  fast_io(B)
 #byte porta = 5
 #byte portb = 6
 
 #include <16x1_lcd_gdm1601.c>
 
 void main() {
 setup_oscillator(OSC_4MHZ);
 set_tris_a(0);
 set_tris_b(0);
 porta=0; portb=0;
 
 lcd_init();
 
 printf(lcd_data,"SpeedyX GDM1601");
 //printf(lcd_data,"SpeedyX "); lcd_ramch; printf(lcd_data,"GDM1601"); // for lcd-s with 8-8 ram structures
 
 for(;;); // loop forever
 }
 
 | 
 |  |