??? 02/02/08 14:35 Modified: 02/02/08 14:38 Read: times |
#150222 - It worked! Responding to: ???'s previous message |
Yey :)
I just took a resistor without thinking it would work and just warping its legs around the pins. tieing d0-d3 to ground, didn't work. tried to VCC - WORKS :D now ill just solder it :) Maybe this model does not have pullups :O (Edit, while not connected, voltage on data pins is 3.5V - could be not enough) Anyway it works :D Heres the code that works: #include <at89x52.h> #include <stdio.h> #include <string.h> #define LCD_RS P3_6 #define LCD_E P3_7 #define LCD_BUS_PORT P0 //Delay in ms (at 12MHZ Crystal) void delay_ms(unsigned int ms) { TMOD = (TMOD & 0xF0) | 0x01; //Set Timer0 to mode 1 (16 bit counter) TR0 = 1; //Start the timer] while (ms > (unsigned char) 64) { TH0 = 0x06; TL0 = 0x00; //Reset the timer count to -64000 (Will take 64ms to complete) TF0 = 0; //Reset overflow flag while (TF0 != 1); //Wait until Timer1 overflows ms -= (unsigned char) 64; } while (ms != (unsigned char) 0) { TH0 = 0xFC; TL0 = 0x18; //Reset the timer count to -1000 (Will take 1ms to complete) TF0 = 0; //Reset overflow flag while (TF0 != 1); //Wait until Timer1 overflows ms--; } TR0 = 0; //Stop the timer } void E_clk() { delay_ms(1); LCD_E =0; delay_ms(1); LCD_E=1; delay_ms(1); LCD_E =0; } void main() { unsigned char buffer[] = "Hello world"; unsigned char *p; unsigned int i; //Toggle led for (i = 0; i < 2; i++) { P2_7 = 1; delay_ms(50); P2_7 = 0; delay_ms(50); } //Power on //Wait more than 15 msecs after power is applied. delay_ms(40); LCD_RS = 0; //instructions LCD_BUS_PORT = 0x30; E_clk(); delay_ms(10); LCD_BUS_PORT = 0x30; E_clk(); LCD_BUS_PORT = 0x30; E_clk(); LCD_BUS_PORT = 0x20; E_clk(); //0x28 (4Bit mode,2Lines,Small font) LCD_BUS_PORT = 0x20; E_clk(); LCD_BUS_PORT = 0x80; E_clk(); //0x08 (Display off) LCD_BUS_PORT = 0x00; E_clk(); LCD_BUS_PORT = 0x80; E_clk(); //0x01 (Clear the display) LCD_BUS_PORT = 0x00; E_clk(); LCD_BUS_PORT = 0x10; E_clk(); delay_ms(10); //0x06 (Entry mode - no shifting, auto increase) LCD_BUS_PORT = 0x00; E_clk(); LCD_BUS_PORT = 0x60; E_clk(); //0x0E (Display on) LCD_BUS_PORT = 0x00; E_clk(); LCD_BUS_PORT = 0xE0; E_clk(); LCD_RS = 1; p = buffer; while (*p) { LCD_BUS_PORT = *p; E_clk(); LCD_BUS_PORT = *p << 4; E_clk(); p++; } while(1); } |