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 &#62; 0);      }while (--x &#62; 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&#62;ke 15ms  TRISD=0x00;//salida  PORTD=0b00110000;//  enable();  delay_ms(400);//delay&#62;4.5ms  PORTD=0b00110000;//  enable();  delay_ms(7);//delay&#62;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&#60;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

[0] Índice de Mensajes

Ir a la versión completa