Cleaned up display code, and re-combined control code.

This commit is contained in:
Andrew Lalis 2023-01-04 08:48:45 +01:00
parent d041658da9
commit d6d6007e62
4 changed files with 44 additions and 31 deletions

View File

@ -83,16 +83,20 @@ int flashCommand(string[] args) {
}
int build(bool force = false) {
import std.datetime.stopwatch;
if (!exists(BUILD_DIR)) mkdir(BUILD_DIR);
string[] sources = findFiles(SOURCE_DIR, ".c");
string[] objects;
objects.reserve(sources.length);
StopWatch sw = StopWatch(AutoStart.yes);
foreach (source; sources) {
objects ~= compileSourceToObject(source, force);
}
string elfFile = linkObjects(objects);
string hexFile = copyToHex(elfFile);
writefln!"Built %s"(hexFile);
sw.stop();
ulong durationMillis = sw.peek().total!"msecs";
writefln!"Built %s in %d ms."(hexFile, durationMillis);
runOrQuit("avr-size " ~ hexFile);
return 0;
}

View File

@ -1,18 +1,33 @@
#include "display.h"
struct st7735 lcd;
struct signal cs = { .ddr = &DDRB, .port = &PORTB, .pin = 2 };
// Back Light
struct signal bl = { .ddr = &DDRB, .port = &PORTB, .pin = 1 };
// Data / Command
struct signal dc = { .ddr = &DDRB, .port = &PORTB, .pin = 0 };
// Reset
struct signal rs = { .ddr = &DDRD, .port = &PORTD, .pin = 7 };
// LCD struct
struct st7735 lcd = { .cs = &cs, .bl = &bl, .dc = &dc, .rs = &rs };
void display_init() {
ST7735_Init (&display_lcd);
ST7735_CommandSend (&display_lcd, MADCTL);
ST7735_Data8BitsSend (&display_lcd, 0x00);
ST7735_ClearScreen (&display_lcd, BLACK);
ST7735_SetPosition (5, 10);
ST7735_DrawString (&display_lcd, "Testing", WHITE, X1);
ST7735_Init(&lcd);
// Set the display as vertical (top is the wired side).
ST7735_CommandSend(&lcd, MADCTL);
ST7735_Data8BitsSend(&lcd, 0x00);
ST7735_ClearScreen(&lcd, WHITE);
ST7735_SetPosition(1, 1);
ST7735_DrawString(&lcd, "Gympal", BLACK, X1);
}
struct st7735* display_get_lcd() {
return &lcd;
}
void display_show_str(char* str) {
ST7735_ClearScreen(&display_lcd, BLACK);
ST7735_ClearScreen(&lcd, BLACK);
ST7735_SetPosition(5, 10);
ST7735_DrawString(&display_lcd, str, WHITE, X1);
ST7735_DrawString(&lcd, str, WHITE, X1);
}

View File

@ -1,27 +1,21 @@
/**
* @file display.h
* @author Andrew Lalis (andrewlalisofficial@gmail.com)
* @brief A wrapper around the hardware driver for the Gympal display which
* offers more abstract functions for controlling the state of the display.
*/
#ifndef DISPLAY_H
#define DISPLAY_H
#include "st7735.h"
// A wrapper around the ST7735 library, which handles all of the gympal-specific display code.
// Internal IO definition needed by the st7735 library.
// Chip Select
struct signal cs = { .ddr = &DDRB, .port = &PORTB, .pin = 2 };
// Back Light
struct signal bl = { .ddr = &DDRB, .port = &PORTB, .pin = 1 };
// Data / Command
struct signal dc = { .ddr = &DDRB, .port = &PORTB, .pin = 0 };
// Reset
struct signal rs = { .ddr = &DDRD, .port = &PORTD, .pin = 7 };
// LCD struct
struct st7735 display_lcd = { .cs = &cs, .bl = &bl, .dc = &dc, .rs = &rs };
/**
* @brief Initializes the display.
*/
void display_init();
struct st7735* display_get_lcd();
void display_show_str(char* str);
#endif

View File

@ -7,12 +7,12 @@
int main() {
display_init();
ctl_init();
while (1) {
if (ctl_isButtonAPressed()) {
display_show_str("button A");
} else {
display_show_str("Not button A");
}
}
// while (1) {
// if (ctl_isButtonAPressed()) {
// display_show_str("button A");
// } else {
// display_show_str("Not button A");
// }
// }
return 0;
}