قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

abban270
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 89
نشاط [ abban270 ]
قوة السمعة:0
قديم 05-09-2014, 10:53 PM المشاركة 1   
افتراضي مشكل في الكود مع LCD Twitter FaceBook Google+



السلام عليكم
هذا البرنامج يعمل كالتالي
إذا ضغطنا على RB0 يكتب الرسالة الموجودة في X0
إذا ضغطنا على RB1 يكتب الرسالة الموجودة في X1
لكن بما أن الرسالة طويلة لا يستطيع إكمالها
جربت أحد الطرق لكنها لم تعمل
أرجو تصحيح الكود اذا تمكنتم جزاكم الله خيرا
كود:
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;
     char text_lcd[16];
     
     char txt[50];
char x0[] = " MESSAGE NUMBER ONE IS HERE ... (O_O)";
char x1[] = " MESSAGE NUMBER TWO IS HERE ... (O_O)";

void main()
{
option_reg.b7=0;
TRISB=0XFF;     // initialisation du port B en entrée
TRISC=0;TRISd=0xFC;        //initialisation du port C en sortie
ADCON1=0X06;
PORTC=0;
Lcd_init();
Lcd_Cmd(_LCD_CURSOR_OFF);
while(1){

if  ((portb & 0x0F)==1)  x=x0;
 if ((portb & 0x0F)==2) x=x1;
     lcd_out(1,15,x);
          Lcd_Cmd(_LCD_SHIFT_RIGHT);
  x=txt;
size=sizeof(txt);// calcaulate size of txt
         for(x=0;x<16;x++)
        {  text_lcd[x]=txt[x+y]; }

         lcd_out(1,1,text_lcd);

        delay_ms(100);
     y++;
       if(x+y==size)y=0;

         }
}
الملفات هنا

اعلانات

abban270
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 89
نشاط [ abban270 ]
قوة السمعة:0
قديم 06-09-2014, 03:50 PM المشاركة 2   
افتراضي


تم التغيير قليلا في الكود لكن ما زال المشكل

كود:
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)                ";

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;
if  ((portb & 0x0F)==2)  x=x1;

size=sizeof(x1);// calcaulate size of txt
         for(i=0;i<16;i++)
        {  text_lcd[i]=x[i+y]; }

         lcd_out(1,1,text_lcd);

        delay_ms(100);
     y++;
       if(i+y==size)y=0;

         }
}
الملف الجديد

المشكل في الكود الأحمر

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

abban270
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 89
نشاط [ abban270 ]
قوة السمعة:0
قديم 11-09-2014, 08:53 AM المشاركة 3   
افتراضي


أين أنتم يا اهل البرمجة


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 11-09-2014, 01:06 PM المشاركة 4   
افتراضي


السلام عليكم
تابع هذا الموضوع
http://www.qariya.info/vb/showthread...=150708&page=2


abban270
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 89
نشاط [ abban270 ]
قوة السمعة:0
قديم 15-09-2014, 10:38 AM المشاركة 5   
افتراضي


شكرا على الموضوع
لكن لا يوجد فيه شرح للطريقة التي استخدمتها
كود:
if (...)   {.....}
المشكل أنه تظهر الرسائل عادي
لكن عندما أضغط على زر آخر
تبدأ المشاكل
والملف هنا لترى النتائج
http://www.gulfup.com/?8Jr3PE


WRHLAMDA
:: عضو فضي ::
تاريخ التسجيل: Feb 2005
المشاركات: 635
نشاط [ WRHLAMDA ]
قوة السمعة:113
قديم 15-09-2014, 06:32 PM المشاركة 6   
افتراضي


السلام عليكم

اولا
size=sizeof(x1);// calcaulate size of txt

المفروض تستخدم x وليس x1

مع ان ذلك ليس سبب المشكلة

اعتقد ان المشكلة في المتغير y

عليك ان تحدد قيمة المتغيرات في بداية البرنامج قبل استخدامها

وعند ضغط المفتاح الثاني تكون قمية هذا المتغير معتمدة على العمليات السابقة


abban270
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 89
نشاط [ abban270 ]
قوة السمعة:0
قديم 17-09-2014, 01:17 AM المشاركة 7   
افتراضي


أظن أنه عند تجاهل قيمة المتغيرات في بداية البرنامج
يأخذها 0
لكن المشكل ليس هنا


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 17-09-2014, 01:02 PM المشاركة 8   
افتراضي


أظن أنه عند تجاهل قيمة المتغيرات في بداية البرنامج
يأخذها 0
لكن المشكل ليس هنا
السلام عليكم
تمت حل مشكله
http://up.top4top.net/downloadf-top4...2e6a1-rar.html

هذا كود بأستخدام مكتبه جديده
كود:
sbit LCD0_RS at RD1_bit;
sbit LCD0_EN at RD0_bit;
sbit LCD0_D4 at RD4_bit;
sbit LCD0_D5 at RD5_bit;
sbit LCD0_D6 at RD6_bit;
sbit LCD0_D7 at RD7_bit;

sbit LCD0_RS_Direction at TRISD1_bit;
sbit LCD0_EN_Direction at TRISD0_bit;
sbit LCD0_D4_Direction at TRISD4_bit;
sbit LCD0_D5_Direction at TRISD5_bit;
sbit LCD0_D6_Direction at TRISD6_bit;
sbit LCD0_D7_Direction at TRISD7_bit;
/// Configuration de LCD

bit P1,P2,P3,P4;

unsigned char y=0,size1,i,display=0, count;
char text_lcd[16];

const char x0[] = "                MESSAGE NUMBER ONE IS HERE ... (O_O)                ";
const char x1[] = "                MESSAGE NUMBER TWO IS HERE ... (O_O)                ";
void show_message(const char *text);
void main()
{
//option_reg.b7=0;
TRISB=0XFF;     // initialisation du port B en entrée
ADCON1=0X06;
cmcon=7;
 Lcd0_Init();
 Lcd0_Command(1);
 Lcd0_GotoYX(0,0);
 Lcd0_CstrOut("press any switch");
while(1)
     {

      if(RB0_bit==0)  {display=1;delay_ms(250); }
      if(RB1_bit==0)  {display=2;delay_ms(250);}
      if(display==1){ 
                     size1=sizeof(x0);//calcaulate size of txt
                     show_message(x0);

                    }

      if(display==2)
                     {

                       size1=sizeof(x1);//calcaulate size of txt
                       show_message(x1);
                     }
                     
                     
     }
}

void show_message(const char *text)
{
  Lcd0_GotoYX(0,0);
  Lcd0_CstrNout(text+y,16);

 //lcd_out(1,1,text_lcd);

 count++;
 delay_ms(10);

 if(count==10)// to reducing time
                               {
                                y++;
                                if(y==(size1-15))y=0;
                                count=0;
                               }

}
وهذا بأستخدام مكتبه القديمه
كود:
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 y=0,size1,i,display=0, count;
char text_lcd[17];

const char x0[] = "                MESSAGE NUMBER ONE IS HERE ... (O_O)                ";
const char x1[] = "                MESSAGE NUMBER TWO IS HERE ... (O_O)                ";
void show_message(const char *text);
void main()
{
//option_reg.b7=0;
TRISB=0XFF;     // initialisation du port B en entrée
ADCON1=0X06;
cmcon=7;
 Lcd_Init();
 lcd_cmd(_LCD_CURSOR_OFF);
 Lcd_Cmd(1);
 lcd_out(1,1,"press any switch");
while(1)
     {

      if(RB0_bit==0)  {display=1;delay_ms(250); }
      if(RB1_bit==0)  {display=2;delay_ms(250);}
      if(display==1){ 
                     size1=sizeof(x0);//calcaulate size of txt
                     show_message(x0);
                    }

      if(display==2)
                     {
                       size1=sizeof(x1);//calcaulate size of txt
                       show_message(x1);
                     }
                     
                     
     }
}

void show_message(const char *text)
{
  for(i=0;i<17;i++)
                  {
                    if(i==16){text_lcd[16]=0;break;}
                    else text_lcd[i]=text[i+y];
                  }

 lcd_out(1,1,text_lcd);

 count++;
 delay_ms(10);

 if(count==10)// to reducing time
                               {
                                y++;
                                if(y==(size1-15))y=0;
                                count=0;
                               }

}

أخي رأيت انك أختاريت تردد كرستاله للمشروع 8mhz وضعت في بروتيس تردد كرستاله 4mhz يجب عليك مراعاه أعدادت وضبط كرستاله لكي لايحدث هناك مشاكل خصوصا مع الازمنه
تحياتي

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 01:14 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025