Commits

Trammell Hudson committed dcb7169 Draft

5x7 font

Comments (0)

Files changed (2)

+#include <avr/io.h>
+#include <avr/pgmspace.h>
+ 
+const char font[][6] PROGMEM =
+{
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+	{0x00,0x00,0x00,0x00,0x00,0x00},
+ 
+	{0x00,0x00,0x00,0x00,0x00,0x00},	// SPACE
+ 
+	{0x00,0x00,0x00,0x4F,0x00,0x00},	// !
+	{0x00,0x00,0x07,0x00,0x07,0x00},	// "
+	{0x00,0x14,0x7F,0x14,0x7F,0x14},	// #
+	{0x00,0x24,0x2A,0x7F,0x2A,0x12},	// $
+	{0x00,0x23,0x13,0x08,0x64,0x62},	// %
+	{0x00,0x36,0x49,0x55,0x22,0x50},	// &
+	{0x00,0x00,0x05,0x03,0x00,0x00},	// '
+	{0x00,0x00,0x1C,0x22,0x41,0x00},	// (
+	{0x00,0x00,0x41,0x22,0x1C,0x00},	// )
+	{0x00,0x14,0x08,0x3E,0x08,0x14},	// *
+	{0x00,0x08,0x08,0x3E,0x08,0x08},	// +
+	{0x00,0x00,0x50,0x30,0x00,0x00},	// ,
+	{0x00,0x08,0x08,0x08,0x08,0x08},	// -
+	{0x00,0x00,0x60,0x60,0x00,0x00},	// .
+	{0x00,0x20,0x10,0x08,0x04,0x02},	// /
+ 
+	{0x00,0x3E,0x51,0x49,0x45,0x3E},	// 0
+	{0x00,0x00,0x42,0x7F,0x40,0x00},	// 1
+	{0x00,0x42,0x61,0x51,0x49,0x46},	// 2
+	{0x00,0x21,0x41,0x45,0x4B,0x31},	// 3
+	{0x00,0x18,0x14,0x12,0x7F,0x10},	// 4
+	{0x00,0x27,0x45,0x45,0x45,0x39},	// 5
+	{0x00,0x3C,0x4A,0x49,0x49,0x30},	// 6
+	{0x00,0x01,0x71,0x09,0x05,0x03},	// 7
+	{0x00,0x36,0x49,0x49,0x49,0x36},	// 8
+	{0x00,0x06,0x49,0x49,0x29,0x1E},	// 9
+ 
+	{0x00,0x36,0x36,0x00,0x00,0x00},	// :
+	{0x00,0x56,0x36,0x00,0x00,0x00},	// ;
+	{0x00,0x08,0x14,0x22,0x41,0x00},	// <
+	{0x00,0x14,0x14,0x14,0x14,0x14},	// =
+	{0x00,0x00,0x41,0x22,0x14,0x08},	// >
+	{0x00,0x02,0x01,0x51,0x09,0x06},	// ?
+	{0x00,0x30,0x49,0x79,0x41,0x3E},	// @
+ 
+	{0x00,0x7E,0x11,0x11,0x11,0x7E},	// A
+	{0x00,0x7F,0x49,0x49,0x49,0x36},	// B
+	{0x00,0x3E,0x41,0x41,0x41,0x22},	// C
+	{0x00,0x7F,0x41,0x41,0x22,0x1C},	// D
+	{0x00,0x7F,0x49,0x49,0x49,0x41},	// E
+	{0x00,0x7F,0x09,0x09,0x09,0x01},	// F
+	{0x00,0x3E,0x41,0x49,0x49,0x7A},	// G
+	{0x00,0x7F,0x08,0x08,0x08,0x7F},	// H
+	{0x00,0x00,0x41,0x7F,0x41,0x00},	// I
+	{0x00,0x20,0x40,0x41,0x3F,0x01},	// J
+	{0x00,0x7F,0x08,0x14,0x22,0x41},	// K
+	{0x00,0x7F,0x40,0x40,0x40,0x40},	// L
+	{0x00,0x7F,0x02,0x0C,0x02,0x7F},	// M
+	{0x00,0x7F,0x04,0x08,0x10,0x7F},	// N
+	{0x00,0x3E,0x41,0x41,0x41,0x3E},	// O
+	{0x00,0x7F,0x09,0x09,0x09,0x06},	// P
+	{0x00,0x3E,0x41,0x51,0x21,0x5E},	// Q
+	{0x00,0x7F,0x09,0x19,0x29,0x46},	// R
+	{0x00,0x46,0x49,0x49,0x49,0x31},	// S
+	{0x00,0x01,0x01,0x7F,0x01,0x01},	// T
+	{0x00,0x3F,0x40,0x40,0x40,0x3F},	// U
+	{0x00,0x1F,0x20,0x40,0x20,0x1F},	// V
+	{0x00,0x3F,0x40,0x30,0x40,0x3F},	// W
+	{0x00,0x63,0x14,0x08,0x14,0x63},	// X
+	{0x00,0x07,0x08,0x70,0x08,0x07},	// Y
+	{0x00,0x61,0x51,0x49,0x45,0x43},	// Z
+ 
+	{0x00,0x00,0x7F,0x41,0x41,0x00},	// [
+	{0x00,0x02,0x04,0x08,0x10,0x20},	// backslash
+	{0x00,0x00,0x41,0x41,0x7F,0x00},	// ]
+	{0x00,0x04,0x02,0x01,0x02,0x04},	// ^
+	{0x00,0x40,0x40,0x40,0x40,0x40},	// _
+	{0x00,0x00,0x01,0x02,0x04,0x00},	// `
+ 
+	{0x00,0x20,0x54,0x54,0x54,0x78},	// a
+	{0x00,0x7F,0x50,0x48,0x48,0x30},	// b
+	{0x00,0x38,0x44,0x44,0x44,0x20},	// c
+	{0x00,0x38,0x44,0x44,0x48,0x7F},	// d
+	{0x00,0x38,0x54,0x54,0x54,0x18},	// e
+	{0x00,0x08,0x7E,0x09,0x01,0x02},	// f
+	{0x00,0x0C,0x52,0x52,0x52,0x3E},	// g
+	{0x00,0x7F,0x08,0x04,0x04,0x78},	// h
+	{0x00,0x00,0x44,0x7D,0x40,0x00},	// i
+	{0x00,0x20,0x40,0x44,0x3D,0x00},	// j
+	{0x00,0x7F,0x10,0x28,0x44,0x00},	// k
+	{0x00,0x00,0x41,0x7F,0x40,0x00},	// l
+	{0x00,0x78,0x04,0x58,0x44,0x78},	// m
+	{0x00,0x7C,0x08,0x04,0x04,0x78},	// n
+	{0x00,0x38,0x44,0x44,0x44,0x38},	// o
+	{0x00,0x7C,0x14,0x14,0x14,0x08},	// p
+	{0x00,0x08,0x14,0x14,0x18,0x7C},	// q
+	{0x00,0x7C,0x08,0x04,0x04,0x08},	// r
+	{0x00,0x48,0x54,0x54,0x54,0x20},	// s
+	{0x00,0x04,0x3F,0x44,0x40,0x20},	// t
+	{0x00,0x3C,0x40,0x40,0x20,0x7C},	// u
+	{0x00,0x1C,0x20,0x40,0x20,0x1C},	// v
+	{0x00,0x3C,0x40,0x30,0x40,0x3C},	// w
+	{0x00,0x44,0x28,0x10,0x28,0x44},	// x
+	{0x00,0x0C,0x50,0x50,0x50,0x3C},	// y
+	{0x00,0x44,0x64,0x54,0x4C,0x44},	// z
+ 
+	{0x00,0x00,0x08,0x36,0x41,0x00},	// {
+	{0x00,0x00,0x00,0x7F,0x00,0x00},	// |
+	{0x00,0x00,0x41,0x36,0x08,0x00},	// }
+	{0x00,0x0C,0x02,0x0C,0x10,0x0C},	// ~
+ 
+	{0x00,0x00,0x00,0x00,0x00,0x00}
+};
+
+
+static void
+lcd_select(
+	uint8_t x,
+	uint8_t y,
+	uint8_t val
+)
+{
+	if (y < 32)
+	{
+		// Top half of the display
+		if (x < 50)
+			out(LCD_CS20, val);
+		else
+		if (x < 100)
+			out(LCD_CS21, val);
+		else
+		if (x < 150)
+			out(LCD_CS22, val);
+		else
+		if (x < 200)
+			out(LCD_CS23, val);
+		else
+			out(LCD_CS24, val);
+	} else {
+		// Bottom half of the display
+		if (x < 50)
+			out(LCD_CS25, val);
+		else
+		if (x < 100)
+			out(LCD_CS26, val);
+		else
+		if (x < 150)
+			out(LCD_CS27, val);
+		else
+		if (x < 200)
+			out(LCD_CS28, val);
+		else
+			out(LCD_CS29, val);
+	}
+}
+
+
+void
+lcd_char(
+	uint8_t x,
+	uint8_t y,
+	uint8_t c
+)
+{
+	lcd_select(x * 6, y * 8, 1);
+	lcd_command(((y & 3) << 6) | ((x & 7) * 6), 0);
+	//lcd_command(0x00, 0);
+
+	const char * f = font[c];
+
+	for (uint8_t i = 0 ; i < 6 ; i++)
+		lcd_command(pgm_read_byte(&f[i]), 1);
+
+	lcd_select(x * 6, y * 8, 0);
+}
 	}
 }
 
+#include "font.c"
 
 int
 main(void)
 			}
 		}
 
+#if 0
 		if (i++ == 240)
 		{
 			i = 0;
 		}
 
 		lcd_display(i, j, x++);
+#else
+		lcd_char(i, j, x);
+		x = (x + 1) & 0x7F;
+		if (i++ == 40)
+		{
+			i = 0;
+			if (j++ == 8)
+				j = 0;
+		}
+#endif
 
 		if (bit_is_clear(TIFR0, OCF0A))
 			continue;