#include <xc.h>
#define _XTAL_FREQ 4000000 // Define the crystal frequency for delay
// LCD control pins
#define RS RD0
#define EN RD1
// LCD data pins
#define D4 RD2
#define D5 RD3
#define D6 RD4
#define D7 RD5
// Function prototypes
void LCD_Command(unsigned char);
void LCD_Char(unsigned char);
void LCD_Init(void);
void LCD_String(const char*);
void main() {
TRISD = 0x00; // PORTD as output
LCD_Init(); // Initialize the LCD
const char name[] = "VEER"; // Name to display
for (int i = 0; name[i] != '\0'; i++) {
LCD_Char(name[i]); // Display each character with a for loop
__delay_ms(300); // Delay for visual effect
}
while (1); // Infinite loop
}
void LCD_Command(unsigned char cmd) {
RS = 0; // Command mode
D4 = (cmd >> 4) & 0x01;
D5 = (cmd >> 5) & 0x01;
D6 = (cmd >> 6) & 0x01;
D7 = (cmd >> 7) & 0x01;
EN = 1;
__delay_ms(2);
EN = 0;
D4 = cmd & 0x01;
D5 = (cmd >> 1) & 0x01;
D6 = (cmd >> 2) & 0x01;
D7 = (cmd >> 3) & 0x01;
EN = 1;
__delay_ms(2);
EN = 0;
}
void LCD_Char(unsigned char data) {
RS = 1; // Data mode
D4 = (data >> 4) & 0x01;
D5 = (data >> 5) & 0x01;
D6 = (data >> 6) & 0x01;
D7 = (data >> 7) & 0x01;
EN = 1;
__delay_ms(2);
EN = 0;
D4 = data & 0x01;
D5 = (data >> 1) & 0x01;
D6 = (data >> 2) & 0x01;
D7 = (data >> 3) & 0x01;
EN = 1;
__delay_ms(2);
EN = 0;
}
void LCD_Init(void) {
LCD_Command(0x02); // 4-bit mode initialization
LCD_Command(0x28); // 2 lines, 5x7 matrix
LCD_Command(0x0C); // Display ON, Cursor OFF
LCD_Command(0x06); // Auto-increment cursor
LCD_Command(0x01); // Clear display
}
I2luY2x1ZGUgPHhjLmg+CiNkZWZpbmUgX1hUQUxfRlJFUSA0MDAwMDAwIC8vIERlZmluZSB0aGUgY3J5c3RhbCBmcmVxdWVuY3kgZm9yIGRlbGF5CgovLyBMQ0QgY29udHJvbCBwaW5zCiNkZWZpbmUgUlMgUkQwICAKI2RlZmluZSBFTiBSRDEgIAoKLy8gTENEIGRhdGEgcGlucwojZGVmaW5lIEQ0IFJEMgojZGVmaW5lIEQ1IFJEMwojZGVmaW5lIEQ2IFJENAojZGVmaW5lIEQ3IFJENQoKLy8gRnVuY3Rpb24gcHJvdG90eXBlcwp2b2lkIExDRF9Db21tYW5kKHVuc2lnbmVkIGNoYXIpOwp2b2lkIExDRF9DaGFyKHVuc2lnbmVkIGNoYXIpOwp2b2lkIExDRF9Jbml0KHZvaWQpOwp2b2lkIExDRF9TdHJpbmcoY29uc3QgY2hhciopOwoKdm9pZCBtYWluKCkgewogICAgVFJJU0QgPSAweDAwOyAvLyBQT1JURCBhcyBvdXRwdXQKICAgIExDRF9Jbml0KCk7ICAgLy8gSW5pdGlhbGl6ZSB0aGUgTENECgogICAgY29uc3QgY2hhciBuYW1lW10gPSAiVkVFUiI7IC8vIE5hbWUgdG8gZGlzcGxheQoKICAgIGZvciAoaW50IGkgPSAwOyBuYW1lW2ldICE9ICdcMCc7IGkrKykgewogICAgICAgIExDRF9DaGFyKG5hbWVbaV0pOyAvLyBEaXNwbGF5IGVhY2ggY2hhcmFjdGVyIHdpdGggYSBmb3IgbG9vcAogICAgICAgIF9fZGVsYXlfbXMoMzAwKTsgICAvLyBEZWxheSBmb3IgdmlzdWFsIGVmZmVjdAogICAgfQoKICAgIHdoaWxlICgxKTsgLy8gSW5maW5pdGUgbG9vcAp9Cgp2b2lkIExDRF9Db21tYW5kKHVuc2lnbmVkIGNoYXIgY21kKSB7CiAgICBSUyA9IDA7IC8vIENvbW1hbmQgbW9kZQogICAgRDQgPSAoY21kID4+IDQpICYgMHgwMTsKICAgIEQ1ID0gKGNtZCA+PiA1KSAmIDB4MDE7CiAgICBENiA9IChjbWQgPj4gNikgJiAweDAxOwogICAgRDcgPSAoY21kID4+IDcpICYgMHgwMTsKICAgIEVOID0gMTsKICAgIF9fZGVsYXlfbXMoMik7CiAgICBFTiA9IDA7CgogICAgRDQgPSBjbWQgJiAweDAxOwogICAgRDUgPSAoY21kID4+IDEpICYgMHgwMTsKICAgIEQ2ID0gKGNtZCA+PiAyKSAmIDB4MDE7CiAgICBENyA9IChjbWQgPj4gMykgJiAweDAxOwogICAgRU4gPSAxOwogICAgX19kZWxheV9tcygyKTsKICAgIEVOID0gMDsKfQoKdm9pZCBMQ0RfQ2hhcih1bnNpZ25lZCBjaGFyIGRhdGEpIHsKICAgIFJTID0gMTsgLy8gRGF0YSBtb2RlCiAgICBENCA9IChkYXRhID4+IDQpICYgMHgwMTsKICAgIEQ1ID0gKGRhdGEgPj4gNSkgJiAweDAxOwogICAgRDYgPSAoZGF0YSA+PiA2KSAmIDB4MDE7CiAgICBENyA9IChkYXRhID4+IDcpICYgMHgwMTsKICAgIEVOID0gMTsKICAgIF9fZGVsYXlfbXMoMik7CiAgICBFTiA9IDA7CgogICAgRDQgPSBkYXRhICYgMHgwMTsKICAgIEQ1ID0gKGRhdGEgPj4gMSkgJiAweDAxOwogICAgRDYgPSAoZGF0YSA+PiAyKSAmIDB4MDE7CiAgICBENyA9IChkYXRhID4+IDMpICYgMHgwMTsKICAgIEVOID0gMTsKICAgIF9fZGVsYXlfbXMoMik7CiAgICBFTiA9IDA7Cn0KCnZvaWQgTENEX0luaXQodm9pZCkgewogICAgTENEX0NvbW1hbmQoMHgwMik7IC8vIDQtYml0IG1vZGUgaW5pdGlhbGl6YXRpb24KICAgIExDRF9Db21tYW5kKDB4MjgpOyAvLyAyIGxpbmVzLCA1eDcgbWF0cml4CiAgICBMQ0RfQ29tbWFuZCgweDBDKTsgLy8gRGlzcGxheSBPTiwgQ3Vyc29yIE9GRgogICAgTENEX0NvbW1hbmQoMHgwNik7IC8vIEF1dG8taW5jcmVtZW50IGN1cnNvcgogICAgTENEX0NvbW1hbmQoMHgwMSk7IC8vIENsZWFyIGRpc3BsYXkKfQo=