??? 08/04/04 06:25 Read: times |
#75379 - Reply to Ijaz: Comments + my code... Responding to: ???'s previous message |
Ijaz: thanks for your message! Yes, same hardware (8051 board, same LCD circuit also) and always on Keil uVision eval.
-Could not find complete C program for LCD after searching here, only parts of a program not ready for use more or less. My code, with my own best attempt at a simple functional program (min. functions, simple for test purposes): ------------------------------------------------------ /* | "LCDtest4.c" | LCD command/data transmittal | program for ATMEL (Temic)T80C51 | microcontroller ====================================== | Tests operation of a connected 2x16 | LCD 44780-based display module, 8 bit | dat/cont. sent, 2 control bits: | RS = control/data = 0/1 = P3.2 | E = enable = P3.4 | R/W* = P3.3 | P1 = output | (P3 = output) | IE = interrupts disabled |-------------------------------------- | 8/1/04 Marty McLeod | IDE: Keil uVision2 Eval V2.40 --------------------------------------*/ #include <reg5101.h> unsigned int i; unsigned int j; //Function prototypes here void SEND_DATA_BYTE(void); void SEND_CONT_BYTE(void); void BUSYF_CHK_WAIT(void); //Begin main of program void main(void) { // Initialization of 8051: IE = 0; //Interrupts disabled P1 = 0x00; //Set port 1 to OUTPUT P3 = 0x00; //Set port 3, all bits, to OUTPUT // SP = 0x40; //Stack pointer at 40h PSW = 0; //Clear program status word PSW // P3_2 = 0; //RS, P3_3 = 0; //R/W, P3_4 = 0; //& E cleared first // /* Initialize LCD..... */ //1: Function set //(8 bit data, 2 lines, font=5x8 pixels) P1 = 0x38; SEND_CONT_BYTE(); //Now clear output P1 = 0x00; //Wait for not busy BUSYF_CHK_WAIT(); //2: Clear LCD P1 = 0x01; SEND_CONT_BYTE(); //Now clear output P1 = 0x00; //Wait for not busy BUSYF_CHK_WAIT(); //3: Disable cursor P1 = 0x0C; SEND_CONT_BYTE(); //Now clear output P1 = 0x00; //Wait for not busy BUSYF_CHK_WAIT(); //4: Entry mode set //Set mode to 'right' P1 = 0x06; SEND_CONT_BYTE(); //Now clear output P1 = 0x00; //Wait for not busy BUSYF_CHK_WAIT(); /* Data output section */ /* Characters sent are 'U' and 'A' */ P1 = 0x55; //Send 'U' ASCII to LCD SEND_DATA_BYTE(); //Now clear output P1 = 0x00; //Wait for not busy BUSYF_CHK_WAIT(); P1 = 0x41; //Send 'A' ASCII to LCD SEND_DATA_BYTE(); //Now clear output P1 = 0x00; //Wait for not busy BUSYF_CHK_WAIT(); //Enter continous loop for test purpose /*-------END------*/ while(1) { } }//End of MAIN /** Define functions below **/ void SEND_CONT_BYTE(void) { P3_2 = 0; P3_4 = 1; P3_4 = 0; } void SEND_DATA_BYTE(void) { P3_2 = 1; P3_4 = 1; P3_4 = 0; // //Now reset to Control format on RS bit.. P3_2 = 0; } void BUSYF_CHK_WAIT(void) { //Set P1 to input P1 = 0xFF; //Set R/W = 1 (read mode) P3_3 = 1; //Wait for not busy while(P1_7) { } //Set P1 back to output P1 = 0x00; //Clear R/W P3_3 = 0; } /** END OF FILE **/ |