Paso 3: El código y subir a la tabla
Creamos el código para este experimento,
Yo AVR Studio para él y cargado con USBASP, ver la foto
código completo:
#include < avr/io.h >
#include < util/delay.h >
estructura para permitir las operaciones de campo de bit, nombre conversiones: PORTA.0 -> PORTB.7 PORT_A.b0 -> PORT_B.b7
typedef struct {uint8_t b0:1;
b1:1 de uint8_t;
b2:1 de uint8_t;
b3:1 de uint8_t;
b4:1 de uint8_t;
b5:1 de uint8_t;
b6:1 de uint8_t;
b7:1 de uint8_t; } los pedacitos;
definir todos los puertos de su microcontrolador, añadir más puertos dependiendo de los puertos disponibles del mcu
#define PORT_D (* (bits volátiles *) & PORTD)
#define PIN_D (* (bits volátiles *) & PIND)
#define DDR_D (* (bits volátiles *) & DDRD)
#define PORT_G (* (bits volátiles *) & PORTG)
#define PIN_G (* (bits volátiles *) & PING)
#define DDR_G (* (bits volátiles *) & DDRG)
Frecuencia de reloj de mención aquí
#define _XTAL_FREQ 8000000
#define lcd_data_pin PORTA
#define en PORT_D.b0
#define rs PORT_D.b1
#define rw PORT_D.b2
void lcd_init();
void lcd_data (unsigned char data1);
void lcd_cmd (unsigned char cmd);
void lcd_control (unsigned char cmdordata);
void lcd_string (unsigned char * str);
void lcd_init() {}
lcd_cmd(0x30);
_delay_ms(10);
lcd_cmd(0x38);
_delay_ms(10);
lcd_cmd(0x0f);
_delay_ms(10);
lcd_cmd(0x80);
_delay_ms(10);
}
void lcd_data (unsigned char data1)
{
lcd_data_pin = data1; / / & 0x0F;
at = 1;
RS = 1;
RW = 0;
_delay_ms(10);
at = 0;
}
{} void lcd_cmd (unsigned char cmd)
lcd_data_pin = cmd;
at = 1;
RS = 0;
RW = 0;
_delay_ms(10);
at = 0;
}
void lcd_string (unsigned char * str) {}
{while(*STR)}
lcd_data(*STR++);
}
}
int main() {}
DDR_D.B0 = 1;
DDR_D.B1 = 1;
DDR_D.B2 = 1;
DDRA = 0XFF;
lcd_init();
{while(1)}
_delay_ms (10);
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_cmd (0xC0); //goto segunda fila
_delay_ms (10);
lcd_cmd(0x01); Visualización clara
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_string("message");
lcd_cmd (0xC0); //goto segunda fila
lcd_string("Flasher");
_delay_ms(1000);
siguiente pantalla
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_string ("con ATMEGA128");
lcd_cmd (0xC0); //goto segunda fila
lcd_string ("por arick");
_delay_ms(1000);
siguiente pantalla
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_string ("publicada");
lcd_cmd (0xC0); //goto segunda fila
lcd_string("instructable.com");
_delay_ms(1000);
siguiente pantalla
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_string ("Made in");
lcd_cmd (0xC0); //goto segunda fila
lcd_string("Australia");
_delay_ms(1000);
}
Return (0);
}