CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

How to convert a string and set 5 bytes to an array

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
The Puma



Joined: 23 Apr 2004
Posts: 227
Location: The Netherlands

View user's profile Send private message

How to convert a string and set 5 bytes to an array
PostPosted: Tue May 09, 2006 12:42 pm     Reply with quote

I have following segment data array (char Font[])

If i have a string with let say Input_string = "TESTING"
then the corresponding 5 bytes must be placed in an new string

This string has 50 bytes (Output_string[50])
The first bytes must be filled with 0x01, 0x01, 0x7F, 0x01, 0x01
= Char T
The next bytes must filled with 0x7F, 0x49, 0x49, 0x49, 0x41
= Char E

and so on

How can i made that
Please give me a source code


Code:

// Declare and Init the font array data
char Font[] = {
   0x00, 0x00, 0x00, 0x00, 0x00,  // 0x20, Space
   0x00, 0x00, 0x5F, 0x00, 0x00,  // 0x21, !
   0x00, 0x07, 0x00, 0x07, 0x00,  // 0x22, "
   0x14, 0x7F, 0x14, 0x7F, 0x14,  // 0x23, #
   0x24, 0x2A, 0x7F, 0x2A, 0x12,  // 0x24, $
   0x23, 0x13, 0x08, 0x64, 0x62,  // 0x25, %
   0x36, 0x49, 0x55, 0x22, 0x50,  // 0x26, &
   0x00, 0x05, 0x03, 0x00, 0x00,  // 0x27, '
   0x00, 0x1C, 0x22, 0x41, 0x00,  // 0x28, (
   0x00, 0x41, 0x22, 0x1C, 0x00,  // 0x29, )
   0x08, 0x2A, 0x1C, 0x2A, 0x08,  // 0x2a, *
   0x08, 0x08, 0x3E, 0x08, 0x08,  // 0x2b, +
   0x00, 0x50, 0x30, 0x00, 0x00,  // 0x2c, ,
   0x08, 0x08, 0x08, 0x08, 0x08,  // 0x2d, -
   0x00, 0x60, 0x60, 0x00, 0x00,  // 0x2e, .
   0x20, 0x10, 0x08, 0x04, 0x02,  // 0x2f, /
   0x3E, 0x51, 0x49, 0x45, 0x3E,  // 0x30, 0
   0x00, 0x42, 0x7F, 0x40, 0x00,  // 0x31, 1
   0x42, 0x61, 0x51, 0x49, 0x46,  // 0x32, 2
   0x21, 0x41, 0x45, 0x4B, 0x31,  // 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, ;
   0x00, 0x08, 0x14, 0x22, 0x41,  // 0x3c, <
   0x14, 0x14, 0x14, 0x14, 0x14,  // 0x3d, =
   0x41, 0x22, 0x14, 0x08, 0x00,  // 0x3e, >
   0x02, 0x01, 0x51, 0x09, 0x06,  // 0x3f, ?
   0x32, 0x49, 0x79, 0x41, 0x3E,  // 0x40, @
   0x7E, 0x11, 0x11, 0x11, 0x7E,  // 0x41, A
   0x7F, 0x49, 0x49, 0x49, 0x36,  // 0x42, B
   0x3E, 0x41, 0x41, 0x41, 0x22,  // 0x43, C
   0x7F, 0x41, 0x41, 0x22, 0x1C,  // 0x44, D
   0x7F, 0x49, 0x49, 0x49, 0x41,  // 0x45, E
   0x7F, 0x09, 0x09, 0x01, 0x01,  // 0x46, F
   0x3E, 0x41, 0x41, 0x51, 0x32,  // 0x37, G
   0x7F, 0x08, 0x08, 0x08, 0x7F,  // 0x48, H
   0x00, 0x41, 0x7F, 0x41, 0x00,  // 0x49, I
   0x20, 0x40, 0x41, 0x3F, 0x01,  // 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
   0x46, 0x49, 0x49, 0x49, 0x31,  // 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, 0x00, 0x7F, 0x41, 0x41,  // 0x5b, [
   0x02, 0x04, 0x08, 0x10, 0x20,  // 0x5c, \
   0x41, 0x41, 0x7F, 0x00, 0x00,  // 0x5d, ]
   0x04, 0x02, 0x01, 0x02, 0x04,  // 0x5e, ^
   0x40, 0x40, 0x40, 0x40, 0x40,  // 0x5f, _
   0x00, 0x01, 0x02, 0x04, 0x00,  // 0x60, `
   0x20, 0x54, 0x54, 0x54, 0x78,  // 0x61, a
   0x7F, 0x48, 0x44, 0x44, 0x38,  // 0x62, b
   0x38, 0x44, 0x44, 0x44, 0x20,  // 0x63, c
   0x38, 0x44, 0x44, 0x48, 0x7F,  // 0x64, d
   0x38, 0x54, 0x54, 0x54, 0x18,  // 0x65, e
   0x08, 0x7E, 0x09, 0x01, 0x02,  // 0x66, f
   0x08, 0x14, 0x54, 0x54, 0x3C,  // 0x67, g
   0x7F, 0x08, 0x04, 0x04, 0x78,  // 0x68, h
   0x00, 0x44, 0x7D, 0x40, 0x00,  // 0x69, i
   0x20, 0x40, 0x44, 0x3D, 0x00,  // 0x6a, j
   0x00, 0x7F, 0x10, 0x28, 0x44,  // 0x6b, k
   0x00, 0x41, 0x7F, 0x40, 0x00,  // 0x6c, l
   0x7C, 0x04, 0x18, 0x04, 0x78,  // 0x6d, m
   0x7C, 0x08, 0x04, 0x04, 0x78,  // 0x6e, n
   0x38, 0x44, 0x44, 0x44, 0x38,  // 0x6f, o
   0x7C, 0x14, 0x14, 0x14, 0x08,  // 0x70, p
   0x08, 0x14, 0x14, 0x18, 0x7C,  // 0x71, q
   0x7C, 0x08, 0x04, 0x04, 0x08,  // 0x72, r
   0x48, 0x54, 0x54, 0x54, 0x20,  // 0x73, s
   0x04, 0x3F, 0x44, 0x40, 0x20,  // 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
   0x0C, 0x50, 0x50, 0x50, 0x3C,  // 0x79, y
   0x44, 0x64, 0x54, 0x4C, 0x44,  // 0x7a, z
   0x00, 0x08, 0x36, 0x41, 0x00,  // 0x7b, {
   0x00, 0x00, 0x7F, 0x00, 0x00,  // 0x7c, |
   0x00, 0x41, 0x36, 0x08, 0x00,  // 0x7d, }
   0x08, 0x08, 0x2A, 0x1C, 0x08,  // 0x7e, ~
   0x08, 0x1C, 0x2A, 0x08, 0x08   // 0x7f, DEL
};
The Puma



Joined: 23 Apr 2004
Posts: 227
Location: The Netherlands

View user's profile Send private message

PostPosted: Tue May 09, 2006 3:17 pm     Reply with quote

If i have only 5 data packets write to the string, the problem is that there are byte filled with crap
How can i fill the unused with 0x00?
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

PostPosted: Tue May 09, 2006 4:04 pm     Reply with quote

I don't have time to give you a complete example program, but let me suggest you to study the chapter on multi dimensional arrays in your C language book.
The Puma



Joined: 23 Apr 2004
Posts: 227
Location: The Netherlands

View user's profile Send private message

PostPosted: Thu May 11, 2006 2:16 pm     Reply with quote

This is my code so far.
But i have a problem

If have will display the letters "ABCDEFGHIJK"
then dot matrix for the I remains blank

Is there an error in the
void max7221_fill_buffer(char *buffer) routine

Please HELP


Code:

#ifndef MAX7221_CS

#define MAX7221_CS    PIN_C0
#define MAX7221_CLK   PIN_C3
#define MAX7221_DIN   PIN_C5

#endif

// Register address map
#define NO_OP                     0x00  // Used when cascading max7221s
#define DIGIT_0                   0x01  // Digit 0 register
#define DIGIT_1                   0x02  // Digit 1 register
#define DIGIT_2                   0x03  // Digit 2 register
#define DIGIT_3                   0x04  // Digit 3 register
#define DIGIT_4                   0x05  // Digit 4 register
#define DIGIT_5                   0x06  // Digit 5 register
#define DIGIT_6                   0x07  // Digit 6 register
#define DIGIT_7                   0x08  // Digit 7 register
#define DECODE_MODE               0x09  // Decode mode register
#define INTENSITY                 0x0A  // Intensity register
#define SCAN_LIMIT                0x0B  // Scan-limit register
#define SHUT_DOWN                 0x0C  // Shutdown register
#define DISPLAY_TEST              0x0F  // Display-test register

// Shutdown register
#define SHUTDOWN_MODE             0x00  // Shutdown mode
#define NORMAL_MODE               0x01  // Normal mode

// Decode-mode register
#define NO_DECODE_DIGITS_7_0      0x00  // No decode for digits 7-0
#define CODE_B_DECODE_DIGIT_0     0x01  // Code B decode for digit 0
#define CODE_B_DECODE_DIGITS_3_0  0x0F  // Code B decode for digits 3-0
#define CODE_B_DECODE_DIGITS_7_0  0xFF  // Code B decode for digits 7-0

// Intensity register
#define DUTY_CYCLE_1              0x00  // Intensity min
#define DUTY_CYCLE_2              0x01
#define DUTY_CYCLE_3              0x02
#define DUTY_CYCLE_4              0x03
#define DUTY_CYCLE_5              0x04
#define DUTY_CYCLE_6              0x05
#define DUTY_CYCLE_7              0x06
#define DUTY_CYCLE_8              0x07
#define DUTY_CYCLE_9              0x08
#define DUTY_CYCLE_10             0x09
#define DUTY_CYCLE_11             0x0A
#define DUTY_CYCLE_12             0x0B
#define DUTY_CYCLE_13             0x0C
#define DUTY_CYCLE_14             0x0D
#define DUTY_CYCLE_15             0x0E
#define DUTY_CYCLE_16             0x0F  // Intensity full

// Scan-limit register
#define DISPLAY_DIGIT_0           0x00  // Display digit 0
#define DISPLAY_DIGITS_01         0x01  // Display digits 0 & 1
#define DISPLAY_DIGITS_012        0x02  // Display digits 0 1 2
#define DISPLAY_DIGITS_0123       0x03  // Display digits 0 1 2 3
#define DISPLAY_DIGITS_01234      0x04  // Display digits 0 1 2 3 4
#define DISPLAY_DIGITS_012345     0x05  // Display digits 0 1 2 3 4 5
#define DISPLAY_DIGITS_0123456    0x06  // Display digits 0 1 2 3 4 5 6
#define DISPLAY_DIGITS_01234567   0x07  // Display digits 0 1 2 3 4 5 6 7

// Display-test register
#define NORMAL_OPERATION          0x00  // Normal operation
#define DISPLAY_TEST_MODE         0x01  // Display-test mode, all leds on

// Dot-matrix displays
#define DOT_MATRIX_DISPLAY_LEFT   0x00
#define DOT_MATRIX_DISPLAY_RIGHT  0x09

// Declare and Init the font array data
char Font[] = {
   0x00, 0x00, 0x00, 0x00, 0x00,  // 0x20, Space
   0x00, 0x00, 0x5F, 0x00, 0x00,  // 0x21, !
   0x00, 0x07, 0x00, 0x07, 0x00,  // 0x22, "
   0x14, 0x7F, 0x14, 0x7F, 0x14,  // 0x23, #
   0x24, 0x2A, 0x7F, 0x2A, 0x12,  // 0x24, $
   0x23, 0x13, 0x08, 0x64, 0x62,  // 0x25, %
   0x36, 0x49, 0x55, 0x22, 0x50,  // 0x26, &
   0x00, 0x05, 0x03, 0x00, 0x00,  // 0x27, '
   0x00, 0x1C, 0x22, 0x41, 0x00,  // 0x28, (
   0x00, 0x41, 0x22, 0x1C, 0x00,  // 0x29, )
   0x08, 0x2A, 0x1C, 0x2A, 0x08,  // 0x2a, *
   0x08, 0x08, 0x3E, 0x08, 0x08,  // 0x2b, +
   0x00, 0x50, 0x30, 0x00, 0x00,  // 0x2c, ,
   0x08, 0x08, 0x08, 0x08, 0x08,  // 0x2d, -
   0x00, 0x60, 0x60, 0x00, 0x00,  // 0x2e, .
   0x20, 0x10, 0x08, 0x04, 0x02,  // 0x2f, /
   0x3E, 0x51, 0x49, 0x45, 0x3E,  // 0x30, 0
   0x00, 0x42, 0x7F, 0x40, 0x00,  // 0x31, 1
   0x42, 0x61, 0x51, 0x49, 0x46,  // 0x32, 2
   0x21, 0x41, 0x45, 0x4B, 0x31,  // 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, ;
   0x00, 0x08, 0x14, 0x22, 0x41,  // 0x3c, <
   0x14, 0x14, 0x14, 0x14, 0x14,  // 0x3d, =
   0x41, 0x22, 0x14, 0x08, 0x00,  // 0x3e, >
   0x02, 0x01, 0x51, 0x09, 0x06,  // 0x3f, ?
   0x32, 0x49, 0x79, 0x41, 0x3E,  // 0x40, @
   0x7E, 0x11, 0x11, 0x11, 0x7E,  // 0x41, A
   0x7F, 0x49, 0x49, 0x49, 0x36,  // 0x42, B
   0x3E, 0x41, 0x41, 0x41, 0x22,  // 0x43, C
   0x7F, 0x41, 0x41, 0x22, 0x1C,  // 0x44, D
   0x7F, 0x49, 0x49, 0x49, 0x41,  // 0x45, E
   0x7F, 0x09, 0x09, 0x01, 0x01,  // 0x46, F
   0x3E, 0x41, 0x41, 0x51, 0x32,  // 0x37, G
   0x7F, 0x08, 0x08, 0x08, 0x7F,  // 0x48, H
   0x00, 0x41, 0x7F, 0x41, 0x00,  // 0x49, I
   0x20, 0x40, 0x41, 0x3F, 0x01,  // 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
   0x46, 0x49, 0x49, 0x49, 0x31,  // 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, 0x00, 0x7F, 0x41, 0x41,  // 0x5b, [
   0x02, 0x04, 0x08, 0x10, 0x20,  // 0x5c, \
   0x41, 0x41, 0x7F, 0x00, 0x00,  // 0x5d, ]
   0x04, 0x02, 0x01, 0x02, 0x04,  // 0x5e, ^
   0x40, 0x40, 0x40, 0x40, 0x40,  // 0x5f, _
   0x00, 0x01, 0x02, 0x04, 0x00,  // 0x60, `
   0x20, 0x54, 0x54, 0x54, 0x78,  // 0x61, a
   0x7F, 0x48, 0x44, 0x44, 0x38,  // 0x62, b
   0x38, 0x44, 0x44, 0x44, 0x20,  // 0x63, c
   0x38, 0x44, 0x44, 0x48, 0x7F,  // 0x64, d
   0x38, 0x54, 0x54, 0x54, 0x18,  // 0x65, e
   0x08, 0x7E, 0x09, 0x01, 0x02,  // 0x66, f
   0x08, 0x14, 0x54, 0x54, 0x3C,  // 0x67, g
   0x7F, 0x08, 0x04, 0x04, 0x78,  // 0x68, h
   0x00, 0x44, 0x7D, 0x40, 0x00,  // 0x69, i
   0x20, 0x40, 0x44, 0x3D, 0x00,  // 0x6a, j
   0x00, 0x7F, 0x10, 0x28, 0x44,  // 0x6b, k
   0x00, 0x41, 0x7F, 0x40, 0x00,  // 0x6c, l
   0x7C, 0x04, 0x18, 0x04, 0x78,  // 0x6d, m
   0x7C, 0x08, 0x04, 0x04, 0x78,  // 0x6e, n
   0x38, 0x44, 0x44, 0x44, 0x38,  // 0x6f, o
   0x7C, 0x14, 0x14, 0x14, 0x08,  // 0x70, p
   0x08, 0x14, 0x14, 0x18, 0x7C,  // 0x71, q
   0x7C, 0x08, 0x04, 0x04, 0x08,  // 0x72, r
   0x48, 0x54, 0x54, 0x54, 0x20,  // 0x73, s
   0x04, 0x3F, 0x44, 0x40, 0x20,  // 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
   0x0C, 0x50, 0x50, 0x50, 0x3C,  // 0x79, y
   0x44, 0x64, 0x54, 0x4C, 0x44,  // 0x7a, z
   0x00, 0x08, 0x36, 0x41, 0x00,  // 0x7b, {
   0x00, 0x00, 0x7F, 0x00, 0x00,  // 0x7c, |
   0x00, 0x41, 0x36, 0x08, 0x00,  // 0x7d, }
   0x08, 0x08, 0x2A, 0x1C, 0x08,  // 0x7e, ~
   0x08, 0x1C, 0x2A, 0x08, 0x08   // 0x7f, DEL
};

char message[];
char *text;
int messptr=0;
   
void max7221_fill_buffer(char *buffer) {
   int txtptr;
   
   for(txtptr=0;buffer[txtptr];txtptr++) {
      strncpy(message+messptr,font+((buffer[txtptr]-0x20)*5),5);
      message[messptr+5]=0;
      messptr+=5;
   }
   while(messptr<50)
      message[messptr++]=0;
}

void max7221_display_message() {
   int column,matrix,index;
   
   for(column=DIGIT_0;column<=DIGIT_4;column++) {
      index=column-1;
      output_low(MAX7221_CS);
      for(matrix=DOT_MATRIX_DISPLAY_LEFT;matrix<=DOT_MATRIX_DISPLAY_RIGHT;matrix++) {
         spi_write(column);
         spi_write(message[index]);
         index+=5;
      }
      output_high(MAX7221_CS);
   }
}

void max7221_put(int addr,int data) {
   int matrix;
   
   output_low(MAX7221_CS);
   for(matrix=DOT_MATRIX_DISPLAY_LEFT;matrix<=DOT_MATRIX_DISPLAY_RIGHT;matrix++) {
      spi_write(addr);
      spi_write(data);
   }
   output_high(MAX7221_CS);
}

void max7221_clear() {
   int column,matrix;
   
   for(column=DIGIT_0;column<=DIGIT_4;column++) {
      output_low(MAX7221_CS);
      for(matrix=DOT_MATRIX_DISPLAY_LEFT;matrix<=DOT_MATRIX_DISPLAY_RIGHT;matrix++) {
         spi_write(column);
         spi_write(0x00);
      }
      output_high(MAX7221_CS);
   }
}

void max7221_init() {
   max7221_put(DECODE_MODE,NO_DECODE_DIGITS_7_0);
   max7221_put(SCAN_LIMIT,DISPLAY_DIGITS_01234);
   max7221_put(SHUT_DOWN,NORMAL_MODE);
   max7221_put(DISPLAY_TEST,NORMAL_OPERATION);
   max7221_put(INTENSITY,DUTY_CYCLE_1);
}

Code:

#include <18F4620.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,NOBROWNOUT,NOPUT,NOLVP,DEBUG,NOSTVREN,NOPROTECT

#include <string.h>
#include <max7221 (5x7 dot matrix).h>

void main() {
   
   setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);
   
   max7221_init();
   max7221_clear();
   
   strcpy(text,"ABCDEFGHIJK");
   max7221_fill_buffer(text);
   
   max7221_display_message();
}
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

PostPosted: Fri May 12, 2006 3:12 am     Reply with quote

strncpy() will copy all data until the specified number of characters is reached or a null character (0x00) is found. In your string 'ABCDEFGHIJK', the character 'I' is the first character to contain a 0x00 byte in the 5 bytes to be copied and that is where the copy stops.

Also your variable messptr is now a global and only set to 0 at program startup, after that is never reset to 0 again.

Try the replacement below and tell us the results:
Code:
void max7221_fill_buffer(char *Buffer)
{
  char CurrentChar;
  char *MsgPtr;
   
  // Clear message
  memset(message, 0x00, 50);
 
  // Copy font for each character
  MsgPtr = &message[0];
  CurrentChar = *Buffer;
  while (CurrentChar)
  {
    memcpy(MsgPtr, font[CurrentChar - 0x20], 5);
    MsgPtr += 5;

    CurrentChar = *(++Buffer);
  }
}



Another tip: make your font array a constant array by adding the 'const' keyword:
Code:
const char Font[] = {
This will save a lot of your program and RAM memory space as it keeps the data in program area instead of copying all the data at program start to RAM also.
The Puma



Joined: 23 Apr 2004
Posts: 227
Location: The Netherlands

View user's profile Send private message

PostPosted: Sat May 20, 2006 6:52 am     Reply with quote

Ok, this works now, but how can i move the text by one column each from left to right?

@ckielstra
I have sent a mail
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group