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

   

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,040
نشاط [ محمد ع يسى ]
قوة السمعة:
قديم 22-03-2016, 05:12 PM المشاركة 9   
افتراضي



السلام عليكم ورحمة الله وبركاته.
إليكم ملف المحاكاه والهكس:
http://www.4shared.com/rar/5Mnj938Ice/New_Folder.html
لقد استخدمت PIC16F887
بتردد 4 ميجا مذبذب داخلي.
ولقد وضعت الكيباد على بورت D
واعتبرت أن الليدات على بورت B
ولكن لم أضع الليدات اختصارا ولأن المستخدم يعرف الخرج على البروتس بدون ليدات.
يمكن تغيير الهارد وير بالتبديل بين البورتات كما تريد بشرط عدم تغيير طريقة مقاومات الرفع كما جاء في الشروط في أول مشاركة.
اعتبرت أن أعلى زر على اليسار هو رقم واحد.
وأن أعلى زر على اليمين رقم 4
وأن أسفل زر على اليمين هو رقم 16
أظن أن القارئ فهم كيف يعد بقية الأزرار.
ومعذرة على تأخر الرفع.
وضعت هذا الكود على عجالة.. ولكن ليس هذا الكود النهائي الذي سأتسابق به.
والسلام عليكم ورحمة الله وبركاته.

اعلانات

rashad shubita
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2014
الدولة: Palestine
المشاركات: 80
نشاط [ rashad shubita ]
قوة السمعة:
قديم 22-03-2016, 09:15 PM المشاركة 10   
Smile السلام عليكم


تفضل اخي الكريم هاد مكتبة انا عملتها بس يمكن اختصارها واذا لم تفهم مبدأ عملها محرك البحث جوجل مليء بالشروحات عنها واعتذر لعدم استطاعتي عن المشاركه بهذه المسابقة الرائعة بسبب اقتراب امتحانات التوجيهي واتمنى للكل التوفيق ^^ واعتقد فرصه مناسبة انك تتعلم عنها في هاد المسابقة ..
والسلام عليكم ورحمة الله وبركاته.

كود:
void lcd_command_write(unsigned char cmd);//----function to send command to lcd
void lcd_cmd_hf(unsigned char cmd);       //----fuuncion to send 4-bit command to lcd
void lcd_data_write(unsigned char da);    //----function to send data to lcd
void lcd_display_string(unsigned char x, unsigned char y,const unsigned char *c);      //--function to send String of data to lcd
void lcd_init();                          //----lcd initialization 
void lcd_store();                         //----function to latch data inside lcd  
void delay(unsigned int ms);              //----Delay function
void lcd_w(unsigned char w);
void lcd_setpoint(unsigned char x, unsigned char y);
void lcd_store();
void lcd_display_number(unsigned char x, unsigned char y, signed int NumberToDisplay);
void ShowCustom(unsigned char x, unsigned char y,  char address); //----function to display custom character
void StoreCustom( char address, const char  * character);         //----function to store custom character

unsigned char st=0;
char StringToDisplay[10];

void lcd_store(){//--Latching function high to low-----//
       
    en = 1;                            //----enable pin high
    delay(1);                          //----delay 1ms
    en = 0;                            //----enable pin low
}

void lcd_w(unsigned char w)
{
    lcd &= 0x0F;                      //----clearing higher 4-bit of PORT and masking lower 4-bit of port
    lcd |= (w & 0xF0);                //----Masking lower 4-bit of data and lower 4-bit of port,send higher 4-bit of data
    lcd_store();                      //----Latching it to lcd

    lcd &= 0x0F;                      //----clearing higher 4-bit of PORT and masking lower 4-bit of port
    lcd |= ((w & 0x0F)<<4);           //----Masking higher 4-bit of data and lower 4-bit of port,send lower 4-bit of data
    lcd_store();                      //----Latching it to lcd
}

void lcd_command_write(unsigned char cmd)
{
    rs = 0;                           //----Register Selected is command register
    lcd_w(cmd);                       //----write the command
}

void lcd_data_write(unsigned char da)
{
    rs = 1;                           //----Register Selected is data register
    lcd_w(da);                        //----write the data
}

void lcd_cmd_hf(unsigned char cmd)
{
    rs = 0;                          //----Register Selected is command register
    lcd &= 0x0F;                     //----Masking higher bit of PORT
    lcd |= (cmd & 0xF0);             //----Masking lower 4-bit of data
    lcd_store();                     //----Latching it to lcd
}

void lcd_setpoint(unsigned char x, unsigned char y)
{
 unsigned char set;

    if(y==1)
        set=127+x;

    else if(y==2)
        set=191+x;

    lcd_command_write(set);

}

void lcd_display_string(unsigned char x, unsigned char y,const unsigned char *c)
{
    lcd_setpoint(x,y);
     while(*c != 0)                  //----while the pointer address not equal to zero (end of string)
     {
        lcd_data_write(*c++);        //----sending data to lcd display using pointer
        st++;
     }
   if(st==255)
       st=0;
    
}

void lcd_display_number(unsigned char x, unsigned char y, signed int NumberToDisplay)
{
   unsigned char  Old_X, Old_Y, Old_Digit_number, Erase_Digit_Number;
   st=0;
   itoa(StringToDisplay ,NumberToDisplay, 10);
   if(Old_X == x && Old_Y == y)
   {
     Erase_Digit_Number = Old_Digit_number - st;
     while(Erase_Digit_Number != 0)
     {
       lcd_data_write(0x20);
       Erase_Digit_Number--;
     }
        
   }
   
   lcd_display_string(x, y, StringToDisplay);     
   Old_Digit_number=st;
   Old_X=x;
   Old_Y=y;
   
}

void StoreCustom( char address, const char  * character)
{
    unsigned char i;
     address & = 0x07 ;
     
    lcd_command_write(64  + (address <<  3 ));  
    
    for(i=0 ; i<8 ; i++) lcd_data_write( character[i] );
   

}

void ShowCustom(unsigned char x, unsigned char y,  char address)
{
  
  address & = 0x07 ;  
  lcd_setpoint(x,y);
  lcd_data_write(address);
  
}

void delay(unsigned int ms)
{
    unsigned int i,j;
    for(i=0;i<ms;i++)
        for(j=0;j<=120;j++);

}

void lcd_init()
{
    lcd_cmd_hf(0x30);               //---sending sequence command
    lcd_cmd_hf(0x20);               //---sending sequence command
    lcd_command_write(0x28);        //---4bit mode & 5*8 dot & 2line
    lcd_command_write(0x0C);        //---cusor blinking 0e
    lcd_command_write(0x01);        //---clear lcd display
    lcd_command_write(0x06);        //---Auto incremintation courser
    lcd_command_write(0x80);        //---location address
    __delay_ms(500);
}

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 23-03-2016, 07:25 AM المشاركة 11   
افتراضي اللهم انفعنا بما علمتنا وعلمنا ما ينفعنا وزدنا علما


السلام عليكم ورحمه الله

الحمد لله والفضل لله توصلت الى طريقه للتعامل مع الكى باد بدون استخدام المكتبة الخاصة بالميكروسى برو ..

والكود استجاب بشكل رائع ..

وايضاا توصلت لفكرة عمل أمر
كود:
  DELAY_MS(  );
لبقاء أمر معين لزمن محدد ولكن بدون انشغال البروسسور عن مراقبة باقى تعليمات البرنامج وأيضااا فى نفس الوقت ينفذ أمر
كود:
  DELAY_MS(  );
ويكون مستعد لتنفيذ أى أمر أخر يطلبه المستخدم ... ولكن بدون استخدام التايمرات أو المقاطعات .. كما شروط المسابقة ..


وهذة صورة المحاكاة .. والكود لك أخى محمد عيسى .. على الخاص ..





تحياتى وبالتوفيق للجميع


..



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