Source

model100 / font.c

#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,0x18,0x04,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}
};


#if 0
// \todo: Make use of this
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);
	}
}
#endif


void
lcd_char(
	uint8_t col,
	uint8_t row,
	uint8_t c
)
{
	uint8_t x = col * 6;
	uint8_t y = row * 8;
	uint8_t inverse = 0;

	if (c >= 0x80)
	{
		c -= 0x80;
		inverse = 1;
	}

	const char * f = font[c];

	for (uint8_t i = 0 ; i < 6 ; i++, x++)
	{
		// this would be faster if we used the auto-increment
		// functions, but has lots of special cases for crossing
		// display boundaries.
		uint8_t bits = pgm_read_byte(&f[i]);
		if (inverse)
			bits = ~bits;
		lcd_display(x, y, bits);
	}
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.