Skapa dig ett meddelande flasher med ATMEGA128 (3 / 4 steg)
Steg 3: Koden och ladda upp till din styrelse
Vi skapar koden för detta experiment,
Jag använde AVR Studio för det och laddat upp med USBASP, se bild
fullständiga koden:
#include < avr/io.h >
#include < util/delay.h >
struktur för att tillåta lite fältverksamheten, name omvandlingar: PORTA.0 -> PORT_A.b0 PORTB.7 -> PORT_B.b7
TypeDef struct {uint8_t b0:1;
uint8_t b1:1;
uint8_t b2:1;
uint8_t b3:1;
uint8_t b4:1;
uint8_t b5:1;
uint8_t b6:1;
uint8_t b7:1; } bitar;
definiera alla portar i din mikrokontroller, lägga till fler portar beroende på de tillgängliga mcu portarna
#define PORT_D (* (flyktiga bitar *) & PORTD)
#define PIN_D (* (flyktiga bitar *) & PIND)
#define DDR_D (* (flyktiga bitar *) & DDRD)
#define PORT_G (* (flyktiga bitar *) & PORTG)
#define PIN_G (* (flyktiga bitar *) & PING)
#define DDR_G (* (flyktiga bitar *) & DDRG)
Nämna klockfrekvens här
#define _XTAL_FREQ 8000000
#define lcd_data_pin PORTA
#define sv 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;
sv = 1;
RS = 1;
RW = 0;
_delay_ms(10);
sv = 0;
}
void lcd_cmd (unsigned char cmd) {
lcd_data_pin = cmd;
sv = 1;
RS = 0;
RW = 0;
_delay_ms(10);
sv = 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 (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_cmd (0xC0); //goto andra raden
_delay_ms (10).
lcd_cmd(0x01); Tydlig display
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_string("Message");
lcd_cmd (0xC0); //goto andra raden
lcd_string("Flasher");
_delay_ms(1000);
nästa skärm
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_string ("med ATMEGA128");
lcd_cmd (0xC0); //goto andra raden
lcd_string ("av arick");
_delay_ms(1000);
nästa skärm
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_string ("publicerad på");
lcd_cmd (0xC0); //goto andra raden
lcd_string("Instructable.com");
_delay_ms(1000);
nästa skärm
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
_delay_ms (10).
lcd_string ("tillverkad i");
lcd_cmd (0xC0); //goto andra raden
lcd_string("AUSTRALIA");
_delay_ms(1000);
}
avkastning (0);
}