|
|
View previous topic :: View next topic |
Author |
Message |
sadlpx
Joined: 19 Feb 2004 Posts: 23
|
messages in an array |
Posted: Wed Jun 01, 2005 11:22 am |
|
|
I'm not a very good C programmer but here is what i'm trying to accomplish.
I have a 4 line LCD, I want the top 3 lines to be a vertically scrolling menu. My choice will always be the middle line. IF i hit enter i will know what he message is based on the current menu.
What i want
" CMD 0"
"> CMD1"
" CMD2"
" up dwn esc enter"
If i hard code each line with a series of case statment (one of each menu it works fine)
Here is what i would like to do, much easier, much shorter
STRUCT CMDS {
char C_string[19];
} ;
Const Struct CMDS C_item[10] =
{
{"cmd0 \n\0"},
{"cmd1 \n\0"},
{"cmd2 \n\0"},
{"cmd3 \n\0"},
{"cmd4 \n\0"},
{"cmd5 \n\0"},
{"cmd6 \n\0"},
{"cmd7 \n\0"},
{"cmd8 \n\0"},
{"cmd9 \n\0"},
};
// ----------------------------------------------------------------------------
void Display_Menu(int new) {
LCD_goto(2);
printf(C_item[new]);
LCD_goto(22);
printf(C_item[new +1]);
LCD_goto(42);
printf(C_item[New + 2]);
}
Problem is everytimeit restarts each line with "cmd0" and gets longer.
Feeling stupid |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Jun 01, 2005 12:08 pm |
|
|
Post your LCD_goto() function. |
|
|
sadlpx
Joined: 19 Feb 2004 Posts: 23
|
|
Posted: Wed Jun 01, 2005 12:44 pm |
|
|
Here is the function but i don't think that thast the problem
void LCD_goto( int posn ) {
putc(16); // Cursor Position command
posn = posn + 64;
putc(posn); // New LIne Position
}
If i hard code the origina routine ina casr atatement it works fine, only the chage to the array causes me problems. here was my original code usign 2 cases. the only difference was commenting out the fixed message and trying the array.
16f876 @10M
void Display_Menu(int new) {
switch(new) {
case 0:
LCD_goto(2);
printf("*** MAIN MENU ****");
// printf(C_item[0]);
LCD_goto(22);
printf("Run Battery Test ");
// printf(C_item[1]);
LCD_goto(42);
printf("Download Data ");
// printf(C_item[2]);
break;
case 1:
LCD_goto(2);
printf("Run Battery Test ");
LCD_goto(22);
printf("Download Data ");
LCD_goto(42);
printf("Setup ");
break; |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Jun 01, 2005 1:18 pm |
|
|
If you think there's a problem with the ROM structure, you don't
need an LCD to test it. You can test it with a terminal program.
I made the following test program. I couldn't get your code to
compile with PCM vs. 3.225. The compiler gave me this error
message on all your printf lines:
"Attempt to create a pointer to a constant"
I fixed that by adding "%s" to all your printf statements.
I also commented out your LCD_goto() statements because they
don't apply to my terminal program.
I ran the program and I got this output on my terminal window:
Code: |
Hello World
cmd0
cmd1
cmd2 |
Code: | #include <16F877.H>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock = 4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#ignore_warnings 202, 203
//============================
STRUCT CMDS {
char C_string[19];
} ;
Const Struct CMDS C_item[10] =
{
{"cmd0 \n\0"},
{"cmd1 \n\0"},
{"cmd2 \n\0"},
{"cmd3 \n\0"},
{"cmd4 \n\0"},
{"cmd5 \n\0"},
{"cmd6 \n\0"},
{"cmd7 \n\0"},
{"cmd8 \n\0"},
{"cmd9 \n\0"},
};
//-----------------------
void Display_Menu(int new)
{
//LCD_goto(2);
printf("%s", C_item[new]);
//LCD_goto(22);
printf("%s", C_item[new +1]);
//LCD_goto(42);
printf("%s", C_item[New + 2]);
} |
|
|
|
|
|
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
|