لقد حللت المشكل بطريقة أخرى
وحسنت الرسالة لتبدأ من اليسار
لكن وقعت في مشكل not enough ram
كود:
sbit LCD_RS at RD1_bit;
sbit LCD_EN at RD0_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD1_bit;
sbit LCD_EN_Direction at TRISD0_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
/// Configuration de LCD
bit P1,P2,P3,P4;
unsigned char *x,y,size,i,j;
char text_lcd[16];
char x0[] = " MESSAGE NUMBER ONE IS HERE ... (O_O) ";
char x1[] = " MESSAGE NUMBER TWO IS HERE ... (O_O) ";
char x2[] = " MESSAGE NUMBER three IS HERE ... (O_O) ";
char x3[] = " MESSAGE NUMBER foor IS HERE ... (O_O) ";
char x4[] = " MESSAGE NUMBER five IS HERE ... (O_O) ";
char x5[] = " MESSAGE NUMBER six IS HERE ... (O_O) ";
void main()
{
option_reg.b7=0;
TRISB=0XFF; // initialisation du port B en entrée
TRISd=0xFC; //initialisation du port C en sortie
ADCON1=0X06;
Lcd_init();
Lcd_Cmd(_LCD_CURSOR_OFF);
while(1){
if ((portb & 0x0F)==1) {x=x0; size=sizeof(x0);}
if ((portb & 0x0F)==2) {x=x1; size=sizeof(x1);}
if ((portb & 0x0F)==3) {x=x2; size=sizeof(x2);}
if ((portb & 0x0F)==4) {x=x3; size=sizeof(x3);}
if ((portb & 0x0F)==3) {x=x4; size=sizeof(x4);}
if ((portb & 0x0F)==4) {x=x5; size=sizeof(x5);}
if (portb!=j) {j=portb;y=0; } // efface l'ecran chaque evenement
lcd_out(1,1,text_lcd);
for(i=0;i<16;i++)
{ text_lcd[i]=x[i+y]; }
delay_ms(200);
y++;
if(i+y==size)y=0;
}
}
|
السلام عليكم
أخي العزيز الكود الذي زودتك به يعمل بشكل جيد
أنتبه أخي انا في الكود لم أخزن الرساله في رام وانما في روم ارجو مراجعه الكود مره أخرى
ولاتهتم لاختصار الكود لان بتأكيد سترى مشاكل
فالنسبه لاحتساب حجم رساله نعم يحب أحتساب حجم كل نص والا ستظهر لك مشكله stack over وهذه تظهر لما يحصل تجاوز في قيم محدده مثلا مصفوفه 10 عناصر وخليت حلقه تكرار لهذه مصفوفه مثلا 13 مره يعني قلت مثلا (++for(x=0;x<13;x هنا مصفوفه 10 عناصر وعندما يصل الى عنصر 11 سيحدث مشكله في رام ربما تغير من قيم متغيرات لانها سيتم خزن أجباري وبتالي مايكرو سيدخل في مشكله عويصه مع رام
لاتتعامل مطلقا مع رام في حاله لديك نصوص ثابته دائما خزنها في روم والكود الذي زودك به يوضح ذلك
تحياتي