• Lunes 29 de Abril de 2024, 11:02

Autor Tema:  Rutina Lcd Para 16f874a....no Me Resulta...ayudaaa  (Leído 1503 veces)

ijfa

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Rutina Lcd Para 16f874a....no Me Resulta...ayudaaa
« en: Martes 8 de Agosto de 2006, 00:14 »
0
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
  1.  
  2.  
  3. #pragma bit RS @ PORTA.2//RS=0 entrada de instruccion---RS=1 entrada dato (caracter)
  4. #pragma bit RW @ PORTA.1// RW=0 escribe en el lcd ---RW=1 lee del modulo
  5. #pragma bit EN @ PORTA.0//habilitacion del modulo
  6.  
  7.  
  8.  
  9. //-------------controles LCD--------------
  10. #define    DISP_ON      0b00001100  //ENCIENDE display
  11. #define    DISP_OFF    0b00001000  //APAGA display
  12. #define    CLR_DISP    0b00000001  //BORRA display
  13. #define    CUR_HOME    0b00000010  //CURSOR a Pos CERO
  14. #define    INC_CUR      0b00000110  //INCREMENTA CURSOR
  15. #define    CUR_DER      0b00010100  //kursor a la derecha
  16. #define    DD_RAM_ADDR    0b10000000  //
  17. #define    DD_RAM_ADDR2  0b11000000  //
  18. #define    CG_RAM_ADDR    0b01000000  //
  19. #define   Blink      0b00001101  //PARAPADEO DE DISPLAY
  20. uns8 data;
  21. void delay_ms(long x)  //este delay_ms(1)=20.4 useg
  22. {
  23. long i;
  24.   do {
  25.   i = 7;
  26.   do{
  27.     i = i - 1;
  28.  
  29.       }
  30.     while (i &#62; 0);
  31.       }while (--x &#62; 0);
  32. }
  33.  
  34.  
  35.  
  36.  
  37.  
  38. void busy()
  39. {
  40.   TRISA=0x00;
  41.   RS=1;
  42.   RW=1;
  43.   TRISD=0xff;
  44.   EN=1;
  45.   delay_ms(10);
  46.   X:
  47.   if(PORTD.7==1)
  48.   {
  49.     delay_ms(10);
  50.     nop();
  51.     goto X;
  52.   }
  53.  
  54.   if(PORTD.7==0)
  55.   {
  56.     TRISD=0x00;
  57.     RS=0;
  58.     RW=0;
  59.    
  60.   }EN=0;
  61. }
  62.  
  63.  
  64. void enable()
  65. {
  66.   TRISA=0x00;
  67.   EN=1;
  68. //  delay_ms(1);
  69.   EN=0;
  70. }
  71.  
  72.    
  73. void LCD_inst(char i)
  74. {
  75.   busy();
  76.   EN=0;
  77.   TRISA=0x00;//PORTA salida
  78.   RS=0; RW=0;//programa RS=0, R/W=0  ---modo instruccion--
  79.   //delay_ms(100);
  80.   EN=1;
  81.   data=i&0b11111111;
  82.   PORTD=data;
  83.   EN=0;
  84.   //enable();
  85. }
  86. void LCD_dato(char d)
  87. {
  88.   busy();
  89.   EN=0;
  90.   TRISA=0x00;//PORTA salida
  91.   RS=1; RW=0;//programa RS=0, R/W=0  ---modo instruccion--
  92. //  delay_ms(100);
  93.   EN=1;
  94.   data=d&0b11111111;
  95.   PORTD=data;
  96.   LCD_inst(CUR_DER);
  97.   EN=0;
  98. //  enable();
  99. }
  100.  
  101. /*void pos(char p)
  102. {
  103.   EN=0;
  104.   RS=0;
  105.   RW=0;
  106.   LCD_inst(p);
  107. //  enviarLCD(0b0010000);
  108.  
  109. }*/
  110.  
  111. void iniport()
  112. {
  113.   ADCON1=0x07;
  114.   TRISA=0x00;
  115.   PORTA=0;
  116.   PORTD=0;
  117. }
  118.  
  119. void display(char a)//a=0 no parpadea--a=1 si parpadea
  120. {
  121.  
  122.   RS=0; RW=0;
  123.   if(a==0)
  124.   {
  125.     LCD_inst(0b00001110);
  126.   }
  127.   if(a==1)
  128.   {
  129.     LCD_inst(0x0f);
  130.   }
  131. }
  132.  
  133. void iniLCD()
  134. {
  135.   RS=0; RW=0;
  136.   delay_ms(900);//delay&#62;ke 15ms
  137.   TRISD=0x00;//salida
  138.   PORTD=0b00110000;//
  139.   enable();
  140.   delay_ms(400);//delay&#62;4.5ms
  141.   PORTD=0b00110000;//
  142.   enable();
  143.   delay_ms(7);//delay&#62;100us
  144.   PORTD=0b00111000;//function set
  145.     enable();
  146.   LCD_inst(DISP_OFF);//  PORTD=0b00001000;//display off
  147.   LCD_inst(DISP_ON);//  PORTD=0b00000001;//display on
  148.   //LCD_inst(CLR_DISP);//  PORTD=0b00000001;//display clear
  149.   LCD_inst(INC_CUR);//  PORTD=0b00000110;//entry mode set
  150.  
  151. }
  152.  
  153. void main()
  154. {
  155.   iniport();
  156.   iniLCD();
  157.   //LCD_inst(DISP_ON);
  158.  
  159.   char x;
  160.   x=0;
  161.     do{
  162.       LCD_inst(CLR_DISP);
  163.       LCD_inst(0x80);
  164.       LCD_dato('H');
  165.       //LCD_inst(INC_CUR);
  166.       LCD_dato('O');
  167.       //LCD_inst(INC_CUR);
  168. //      busy();
  169.      
  170.       //LCD_dato('A');
  171.       LCD_inst(INC_CUR);
  172. //      busy();
  173.       LCD_dato(' ');
  174.       //LCD_inst(INC_CUR);
  175. //      busy();
  176.       LCD_dato(' ');
  177.       //LCD_inst(INC_CUR);
  178. //      busy();
  179.       LCD_dato(':');
  180.       //LCD_inst(INC_CUR);
  181. //      busy();
  182.       LCD_dato('-');
  183.     //  LCD_inst(INC_CUR);
  184. //      busy();
  185.     //  delay_ms(100);
  186.       display(1);
  187.       LCD_dato('D');
  188.   //    enable();
  189.  
  190.  
  191.   }
  192. while(++x&#60;3);}
  193. /*
  194. void main()
  195. {
  196.  
  197.   delay_ms(7);
  198.  
  199. }*/
  200.  
  201.  

bueno se daran kuenta ke tengo varias kosas komo komentario pues he buskado el error ke tengo...o los errores..jeje.....salu2