Programación Específica > Programación en C
Rutina Lcd Para 16f874a....no Me Resulta...ayudaaa
(1/1)
ijfa:
Hola a todos aqui estoy con un problemita para algunos facil pero para mi me tiene hasta el cuello....lo ke pasa es ke el programa ke hice para kontrolar el lcd no me funciona...aki les kuelgo el codigo en C (cc5x) por favor si alguien es tan amable de ayudarme a corregirlo....gracias.
El control lo hago kon RA<0:2> para E,R/W,RS respectivamente...los datos los envio por el puerto D del 16f874a el lcd es de 1x16....pero trabaja igual ke el de 2x16.
--- Código: Text --- #pragma bit RS @ PORTA.2//RS=0 entrada de instruccion---RS=1 entrada dato (caracter)#pragma bit RW @ PORTA.1// RW=0 escribe en el lcd ---RW=1 lee del modulo#pragma bit EN @ PORTA.0//habilitacion del modulo //-------------controles LCD--------------#define DISP_ON 0b00001100 //ENCIENDE display#define DISP_OFF 0b00001000 //APAGA display#define CLR_DISP 0b00000001 //BORRA display#define CUR_HOME 0b00000010 //CURSOR a Pos CERO#define INC_CUR 0b00000110 //INCREMENTA CURSOR#define CUR_DER 0b00010100 //kursor a la derecha#define DD_RAM_ADDR 0b10000000 //#define DD_RAM_ADDR2 0b11000000 //#define CG_RAM_ADDR 0b01000000 //#define Blink 0b00001101 //PARAPADEO DE DISPLAYuns8 data;void delay_ms(long x) //este delay_ms(1)=20.4 useg {long i; do { i = 7; do{ i = i - 1; } while (i > 0); }while (--x > 0);} void busy(){ TRISA=0x00; RS=1; RW=1; TRISD=0xff; EN=1; delay_ms(10); X: if(PORTD.7==1) { delay_ms(10); nop(); goto X; } if(PORTD.7==0) { TRISD=0x00; RS=0; RW=0; }EN=0;} void enable(){ TRISA=0x00; EN=1;// delay_ms(1); EN=0;} void LCD_inst(char i){ busy(); EN=0; TRISA=0x00;//PORTA salida RS=0; RW=0;//programa RS=0, R/W=0 ---modo instruccion-- //delay_ms(100); EN=1; data=i&0b11111111; PORTD=data; EN=0; //enable();}void LCD_dato(char d){ busy(); EN=0; TRISA=0x00;//PORTA salida RS=1; RW=0;//programa RS=0, R/W=0 ---modo instruccion--// delay_ms(100); EN=1; data=d&0b11111111; PORTD=data; LCD_inst(CUR_DER); EN=0;// enable();} /*void pos(char p){ EN=0; RS=0; RW=0; LCD_inst(p);// enviarLCD(0b0010000); }*/ void iniport(){ ADCON1=0x07; TRISA=0x00; PORTA=0; PORTD=0;} void display(char a)//a=0 no parpadea--a=1 si parpadea{ RS=0; RW=0; if(a==0) { LCD_inst(0b00001110); } if(a==1) { LCD_inst(0x0f); }} void iniLCD(){ RS=0; RW=0; delay_ms(900);//delay>ke 15ms TRISD=0x00;//salida PORTD=0b00110000;// enable(); delay_ms(400);//delay>4.5ms PORTD=0b00110000;// enable(); delay_ms(7);//delay>100us PORTD=0b00111000;//function set enable(); LCD_inst(DISP_OFF);// PORTD=0b00001000;//display off LCD_inst(DISP_ON);// PORTD=0b00000001;//display on //LCD_inst(CLR_DISP);// PORTD=0b00000001;//display clear LCD_inst(INC_CUR);// PORTD=0b00000110;//entry mode set } void main(){ iniport(); iniLCD(); //LCD_inst(DISP_ON); char x; x=0; do{ LCD_inst(CLR_DISP); LCD_inst(0x80); LCD_dato('H'); //LCD_inst(INC_CUR); LCD_dato('O'); //LCD_inst(INC_CUR);// busy(); //LCD_dato('A'); LCD_inst(INC_CUR);// busy(); LCD_dato(' '); //LCD_inst(INC_CUR);// busy(); LCD_dato(' '); //LCD_inst(INC_CUR);// busy(); LCD_dato(':'); //LCD_inst(INC_CUR);// busy(); LCD_dato('-'); // LCD_inst(INC_CUR);// busy(); // delay_ms(100); display(1); LCD_dato('D'); // enable(); }while(++x<3);}/*void main(){ delay_ms(7); }*/
bueno se daran kuenta ke tengo varias kosas komo komentario pues he buskado el error ke tengo...o los errores..jeje.....salu2
Navegación
Ir a la versión completa