/********************************************************************\ Name: led.c Created by: Stefan Ritt Contents: Driver for OSRAM SCE5780 5 x 7 Dot Matrix LED Display \********************************************************************/ #include #include #include #include #include "mscbemb.h" #include "mpdc.h" sbit DISP_RS = P2^2; sbit DISP_CE = P2^1; code unsigned char ascii_table[][7] = { {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x00, {0x40, 0x40, 0x40, 0x40, 0x40}, // 0x01, bar upwards {0x60, 0x60, 0x60, 0x60, 0x60}, // 0x02, {0x70, 0x70, 0x70, 0x70, 0x70}, // 0x03, {0x78, 0x78, 0x78, 0x78, 0x78}, // 0x04, {0x7c, 0x7c, 0x7c, 0x7c, 0x7c}, // 0x05, {0x7e, 0x7e, 0x7e, 0x7e, 0x7e}, // 0x06, {0x7f, 0x7f, 0x7f, 0x7f, 0x7f}, // 0x07, {0x06, 0x09, 0x09, 0x06, 0x00}, // 0x08, degree {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x09, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0a, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0b, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0c, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0d, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0e, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0f, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x10, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x11, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x12, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x13, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x14, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x15, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x16, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x17, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x18, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x19, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1a, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1b, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1c, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1d, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1e, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1f, {0x00, 0x00, 0x00, 0x00, 0x00}, // 0x20, Space {0x00, 0x00, 0x5f, 0x00, 0x00}, // 0x21, ! {0x04, 0x03, 0x00, 0x04, 0x03}, // 0x22, " {0x14, 0x7f, 0x14, 0x7f, 0x14}, // 0x23, # {0x24, 0x2a, 0x7f, 0x2a, 0x12}, // 0x24, $ {0x63, 0x13, 0x08, 0x64, 0x63}, // 0x25, % {0x30, 0x4e, 0x51, 0x2e, 0x50}, // 0x26, & {0x00, 0x04, 0x03, 0x00, 0x00}, // 0x27, ' {0x00, 0x1c, 0x22, 0x41, 0x00}, // 0x28, ( {0x00, 0x41, 0x22, 0x1c, 0x00}, // 0x29, ) {0x2a, 0x1c, 0x7f, 0x1c, 0x2a}, // 0x2a, * {0x08, 0x08, 0x3e, 0x08, 0x08}, // 0x2b, + {0x00, 0x40, 0x30, 0x00, 0x00}, // 0x2c, , {0x08, 0x08, 0x08, 0x08, 0x08}, // 0x2d, - {0x00, 0x60, 0x60, 0x00, 0x00}, // 0x2e, . {0x60, 0x10, 0x08, 0x04, 0x03}, // 0x2f, / {0x3e, 0x51, 0x49, 0x45, 0x3e}, // 0x30, 0 {0x00, 0x42, 0x7f, 0x40, 0x00}, // 0x31, 1 {0x42, 0x61, 0x51, 0x49, 0x46}, // 0x32, 2 {0x22, 0x41, 0x49, 0x49, 0x36}, // 0x33, 3 {0x18, 0x14, 0x12, 0x7f, 0x10}, // 0x34, 4 {0x27, 0x45, 0x45, 0x45, 0x39}, // 0x35, 5 {0x3c, 0x4a, 0x49, 0x49, 0x30}, // 0x36, 6 {0x01, 0x71, 0x09, 0x05, 0x03}, // 0x37, 7 {0x36, 0x49, 0x49, 0x49, 0x36}, // 0x38, 8 {0x06, 0x49, 0x49, 0x29, 0x1e}, // 0x39, 9 {0x00, 0x36, 0x36, 0x00, 0x00}, // 0x3a, : {0x00, 0x56, 0x36, 0x00, 0x00}, // 0x3b, ; {0x08, 0x14, 0x22, 0x41, 0x00}, // 0x3c, < {0x14, 0x14, 0x14, 0x14, 0x14}, // 0x3d, = {0x00, 0x41, 0x22, 0x14, 0x08}, // 0x3e, > {0x02, 0x01, 0x51, 0x09, 0x06}, // 0x3f, ? {0x3e, 0x41, 0x5d, 0x55, 0x5e}, // 0x40, @ {0x7c, 0x12, 0x11, 0x12, 0x7c}, // 0x41, A {0x7f, 0x49, 0x49, 0x49, 0x36}, // 0x42, B {0x3e, 0x41, 0x41, 0x41, 0x22}, // 0x43, C {0x41, 0x7f, 0x41, 0x41, 0x3e}, // 0x44, D {0x7f, 0x49, 0x49, 0x41, 0x41}, // 0x45, E {0x7f, 0x09, 0x09, 0x09, 0x09}, // 0x46, F {0x3e, 0x41, 0x41, 0x51, 0x72}, // 0x47, G {0x7f, 0x08, 0x08, 0x08, 0x7f}, // 0x48, H {0x00, 0x41, 0x7f, 0x41, 0x00}, // 0x49, I {0x20, 0x40, 0x40, 0x40, 0x3f}, // 0x4a, J {0x7f, 0x08, 0x14, 0x22, 0x41}, // 0x4b, K {0x7f, 0x40, 0x40, 0x40, 0x40}, // 0x4c, L {0x7f, 0x02, 0x04, 0x02, 0x7f}, // 0x4d, M {0x7f, 0x04, 0x08, 0x10, 0x7f}, // 0x4e, N {0x3e, 0x41, 0x41, 0x41, 0x3e}, // 0x4f, O {0x7f, 0x09, 0x09, 0x09, 0x06}, // 0x50, P {0x3e, 0x41, 0x51, 0x21, 0x5e}, // 0x51, Q {0x7f, 0x09, 0x19, 0x29, 0x46}, // 0x52, R {0x26, 0x49, 0x49, 0x49, 0x32}, // 0x53, S {0x01, 0x01, 0x7f, 0x01, 0x01}, // 0x54, T {0x3f, 0x40, 0x40, 0x40, 0x3f}, // 0x55, U {0x1f, 0x20, 0x40, 0x20, 0x1f}, // 0x56, V {0x7f, 0x20, 0x18, 0x20, 0x7f}, // 0x57, W {0x63, 0x14, 0x08, 0x14, 0x63}, // 0x58, X {0x03, 0x04, 0x78, 0x04, 0x03}, // 0x59, Y {0x61, 0x51, 0x49, 0x45, 0x43}, // 0x5a, Z {0x00, 0x7f, 0x41, 0x41, 0x00}, // 0x5b, [ {0x03, 0x04, 0x08, 0x10, 0x60}, // 0x5c, (backslash) {0x00, 0x41, 0x41, 0x7f, 0x00}, // 0x5d, ] {0x04, 0x02, 0x01, 0x02, 0x04}, // 0x5e, ^ {0x40, 0x40, 0x40, 0x40, 0x40}, // 0x5f, _ {0x00, 0x07, 0x0b, 0x00, 0x00}, // 0x60, ` {0x38, 0x44, 0x44, 0x3c, 0x40}, // 0x61, a {0x7f, 0x50, 0x48, 0x48, 0x30}, // 0x62, b {0x38, 0x44, 0x44, 0x44, 0x20}, // 0x63, c {0x30, 0x48, 0x48, 0x50, 0x7f}, // 0x64, d {0x38, 0x54, 0x54, 0x54, 0x08}, // 0x65, e {0x08, 0x7e, 0x09, 0x02, 0x00}, // 0x66, f {0x08, 0x14, 0x54, 0x54, 0x3c}, // 0x67, g {0x7f, 0x08, 0x04, 0x04, 0x78}, // 0x68, h {0x00, 0x48, 0x7a, 0x40, 0x00}, // 0x69, i {0x20, 0x40, 0x44, 0x3d, 0x00}, // 0x6a, j {0x7f, 0x10, 0x28, 0x44, 0x00}, // 0x6b, k {0x00, 0x41, 0x7f, 0x40, 0x00}, // 0x6c, l {0x78, 0x04, 0x08, 0x04, 0x78}, // 0x6d, m {0x7c, 0x08, 0x04, 0x04, 0x78}, // 0x6e, n {0x38, 0x44, 0x44, 0x44, 0x38}, // 0x6f, o {0x7c, 0x14, 0x24, 0x24, 0x18}, // 0x70, p {0x18, 0x24, 0x24, 0x14, 0x7c}, // 0x71, q {0x00, 0x7c, 0x08, 0x04, 0x04}, // 0x72, r {0x48, 0x54, 0x54, 0x54, 0x20}, // 0x73, s {0x04, 0x3f, 0x44, 0x20, 0x00}, // 0x74, t {0x3c, 0x40, 0x40, 0x20, 0x7c}, // 0x75, u {0x1c, 0x20, 0x40, 0x20, 0x1c}, // 0x76, v {0x3c, 0x40, 0x30, 0x40, 0x3c}, // 0x77, w {0x44, 0x28, 0x10, 0x28, 0x44}, // 0x78, x {0x04, 0x48, 0x30, 0x08, 0x04}, // 0x79, y {0x44, 0x64, 0x54, 0x4c, 0x44}, // 0x7a, z {0x00, 0x08, 0x36, 0x41, 0x00}, // 0x7b, { {0x00, 0x00, 0x77, 0x00, 0x00}, // 0x7c, | {0x00, 0x41, 0x36, 0x08, 0x00}, // 0x7d, } {0x00, 0x04, 0x08, 0x10, 0x08}, // 0x7e, ~ {0x7f, 0x7f, 0x7f, 0x7f, 0x7f} // 0x7f, DEL }; void led_init() { DISP_RS = 1; // select control register spi_adr(ADR_DISP); spi_write_msb(0x7F); // Control word 0 = 0111 1111 (100% brightness) spi_deadr(); spi_adr(ADR_DISP); spi_write_msb(0x80); // Control word 1 = 1000 0000 spi_deadr(); DISP_RS = 0; // select dot register } void led_puts(unsigned char *p) { unsigned char chr, col, d, eos; spi_adr(ADR_DISP); eos = 0; for (chr = 0 ; chr < 8 ; chr++) { d = p[chr]; if (d == 0) eos = 1; if (eos) d = 0; for (col = 0 ; col < 5 ; col++) spi_write_msb(ascii_table[d][col]); } spi_deadr(); }