Proba con un cristal de 4MHz, a mí nunca me andan los lcd con mayor velocidad que esa.
Saludos
Saludos
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
entonces que puedo hacer... ya estoy arta... no encuentro el error... plis que alguien me ayude...
george.manson.69.
Recuerdas el favor que te pedi al respecto del pequeño publik .
del curso de mcu..
Me podrias colaborar..???
Gracias amigo..
hola george.manson quisiera saber como agregar esa libreria de keypath 4x4 a mi software ccs para asi trabajar mas facilmente podrias explicar el codigo de ejemplo que encontrastehola ingdenis1 encontre esta liberia de un teclado 4x4 en google...a ver si te sirve!
Código://///////////////////////////////////////////////////////////////////////// //// KBD_LIB.C by Redraven //// //// //// //// Derived from KBDD.C //// //// Generic keypad scan driver //// //// //// //// kbd_init() Must be called before any other function. //// //// //// //// c = kbd_getc(c) Will return a key value if pressed or /0 if not //// //// This function should be called frequently so as //// //// not to miss a key press. //// //// //// /////////////////////////////////////////////////////////////////////////// //// (C) Copyright 1996,1997 Custom Computer Services //// //// This source code may only be used by licensed users of the CCS C //// //// compiler. This source code may only be distributed to other //// //// licensed users of the CCS C compiler. No other use, reproduction //// //// or distribution is permitted without written permission. //// //// Derivative programs created using this software in object code //// //// form are not restricted in any way. //// //////////////////////////////////////////////////////////////////////////// ////////////////// The following defines the keypad layout on port D // Un-comment the following define to use port B #define use_portb_kbd TRUE // Make sure the port used has pull-up resistors (or the LCD) on // the column pins #if defined(__PCH__) #if defined use_portb_kbd #byte kbd = 0xF81 // This puts the entire structure #else #byte kbd = 0xF83 // This puts the entire structure #endif #else #if defined use_portb_kbd #byte kbd = 6 // on to port B (at address 6) #else #byte kbd = 8 // on to port D (at address 8) #endif #endif #if defined use_portb_kbd #define set_tris_kbd(x) set_tris_b(x) #else #define set_tris_kbd(x) set_tris_d(x) #endif //Keypad connection: (for example column 0 is B0) #define COL0 (1 << 0) // PIN_B0 #define COL1 (1 << 1) // PIN_B1 #define COL2 (1 << 2) // PIN_B2 #define COL3 (1 << 3) // PIN_B3 #define ROW0 (1 << 4) // PIN_B4 #define ROW1 (1 << 5) // PIN_B5 #define ROW2 (1 << 6) // PIN_B6 #define ROW3 (1 << 7) // PIN_B7 #define ALL_ROWS (ROW0|ROW1|ROW2|ROW3) #define ALL_PINS (ALL_ROWS|COL0|COL1|COL2|COL3) // Keypad layout: char const KEYS[4][4] = {{'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'}}; #define KBD_DEBOUNCE_FACTOR 33 // Set this number to apx n/333 where // n is the number of times you expect // to call kbd_getc each second void kbd_init() { } char kbd_getc( ) { static byte kbd_call_count; static short int kbd_down; static char last_key; static byte col; byte kchar; byte row; kchar='\0'; if(++kbd_call_count>KBD_DEBOUNCE_FACTOR) { switch (col) { case 0 : set_tris_kbd(ALL_PINS&~COL0); kbd=~COL0&ALL_PINS; break; case 1 : set_tris_kbd(ALL_PINS&~COL1); kbd=~COL1&ALL_PINS; break; case 2 : set_tris_kbd(ALL_PINS&~COL2); kbd=~COL2&ALL_PINS; break; case 3 : set_tris_kbd(ALL_PINS&~COL3); kbd=~COL3&ALL_PINS; break; } if(kbd_down) { if((kbd & (ALL_ROWS))==(ALL_ROWS)) { kbd_down=false; kchar=last_key; last_key='\0'; } } else { if((kbd & (ALL_ROWS))!=(ALL_ROWS)) { if((kbd & ROW0)==0) row=0; else if((kbd & ROW1)==0) row=1; else if((kbd & ROW2)==0) row=2; else if((kbd & ROW3)==0) row=3; last_key =KEYS[row][col]; kbd_down = true; } else { ++col; if(col==4) col=0; } } kbd_call_count=0; } set_tris_kbd(ALL_PINS); return(kchar); }
y este es un ejemplo donde al aplanar una tecla del teclado 4x4 te lo envia a la compu!
(yo no lo hice, por ahi me lo encontre jeje)
Código:#include <16f876a.h> #fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT #use delay(clock=4000000) #use fast_io(b) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) #include "kbd_lib.c" void main(){ char mitecla=0; kbd_init(); printf("\rKeyboard 4x4 monitor\r\r"; do { mitecla=kbd_getc(); if(mitecla!=0){ putc(mitecla); } } while (TRUE); }
hola george.manson quisiera saber como agregar esa libreria de keypath 4x4 a mi software ccs para asi trabajar mas facilmente podrias explicar el codigo de ejemplo que encontraste
#define use_porte_lcd TRUE //LCD conectado al puerto e
struct lcd_pin_map { // This structure is overlayed
BOOLEAN enable; //MODIFICADA PARA EASYPIC--------------------
BOOLEAN rs; //MODIFICADA PARA EASYPIC--------------------
BOOLEAN unused; // on to an I/O port to gain
BOOLEAN unused1; // access to the LCD pins.
// The bits are allocated from
// low order up. ENABLE will
int data : 4; // be pin B3-------------------------
} lcd;
#byte lcd = 0xF84
#define set_tris_lcd(x) set_tris_e(x)
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line
byte const LCD_INIT_STRING[4] =
{
0x28 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0xf, // Display on
1, // Clear display
6 // Increment cursor
};
//-------------------------------------
struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
void lcd_send_nibble(byte nibble)
{
lcd.data = nibble;
delay_cycles(1);
lcd.enable = 1;
delay_us(2);
lcd.enable = 0;
}
//-----------------------------------
//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(byte address, byte n)
{
lcd.rs = 0;
delay_us(3000);
lcd.rs = address;
delay_cycles(1);
lcd.enable = 0;
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}
//---------------------------------------
void lcd_init(void)
{
BYTE i;
set_tris_lcd(LCD_WRITE);
lcd.rs = 0;
lcd.enable = 0;
delay_ms(50);
lcd_send_nibble(2);
delay_ms(5);
for(i=0;i<=3;++i)
{
lcd_send_byte(0,LCD_INIT_STRING[i]);
delay_ms(5);
}
}
//----------------------------
void lcd_gotoxy(byte x, byte y)
{
byte address;
if(y != 1)
address = lcd_line_two;
else
address=0;
address += x-1;
lcd_send_byte(0, 0x80 | address);
}
//-----------------------------
void lcd_putc(char c)
{
switch(c)
{
case '\f': //limpia pantalla
lcd_send_byte(0,1);
delay_ms(2);
break;
case '\n': //cambio de linea
lcd_gotoxy(1,2);
break;
case '\b': //retrocede 1 caracter
lcd_send_byte(0,0x10);
break;
default:
lcd_send_byte(1,c);
break;
}
}
//------------------------------
void lcd_setcursor_vb(short visible, short blink)
{
lcd_send_byte(0, 0xC|(visible<<1)|blink);
}
Hola que tal yo solucione mi problema si alguien necesita el codigo aqui se los dejo... gracias igual por su ayuda...
Hola a todos
estoy programando en Ccs un 16f877a y la cosa es que necesito leer los bits del puerto E individualmente, tengo conectadas ahi resistencias y botones y de ahi a la fuente, tengo algo como esto
port_e_pullups(TRUE);
set_tris_E=(0b00000111);
if(bit_test(9,1))
{
// aqui irian las instrucciones en caso de que se este presionando el boton conectado al pin RE0
}
while(true){}
}
se que estoy haciendo algo mal porque no me sale o no se que me falte o que onda
mucho agradecere su ayuda
x=input_a() & 0b00000111; //Tomo solo los tres switches
switch(x){
case 0: //sentencia
case 1: //sentecnia
case ....
case 7: //ya que los tres interruptores toman un valor decimal de 7 cuando estan conectados los tres interruptores
}
if(INPUT(PIN_E0))
{
//insertar aqui código
}
while(TRUE)
{
pulsador=INPUT(PIN_E0);
if(pulsador==1)
{
//inserte aqui codigo
}
}
#bit BOTON = PORTE.0
if(BOTON)
{
//inserte aquí su codigo
}
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#include <LCD420.c>
#define use_portb_lcd TRUE
void main() {
lcd_init();
lcd_putc("\f Hernan Alberto A. \n");
lcd_putc("Ejemplo LCD en CCS C");
}