Postat: 15 april 2007, 13:20:35
sodjan, ljuset i mörkret.
Tackar!
//Emil
Tackar!
//Emil
Svenskt forum för elektroniksnack.
https://elektronikforumet.com/forum/
Kod: Markera allt
const unsigned char char_A[] PROGMEM = {0b01111110, 0b10010000, 0b10010000, 0b10010000, 0b01111110};
...................
const unsigned char char_Z[] PROGMEM = {0b10000110, 0b10001010, 0b10010010, 0b10100010, 0b11000010};
const unsigned char char_0[] PROGMEM = {0b01111100, 0b10000010, 0b10000010, 0b10000010, 0b01111100};
..................
const unsigned char char_9[] PROGMEM = {0b01100000, 0b10010000, 0b10010000, 0b10010000, 0b01111110};
const unsigned char char_UT[] PROGMEM = {0b01110000, 0b10001010, 0b01110000}; // !
..................
const unsigned char char_HPI[] PROGMEM = {0b01000100, 0b00101000, 0b00010000}; // >
PGM_P char_array[26] PROGMEM = {char_A, char_B, char_C, char_D, char_E, char_F, char_G, char_H, char_I, char_J, char_K, char_L, char_M, char_N, char_O, char_P, char_Q, char_R, char_S, char_T, char_U, char_V, char_W, char_X, char_Y, char_Z};
PGM_P num_array[10] PROGMEM = {char_0, char_1, char_2, char_3, char_4, char_5, char_6, char_7, char_8, char_9};
PGM_P sign_array[22] PROGMEM = {char_UT, char_PRO, char_SLASH, char_VP, char_HP, char_VHP, char_HHP, char_VKP, char_HKP, char_LIKA, char_FT, char_PLUS, char_MINUS, char_PUNKT, char_KOLON, char_UL, char_APOSTROF, char_DL, char_STJ, char_UPI, char_VPI, char_HPI};
void LCD_Write_Char(unsigned char x, unsigned char y, char ch)
{
unsigned char ch_data[5] = {0, 0, 0, 0, 0};
PGM_P p;
if((ch >= 'A') && (ch <= 'Z'))
{
memcpy_P(&p, &char_array[ch - 'A'], sizeof(PGM_P));
strcpy_P(ch_data, p);
}
else if((ch >= '0') && (ch <= '9'))
{
memcpy_P(&p, &num_array[ch - '0'], sizeof(PGM_P));
strcpy_P(ch_data, p);
}
else
{
switch(ch)
{
case '!': memcpy_P(&p, &sign_array[0], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '%': memcpy_P(&p, &sign_array[1], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '/': memcpy_P(&p, &sign_array[2], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '(': memcpy_P(&p, &sign_array[3], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case ')': memcpy_P(&p, &sign_array[4], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '[': memcpy_P(&p, &sign_array[5], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case ']': memcpy_P(&p, &sign_array[6], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '{': memcpy_P(&p, &sign_array[7], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '}': memcpy_P(&p, &sign_array[8], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '=': memcpy_P(&p, &sign_array[9], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '?': memcpy_P(&p, &sign_array[10], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '+': memcpy_P(&p, &sign_array[11], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '-': memcpy_P(&p, &sign_array[12], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '.': memcpy_P(&p, &sign_array[13], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case ':': memcpy_P(&p, &sign_array[14], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '_': memcpy_P(&p, &sign_array[15], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '´': memcpy_P(&p, &sign_array[16], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '|': memcpy_P(&p, &sign_array[17], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '*': memcpy_P(&p, &sign_array[18], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '^': memcpy_P(&p, &sign_array[19], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '<': memcpy_P(&p, &sign_array[20], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
case '>': memcpy_P(&p, &sign_array[21], sizeof(PGM_P)); strcpy_P(ch_data, p); break;
default: break;
}
}
osv..osv..osv
}
Kod: Markera allt
void LCD_Write_Char(unsigned char x, unsigned char y, char ch)
{
unsigned char ch_data[5] = {0, 0, 0, 0, 0};
unsigned char bytes = 0;
PGM_P p = NULL;
if ((ch >= 'A') && (ch <= 'Z'))
{
p = &char_array[ch - 'A'];
bytes = sizeof(char_array[0]);
}
...
//bla bla
switch (ch)
{
case '!': p = &sign_array[0]; break;
case '%': p = &sign_array[1]; break;
...
}
if (p)
bytes = sizeof(sign_array[0]);
//bla bla
memcpy_P((void*)ch_data, p, bytes);
...
Kod: Markera allt
typedef unsigned char byte;
const byte Teckentabell[6][] PROGMEM = {
{0,0x00,0x00,0x00,0x00,0x00}, // Index ASCII 0
{0,0x00,0x00,0x00,0x00,0x00}, // Index ASCII 1
{0,0x00,0x00,0x00,0x00,0x00}, // Index ASCII 2
{0,0x00,0x00,0x00,0x00,0x00}, // Index ASCII 3
{0,0x00,0x00,0x00,0x00,0x00}, // Index ASCII 4
....
{3,0x00,0x00,0x00,0x00,0x00}, // Index ASCII 32 ' '
{1,0x7D,0x00,0x00,0x00,0x00}, // Index ASCII 33 '!'
{3,0xC0,0x00,0xC0,0x00,0x00}, // Index ASCII 34 '"'
....
};
void LCD_Write_Char(unsigned char x, unsigned char y, char ch)
{
if(Teckentabell[0][ch])
{
memcpy_P((void*)ch_data, Teckentabell[1][ch], Teckentabell[0][ch]);
// eller rättare: skriv ut på displayen, datan finns i Teckentabell[1-5][ch]
// och antalet bytes i Teckentabell[0][ch]
};