mirror of
https://codeberg.org/eel4746_piano/avr_piano.git
synced 2024-11-22 01:00:29 -05:00
make lcd.c compile
This commit is contained in:
parent
90d226a838
commit
f5713538fe
104
lcd.c
104
lcd.c
@ -1,13 +1,18 @@
|
|||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
|
|
||||||
|
#define F_CPU 16000000UL
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
|
|
||||||
// Define LCD control pin connections
|
// Define LCD control pin connections
|
||||||
#define LCD_RS_PIN PB0
|
#define LCD_RS_PIN PB0
|
||||||
#define LCD_RW_PIN PB1
|
#define LCD_RW_PIN PB1
|
||||||
#define LCD_E_PIN PB2
|
#define LCD_E_PIN PB2
|
||||||
|
#define LCD_RS_PORT PORTB
|
||||||
|
#define LCD_RW_PORT PORTB
|
||||||
|
#define LCD_E_PORT PORTB
|
||||||
// Define LCD data pin connections
|
// Define LCD data pin connections
|
||||||
#define LCD_DATA_PORT PORTD
|
#define LCD_DATA_PORT PORTD
|
||||||
#define LCD_DATA_DDR DDRD
|
#define LCD_DATA_DDR DDRD
|
||||||
|
|
||||||
// Function prototypes
|
// Function prototypes
|
||||||
void LCD_init();
|
void LCD_init();
|
||||||
@ -15,61 +20,70 @@ void LCD_command(uint8_t cmd);
|
|||||||
void LCD_write(uint8_t data);
|
void LCD_write(uint8_t data);
|
||||||
void LCD_send(char* str);
|
void LCD_send(char* str);
|
||||||
|
|
||||||
int main() {
|
int
|
||||||
// Set control pins as outputs
|
main()
|
||||||
DDRB |= (1 << LCD_RS_PIN) | (1 << LCD_RW_PIN) | (1 << LCD_E_PIN);
|
{
|
||||||
// Set data pins as outputs
|
// Set control pins as outputs
|
||||||
LCD_DATA_DDR = 0xFF;
|
DDRB |= (1 << LCD_RS_PIN) | (1 << LCD_RW_PIN) | (1 << LCD_E_PIN);
|
||||||
|
// Set data pins as outputs
|
||||||
|
LCD_DATA_DDR = 0xFF;
|
||||||
|
|
||||||
// Initialize LCD
|
// Initialize LCD
|
||||||
LCD_init();
|
LCD_init();
|
||||||
|
|
||||||
// Display "Hello, World!"
|
// Display "Hello, World!"
|
||||||
LCD_send("Hello, World!");
|
LCD_send("Hello, World!");
|
||||||
|
|
||||||
while (1) {
|
for (;;) {
|
||||||
// Your main code here
|
// Your main code here
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize LCD
|
// Initialize LCD
|
||||||
void LCD_init() {
|
void
|
||||||
_delay_ms(15); // Delay for power-on
|
LCD_init()
|
||||||
LCD_command(0x38); // Function Set: 8-bit data, 2-line display, 5x8 font
|
{
|
||||||
LCD_command(0x0C); // Display ON, Cursor OFF, Blink OFF
|
_delay_ms(15); // Delay for power-on
|
||||||
LCD_command(0x01); // Clear display
|
LCD_command(0x38); // Function Set: 8-bit data, 2-line display, 5x8 font
|
||||||
_delay_ms(2); // Delay for Clear Display command
|
LCD_command(0x0C); // Display ON, Cursor OFF, Blink OFF
|
||||||
LCD_command(0x06); // Entry Mode Set: Increment cursor, No display shift
|
LCD_command(0x01); // Clear display
|
||||||
|
_delay_ms(2); // Delay for Clear Display command
|
||||||
|
LCD_command(0x06); // Entry Mode Set: Increment cursor, No display shift
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send command to LCD
|
// Send command to LCD
|
||||||
void LCD_command(uint8_t cmd) {
|
void
|
||||||
LCD_RS_PORT &= ~(1 << LCD_RS_PIN); // Set RS low for command mode
|
LCD_command(uint8_t cmd)
|
||||||
LCD_RW_PORT &= ~(1 << LCD_RW_PIN); // Set RW low for write mode
|
{
|
||||||
LCD_DATA_PORT = cmd; // Send command to data port
|
LCD_RS_PORT &= ~(1 << LCD_RS_PIN); // Set RS low for command mode
|
||||||
LCD_E_PORT |= (1 << LCD_E_PIN); // Enable LCD
|
LCD_RW_PORT &= ~(1 << LCD_RW_PIN); // Set RW low for write mode
|
||||||
_delay_us(1); // Short delay
|
LCD_DATA_PORT = cmd; // Send command to data port
|
||||||
LCD_E_PORT &= ~(1 << LCD_E_PIN); // Disable LCD
|
LCD_E_PORT |= (1 << LCD_E_PIN); // Enable LCD
|
||||||
_delay_us(100); // Delay for command execution
|
_delay_us(1); // Short delay
|
||||||
|
LCD_E_PORT &= ~(1 << LCD_E_PIN); // Disable LCD
|
||||||
|
_delay_us(100); // Delay for command execution
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write data to LCD
|
// Write data to LCD
|
||||||
void LCD_write(uint8_t data) {
|
void
|
||||||
LCD_RS_PORT |= (1 << LCD_RS_PIN); // Set RS high for data mode
|
LCD_write(uint8_t data)
|
||||||
LCD_RW_PORT &= ~(1 << LCD_RW_PIN); // Set RW low for write mode
|
{
|
||||||
LCD_DATA_PORT = data; // Send data to data port
|
LCD_RS_PORT |= (1 << LCD_RS_PIN); // Set RS high for data mode
|
||||||
LCD_E_PORT |= (1 << LCD_E_PIN); // Enable LCD
|
LCD_RW_PORT &= ~(1 << LCD_RW_PIN); // Set RW low for write mode
|
||||||
_delay_us(1); // Short delay
|
LCD_DATA_PORT = data; // Send data to data port
|
||||||
LCD_E_PORT &= ~(1 << LCD_E_PIN); // Disable LCD
|
LCD_E_PORT |= (1 << LCD_E_PIN); // Enable LCD
|
||||||
_delay_us(100); // Delay for data execution
|
_delay_us(1); // Short delay
|
||||||
|
LCD_E_PORT &= ~(1 << LCD_E_PIN); // Disable LCD
|
||||||
|
_delay_us(100); // Delay for data execution
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send string to LCD
|
// Send string to LCD
|
||||||
void LCD_send(char* str) {
|
void
|
||||||
while (*str) {
|
LCD_send(char *str)
|
||||||
LCD_write(*str++);
|
{
|
||||||
}
|
while (*str)
|
||||||
|
LCD_write(*str++);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user