اطلاعیه

Collapse
No announcement yet.

مشکل در فهم کد

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در فهم کد

    سلام
    من چون تازه کارم
    بعضی قسمتای این کد رو متوجه نمیشم
    یه جوونمرد پیدا میشه به من کمک کنه؟
    کد:
    
    #include "lcd.h"
    /****************************************************************************
    Function Name : delay()
    Description :This function suspends the tasks for specified ticks.
    Input : ticks:no of ticks in multiple of 1 usec
    task: task to be suspended
    Output : void
    Note :
    *****************************************************************************/
    void delay(int count)
    {
    int j=0,i=0;
    for(j=0;j<count;j++)
    {
    /* At 60Mhz, the below loop introduces delay of 10 us */
    for(i=0;i<35;i++);
    }
    }
    /*******************************************************************************************
    Function Name :	wait_lcd()
    Description :
    Input :
    Output :	Void
    Note :
    ****************************************************************************************/
    void wait_lcd( void )
    {
    LCD_DATA_DIR &= ~LCD_DATA_MASK;
    LCD_CTRL_CLR |= LCDRS;
    LCD_CTRL_SET |= LCDRW |LCDEN;
    while(LPC_GPIO0->FIOPIN & LCD_BUSY_FLAG);	 /* wait for busy flag to become low */
    
    LCD_CTRL_CLR |= LCDEN | LCDRW;
    LCD_DATA_DIR |= LCD_DATA_MASK;
    
    delay(100);
    }
    
    /******************************************************************************************
    Function Name :	lcd_command_write()
    Description :
    Input :
    Output :	Void
    Note :
    ****************************************************************************************/
    #define DATA_POS 4
    #define DELAY_COUNT 100
    void lcd_command_write( unsigned char command )
    {
    unsigned char temp=0;
    unsigned int temp1=0;
    
    temp=command;
    temp=(temp>>4)&0x0F;
    temp1=(temp<<DATA_POS)&LCD_DATA_MASK;
    
    LCD_CTRL_CLR = LCDRS;
    LCD_CTRL_SET = LCDEN;
    LCD_DATA_CLR = LCD_DATA_MASK;
    LCD_DATA_SET = temp1;
    delay(DELAY_COUNT);
    LCD_CTRL_CLR = LCDEN;
    
    temp=command;
    temp&=0x0F;
    temp1=(temp<<DATA_POS)&LCD_DATA_MASK;
    delay(DELAY_COUNT);
    
    LCD_CTRL_CLR |= LCDRS;
    LCD_CTRL_SET |= LCDEN;
    LCD_DATA_CLR = LCD_DATA_MASK;
    LCD_DATA_SET = temp1;
    delay(DELAY_COUNT);
    LCD_CTRL_CLR |= LCDEN;
    wait_lcd();
    }
    
    /*******************************************************************************************
    Function Name :	set_lcd_port_output()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    void set_lcd_port_output( void )
    {
    LCD_CTRL_DIR |= ( LCDEN | LCDRS | LCDRW | LCD_BACKLIGHT );
    LCD_CTRL_CLR |= ( LCDEN | LCDRS | LCDRW | LCD_BACKLIGHT );
    LCD_DATA_DIR |= LCD_DATA_MASK;
    }
    
    /*****************************************************************************************
    Function Name :	lcd_clear()
    Description :
    Input :
    Output :	Void
    Note :
    *****************************************************************************************/
    void lcd_clear( void)
    {
    lcd_command_write( 0x01 );
    }
    
    /*******************************************************************************************
    Function Name :	lcd_gotoxy()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    int lcd_gotoxy( unsigned int x, unsigned int y)
    {
    int retval = 0;
    
    if( (x > 1) && (y > 15) )
    {
    retval = -1;
    } else {
    if( x == 0 )
    {
    lcd_command_write( 0x80 + y );	 /* command - position cursor at 0x00 (0x80 + 0x00 ) */
    } else if( x==1 ){
    lcd_command_write( 0xC0 + y );	 /* command - position cursor at 0x40 (0x80 + 0x00 ) */
    }
    }
    return retval;
    }
    
    /*******************************************************************************************
    Function Name :	lcd_data_write()
    Description :
    Input :
    Output :	Void
    Note :
    ********************************************************************************************/
    void lcd_data_write( unsigned char data )
    {
    unsigned char temp=0;
    unsigned int temp1=0;
    
    temp=data;
    temp=(temp>>4)&0x0F;
    temp1=(temp<<DATA_POS)&LCD_DATA_MASK;
    
    LCD_CTRL_SET |= LCDEN|LCDRS;
    LCD_DATA_CLR = LCD_DATA_MASK;
    LCD_DATA_SET = temp1;
    LCD_CTRL_CLR |= LCDEN;
    
    temp=data;
    temp&=0x0F;
    temp1=(temp<<DATA_POS)&LCD_DATA_MASK;
    
    LCD_CTRL_SET |= LCDEN|LCDRS;
    LCD_DATA_CLR = LCD_DATA_MASK;
    LCD_DATA_SET = temp1;
    LCD_CTRL_CLR |= LCDEN;
    wait_lcd();
    }
    
    /**********************************************************************************************
    Function Name :	lcd_putchar()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    void lcd_putchar( int c )
    {
    lcd_data_write( c );
    }
    
    /**********************************************************************************************
    Function Name :	lcd_putstring()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    void lcd_putstring( unsigned char line, char *string )
    {
    unsigned char len = MAX_CHAR_IN_ONE_LINE;
    
    lcd_gotoxy( line, 0 );
    while(*string != '\0' && len--)
    {
    lcd_putchar( *string );
    string++;
    }
    }
    
    /**********************************************************************************************
    Function Name :	lcd_backlight_on()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    void lcd_backlight_on()
    {
    LCD_BACK_LIGHT_DIR |= LCD_BACKLIGHT;
    LCD_BACK_LIGHT_SET |= LCD_BACKLIGHT;
    }
    
    /*********************************************************************************************
    Function Name : turn_off_lcd_back_light()
    Description :
    Input :
    Output : Void
    Note :
    *********************************************************************************************/
    void lcd_backlight_off(void)
    {
    LCD_BACK_LIGHT_DIR |= LCD_BACKLIGHT;
    LCD_BACK_LIGHT_CLR |= LCD_BACKLIGHT;
    }
    
    /**********************************************************************************************
    Function Name :	init_lcd()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    void init_lcd( void )
    {
    set_lcd_port_output();
    lcd_command_write(0x28); /* 4-bit interface, two line, 5X7 dots. */
    // lcd_clear() ; /* LCD clear */
    lcd_command_write(0x02); /* cursor home */
    lcd_command_write(0x06); /* cursor move direction */
    lcd_command_write(0x0C) ; /* display on */
    lcd_gotoxy(0, 0);
    lcd_clear();
    }
    بیشتر اون قسمتایی که رجیستر هارو واسه lcd تنظیم می کنه نمی فهمم چی کار کرده!!! :cry2:

    #2
    پاسخ : مشکل در فهم کد

    نوشته اصلی توسط mingil
    سلام
    من چون تازه کارم
    بعضی قسمتای این کد رو متوجه نمیشم
    یه جوونمرد پیدا میشه به من کمک کنه؟
    کد:
    
    #include "lcd.h"
    /****************************************************************************
    Function Name : delay()
    Description :This function suspends the tasks for specified ticks.
    Input : ticks:no of ticks in multiple of 1 usec
    task: task to be suspended
    Output : void
    Note :
    *****************************************************************************/
    void delay(int count)
    {
    int j=0,i=0;
    for(j=0;j<count;j++)
    {
    /* At 60Mhz, the below loop introduces delay of 10 us */
    for(i=0;i<35;i++);
    }
    }
    /*******************************************************************************************
    Function Name :	wait_lcd()
    Description :
    Input :
    Output :	Void
    Note :
    ****************************************************************************************/
    void wait_lcd( void )
    {
    LCD_DATA_DIR &= ~LCD_DATA_MASK;
    LCD_CTRL_CLR |= LCDRS;
    LCD_CTRL_SET |= LCDRW |LCDEN;
    while(LPC_GPIO0->FIOPIN & LCD_BUSY_FLAG);	 /* wait for busy flag to become low */
    
    LCD_CTRL_CLR |= LCDEN | LCDRW;
    LCD_DATA_DIR |= LCD_DATA_MASK;
    
    delay(100);
    }
    
    /******************************************************************************************
    Function Name :	lcd_command_write()
    Description :
    Input :
    Output :	Void
    Note :
    ****************************************************************************************/
    #define DATA_POS 4
    #define DELAY_COUNT 100
    void lcd_command_write( unsigned char command )
    {
    unsigned char temp=0;
    unsigned int temp1=0;
    
    temp=command;
    temp=(temp>>4)&0x0F;
    temp1=(temp<<DATA_POS)&LCD_DATA_MASK;
    
    LCD_CTRL_CLR = LCDRS;
    LCD_CTRL_SET = LCDEN;
    LCD_DATA_CLR = LCD_DATA_MASK;
    LCD_DATA_SET = temp1;
    delay(DELAY_COUNT);
    LCD_CTRL_CLR = LCDEN;
    
    temp=command;
    temp&=0x0F;
    temp1=(temp<<DATA_POS)&LCD_DATA_MASK;
    delay(DELAY_COUNT);
    
    LCD_CTRL_CLR |= LCDRS;
    LCD_CTRL_SET |= LCDEN;
    LCD_DATA_CLR = LCD_DATA_MASK;
    LCD_DATA_SET = temp1;
    delay(DELAY_COUNT);
    LCD_CTRL_CLR |= LCDEN;
    wait_lcd();
    }
    
    /*******************************************************************************************
    Function Name :	set_lcd_port_output()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    void set_lcd_port_output( void )
    {
    LCD_CTRL_DIR |= ( LCDEN | LCDRS | LCDRW | LCD_BACKLIGHT );
    LCD_CTRL_CLR |= ( LCDEN | LCDRS | LCDRW | LCD_BACKLIGHT );
    LCD_DATA_DIR |= LCD_DATA_MASK;
    }
    
    /*****************************************************************************************
    Function Name :	lcd_clear()
    Description :
    Input :
    Output :	Void
    Note :
    *****************************************************************************************/
    void lcd_clear( void)
    {
    lcd_command_write( 0x01 );
    }
    
    /*******************************************************************************************
    Function Name :	lcd_gotoxy()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    int lcd_gotoxy( unsigned int x, unsigned int y)
    {
    int retval = 0;
    
    if( (x > 1) && (y > 15) )
    {
    retval = -1;
    } else {
    if( x == 0 )
    {
    lcd_command_write( 0x80 + y );	 /* command - position cursor at 0x00 (0x80 + 0x00 ) */
    } else if( x==1 ){
    lcd_command_write( 0xC0 + y );	 /* command - position cursor at 0x40 (0x80 + 0x00 ) */
    }
    }
    return retval;
    }
    
    /*******************************************************************************************
    Function Name :	lcd_data_write()
    Description :
    Input :
    Output :	Void
    Note :
    ********************************************************************************************/
    void lcd_data_write( unsigned char data )
    {
    unsigned char temp=0;
    unsigned int temp1=0;
    
    temp=data;
    temp=(temp>>4)&0x0F;
    temp1=(temp<<DATA_POS)&LCD_DATA_MASK;
    
    LCD_CTRL_SET |= LCDEN|LCDRS;
    LCD_DATA_CLR = LCD_DATA_MASK;
    LCD_DATA_SET = temp1;
    LCD_CTRL_CLR |= LCDEN;
    
    temp=data;
    temp&=0x0F;
    temp1=(temp<<DATA_POS)&LCD_DATA_MASK;
    
    LCD_CTRL_SET |= LCDEN|LCDRS;
    LCD_DATA_CLR = LCD_DATA_MASK;
    LCD_DATA_SET = temp1;
    LCD_CTRL_CLR |= LCDEN;
    wait_lcd();
    }
    
    /**********************************************************************************************
    Function Name :	lcd_putchar()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    void lcd_putchar( int c )
    {
    lcd_data_write( c );
    }
    
    /**********************************************************************************************
    Function Name :	lcd_putstring()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    void lcd_putstring( unsigned char line, char *string )
    {
    unsigned char len = MAX_CHAR_IN_ONE_LINE;
    
    lcd_gotoxy( line, 0 );
    while(*string != '\0' && len--)
    {
    lcd_putchar( *string );
    string++;
    }
    }
    
    /**********************************************************************************************
    Function Name :	lcd_backlight_on()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    void lcd_backlight_on()
    {
    LCD_BACK_LIGHT_DIR |= LCD_BACKLIGHT;
    LCD_BACK_LIGHT_SET |= LCD_BACKLIGHT;
    }
    
    /*********************************************************************************************
    Function Name : turn_off_lcd_back_light()
    Description :
    Input :
    Output : Void
    Note :
    *********************************************************************************************/
    void lcd_backlight_off(void)
    {
    LCD_BACK_LIGHT_DIR |= LCD_BACKLIGHT;
    LCD_BACK_LIGHT_CLR |= LCD_BACKLIGHT;
    }
    
    /**********************************************************************************************
    Function Name :	init_lcd()
    Description :
    Input :
    Output :	Void
    Note :
    *********************************************************************************************/
    void init_lcd( void )
    {
    set_lcd_port_output();
    lcd_command_write(0x28); /* 4-bit interface, two line, 5X7 dots. */
    // lcd_clear() ; /* LCD clear */
    lcd_command_write(0x02); /* cursor home */
    lcd_command_write(0x06); /* cursor move direction */
    lcd_command_write(0x0C) ; /* display on */
    lcd_gotoxy(0, 0);
    lcd_clear();
    }
    بیشتر اون قسمتایی که رجیستر هارو واسه lcd تنظیم می کنه نمی فهمم چی کار کرده!!! :cry2:
    سلام
    اگه تازه کاری پیشنهاد میکنم یکم با تابع ها کار کن و یاد بگیر چه جوری میشه ازشون استفاده کرد بعد وارد جزئیات بشو
    کدی که گذاشتی مربوط به هدر یک LCD می باشد و البته فک کنم Char LCD و یکسری تابع داره که هر کدوم کار مخصوص به خودشو انجام میده
    یک سری تابع داره که توابع پایه هستن مثله lcd_command_write() و set_lcd_port_output() و معمولا برنامه نویسا به صورت مستقیم از این توابع استفاده نمیکنن
    یک سری تابع هم داره که به صورت مستقیم استفاده میشه مثله lcd_clear که برای پاک کردن صفحه نمایش هست و یا lcd_gotoxy که برای رفتن به یک مکان خاص از LCD می باشد
    بقیه توابع هم به همین صورته
    برنامه نمونه تو انجمن برای راه اندازیش زیاده
    تستشون کن و سعی کن روشون مسلط بشی :job:
    زندگی یعنی امید و حرکت
    کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
    سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
    برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
    به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

    دیدگاه


      #3
      پاسخ : مشکل در فهم کد

      بله چیزایی که گفتین میدونم اما مثلا نمیدونم اینtemp=(temp>>4)&0x0F; یعنی چی!!!!
      یا مثلا در زیر 80و 0cچه طوری محاسبه شده و از این قبیل سوالات!!! :redface:

      دیدگاه


        #4
        پاسخ : مشکل در فهم کد

        نوشته اصلی توسط mingil
        بله چیزایی که گفتین میدونم اما مثلا نمیدونم اینtemp=(temp>>4)&0x0F; یعنی چی!!!!
        یا مثلا در زیر 80و 0cچه طوری محاسبه شده و از این قبیل سوالات!!! :redface:
        پس یه کار کن
        حجم کد خیلی زیاده
        هر تیکشو که مشکل داره بگو تا بهت بگم مثل پست قبلیت
        temp=(temp>>4)&0x0F این دستور متغییر temp رو مقادیرش رو 4 بیت به سمت راست شیفت میده و قسمت High رو میریزه توی قسمت Low و بعد با 0x0F که همون 0b00001111 هست بیت به بیت and میکنه و این کار برای این هست که قسمت High صفر بشه (and کردن با 0 یعنی 0 کردن)
        در واقع برنامه نویس نیاز به اطلاعات موجود در 4 بیت High متغییر temp نیاز داشته برای همین این کارو کرده
        زندگی یعنی امید و حرکت
        کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
        سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
        برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
        به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

        دیدگاه


          #5
          پاسخ : مشکل در فهم کد

          واااااااااای خیلی ممنون :wow:
          1-
          اولین سوال کلا این یعنی چی؟
          LCD_CTRL_CLR |= LCDEN | LCDRW;
          LCD_DATA_DIR |= LCD_DATA_MASK;
          2-
          LCD_DATA_MASK;یعنی کل پایه های دیتامون ولی من نمیدونم چرا برای تعیین ورودی خروجی پایه هامون از دستورLCD_DATA_DIR |= LCD_DATA_MASK; استفاده کرده؟اصلا چه ربطی داره؟
          3-
          برای تابع پاک کردن از دستور lcd_command_write( 0x01 ); استفاده کرده عدد 0x01رو از کجا اورده؟
          4-
          برای تابع gotoxyاز دستور

          lcd_command_write( 0x80 + y ); /* command - position cursor at 0x00 (0x80 + 0x00 ) */
          } else if( x==1 ){
          lcd_command_write( 0xC0 + y );
          استفاده کرده اون 2 تا عدد 80 و 0cیعنی چی؟

          5-
          lcd_command_write(0x02); /* cursor home */
          lcd_command_write(0x06); /* cursor move direction */
          lcd_command_write(0x0C) ; /* display on */
          بازم نمیدونم اعداد داخل ارگومانو از کجا اورده؟
          6-
          توی مفهوم کدش هم یه مشکل کوچولو دیگه دارم کلا این اومده 3 تا dir,clr,set تعریف کرده که خب منطقیه برای تعیین جهت که بگه الان دیتا بگیریم بفرستیم واینا ولی مشکل من اینجاست که نمیدونم وقتی تو توابع مختلف ازش استفاده می کنه چه جوری تنظیمشون می کنه!!!

          ببخشید طولانی شد :rolleyes:
          بازم به شددددت مچکرم :redface:

          دیدگاه


            #6
            پاسخ : مشکل در فهم کد

            نوشته اصلی توسط mingil
            واااااااااای خیلی ممنون :wow:
            1-
            اولین سوال کلا این یعنی چی؟
            LCD_CTRL_CLR |= LCDEN | LCDRW;
            LCD_DATA_DIR |= LCD_DATA_MASK;
            خواهش میکنم
            1- LCDEN و LCDRW یک سری تعریف یا define هستن که نشون میدن کدوم پایه از میکرو به پایه ENو RW از LCD متصل شده و وقتی میگه LCD_CTRL_CLR |= LCDEN | LCDRW; یعنی LCD_CTRL,CLR هر مقداری که داره با حاصل LCDEN | LCDRW باید OR بشه و ریخته بشه داخل خودش. در واقع =| مثله =+ عمل میکنه و یه مورد دیگه این که علامت "|" در زبان سی یعنی or کردمن به صورت بیت به بیت

            -
            LCD_DATA_MASK;یعنی کل پایه های دیتامون ولی من نمیدونم چرا برای تعیین ورودی خروجی پایه هامون از دستورLCD_DATA_DIR |= LCD_DATA_MASK; استفاده کرده؟اصلا چه ربطی داره؟
            فرض کن یه کتابخونه نوشتی برای یک میکرو مثلا ARM حالا میخای این کتابخونه خیلی راحت برای یک میکروی دیگه مثلا AVR استفاده بشه. یکسری از کارها برای همشون یکسانند ولی یکسری تعریف ها فرق میکنه . مثلا نوع کنترل ورودی خروجی ها پس میای اول کار یکسری تعریف انجام میدی برای این ورودی خروجی ها تا بعدا برای یک میکروی دیگه هم فقط با تغییر دادن همین تعریف ها و نه کل هدر بتونی استفاده کنی

            کد:
            -
            برای تابع پاک کردن از دستور lcd_command_write( 0x01 ); استفاده کرده عدد 0x01رو از کجا اورده؟
            این دستورات همه بر اساس دیتا شیت LCD نوشته شده است. اگه دیتا شیت رو نگاه کنی یک جدول داره و گفته برای هر کاری باید چه کدی رو ارسال کنی و حتما برای پاک کردن صفحه گفته باید 0x01 ارسال بشه

            -
            برای تابع gotoxyاز دستور
            lcd_command_write( 0x80 + y ); /* command - position cursor at 0x00 (0x80 + 0x00 ) */
            } else if( x==1 ){
            lcd_command_write( 0xC0 + y );
            استفاده کرده اون 2 تا عدد 80 و 0cیعنی چی؟
            اینا هم بر میگرده به دیتا شیت و این که خواسته چه دیتایی رو ارسال کنید تا من برم به فلان نقطه از LCD .
            ما باید برنامه رو بر اساس LCD مون بنویسیم و هر چی اون میخادو بهش بدیم دلیل هم نداره
            -
            lcd_command_write(0x02); /* cursor home */
            lcd_command_write(0x06); /* cursor move direction */
            lcd_command_write(0x0C) ; /* display on */
            بازم نمیدونم اعداد داخل ارگومانو از کجا اورده؟
            مجددا میگم دیتا شیت گفته :mrgreen:

            6-
            توی مفهوم کدش هم یه مشکل کوچولو دیگه دارم کلا این اومده 3 تا dir,clr,set تعریف کرده که خب منطقیه برای تعیین جهت که بگه الان دیتا بگیریم بفرستیم واینا ولی مشکل من اینجاست که نمیدونم وقتی تو توابع مختلف ازش استفاده می کنه چه جوری تنظیمشون می کنه!!!
            این یکیو نفهمیدم چیه منظورت :sad:
            زندگی یعنی امید و حرکت
            کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
            سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
            برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
            به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

            دیدگاه


              #7
              پاسخ : مشکل در فهم کد

              خیلی ممنون :nice:
              (اشکال اخرم) نمی تونم منظورمو برسونم :cry2:
              ببینید مثلا واسه تابع .h اینارو تعریف کرده
              کد:
              #define LCD_BACK_LIGHT_DIR LPC_GPIO4->FIODIR
              #define LCD_BACK_LIGHT_SET LPC_GPIO4->FIOSET
              #define LCD_BACK_LIGHT_CLR LPC_GPIO4->FIOCLR
              
              #define LCD_DATA_DIR	 LPC_GPIO0->FIODIR
              #define LCD_DATA_SET	 LPC_GPIO0->FIOSET
              #define LCD_DATA_CLR	 LPC_GPIO0->FIOCLR
              
              #define LCD_CTRL_DIR	 LPC_GPIO2->FIODIR
              #define LCD_CTRL_SET 	 LPC_GPIO2->FIOSET
              #define LCD_CTRL_CLR 	 LPC_GPIO2->FIOCLR
              خب حالا مثلا یه جای کد اومده نوشته:
              LCD_CTRL_CLR |= LCDRS;
              خب من میدونم این علامت or هستش و اینا ولی نمی دونم که مثلا در اینجا LCDRSکه برای گفتن اینه که الان دستور داریم یا دیتا چرا باید بیاد باLCD_CTRL_CLR or بشه اصلا هدفشو نمی دونم چیه متوجه منظورم شدید؟
              ببخشید سوالام طولانی شد!!!!!! :redface:

              دیدگاه


                #8
                پاسخ : مشکل در فهم کد

                نوشته اصلی توسط mingil
                خیلی ممنون :nice:
                (اشکال اخرم) نمی تونم منظورمو برسونم :cry2:
                ببینید مثلا واسه تابع .h اینارو تعریف کرده
                کد:
                #define LCD_BACK_LIGHT_DIR LPC_GPIO4->FIODIR
                #define LCD_BACK_LIGHT_SET LPC_GPIO4->FIOSET
                #define LCD_BACK_LIGHT_CLR LPC_GPIO4->FIOCLR
                
                #define LCD_DATA_DIR	 LPC_GPIO0->FIODIR
                #define LCD_DATA_SET	 LPC_GPIO0->FIOSET
                #define LCD_DATA_CLR	 LPC_GPIO0->FIOCLR
                
                #define LCD_CTRL_DIR	 LPC_GPIO2->FIODIR
                #define LCD_CTRL_SET 	 LPC_GPIO2->FIOSET
                #define LCD_CTRL_CLR 	 LPC_GPIO2->FIOCLR
                خب حالا مثلا یه جای کد اومده نوشته:
                LCD_CTRL_CLR |= LCDRS;
                خب من میدونم این علامت or هستش و اینا ولی نمی دونم که مثلا در اینجا LCDRSکه برای گفتن اینه که الان دستور داریم یا دیتا چرا باید بیاد باLCD_CTRL_CLR or بشه اصلا هدفشو نمی دونم چیه متوجه منظورم شدید؟
                ببخشید سوالام طولانی شد!!!!!! :redface:
                ببین این کار هم برای اینه که برای کنترلر LCD تعیین شده که اگر مثلا این پایه ها یک بشن میتونید حالا کد دستور مورد نظر رو بدن
                تمام این مجهولاتی که تو ذهنتونه به خاطر اینه که دیتا شیت رو نخوندی :biggrin:
                زندگی یعنی امید و حرکت
                کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
                سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
                برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
                به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

                دیدگاه


                  #9
                  پاسخ : مشکل در فهم کد

                  به نظر من این نوع یادگیری اصلا خوب نیست .

                  ابتدا پایه رو یاد بگیرین و مشخص کنین چی میخواهین بعد اینطوری با یه مجموعه بزرگ از سوالات به جایی ختم نخواهد شد ..

                  کل سوالاتتون چند بخش کنین ، بخش به بخش متناسب با هر موقعیت مطرح کنین راحتتر به نتیجه میرسن و جوابهای بهتری هم میگیرین ...

                  موفق باشید
                  اعتماد به نفس سلاحی قلابی ، برای رسیدن به اهداف واقعیست...!

                  دیدگاه


                    #10
                    پاسخ : مشکل در فهم کد

                    راستی من یه چیزی بگم
                    خوندن و فهمیدن هدر LCD خوبه ولی نه واجب
                    یک هدر نوشته شده خوبه که شما بتونین در درجه اول ازش استفاده کنین و با قسمتای مختلف میکرو کار کنین بعد اگه لازم شد ریز هر چیزیو بخونین
                    من خودمم نمیدونم هدر چه چیزایی توشه فقط یک سری اطلاعات کلی دارم
                    زندگی یعنی امید و حرکت
                    کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
                    سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
                    برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
                    به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

                    دیدگاه


                      #11
                      پاسخ : مشکل در فهم کد

                      نوشته اصلی توسط mohsen9april
                      به نظر من این نوع یادگیری اصلا خوب نیست .

                      ابتدا پایه رو یاد بگیرین و مشخص کنین چی میخواهین بعد اینطوری با یه مجموعه بزرگ از سوالات به جایی ختم نخواهد شد ..

                      کل سوالاتتون چند بخش کنین ، بخش به بخش متناسب با هر موقعیت مطرح کنین راحتتر به نتیجه میرسن و جوابهای بهتری هم میگیرین ...

                      موفق باشید
                      من قبلا بیشتر با اسمبلی کار کردم و میدونین که اسمبلی خیلی ریزه حالا درگیر پروژه ای هستم و باید lpc1768 رو یاد بگیرم به خاطر همین مجبورم این کارو کنم :redface:
                      وگرنه واقعا گیج شدم این زیادی زبونش سطح بالاست
                      خیلی ممنون :smile:

                      دیدگاه


                        #12
                        پاسخ : مشکل در فهم کد

                        نوشته اصلی توسط mohsen9april
                        به نظر من این نوع یادگیری اصلا خوب نیست .

                        ابتدا پایه رو یاد بگیرین و مشخص کنین چی میخواهین بعد اینطوری با یه مجموعه بزرگ از سوالات به جایی ختم نخواهد شد ..

                        کل سوالاتتون چند بخش کنین ، بخش به بخش متناسب با هر موقعیت مطرح کنین راحتتر به نتیجه میرسن و جوابهای بهتری هم میگیرین ...

                        موفق باشید

                        بله متوجهم و حرف شمارو قبول دارم
                        ولی چون میخوام عمیق یاد بگیرم می خوام اگه یه روزی خودمم بخوام هدر بنویسم توانایی شو داشته باشم وگرنه این که الان کار میکنه مشکلی نیست
                        بازم ممنون :icon_razz:

                        دیدگاه


                          #13
                          پاسخ : مشکل در فهم کد

                          نوشته اصلی توسط mingil

                          بله متوجهم و حرف شمارو قبول دارم
                          ولی چون میخوام عمیق یاد بگیرم می خوام اگه یه روزی خودمم بخوام هدر بنویسم توانایی شو داشته باشم وگرنه این که الان کار میکنه مشکلی نیست
                          بازم ممنون :icon_razz:

                          من که میگم حالا که شما علاقه دارین شروع کنین استارت کار رو بزنین بچه ها هستند میتونن راهنما باشن :job:

                          اعتماد به نفس سلاحی قلابی ، برای رسیدن به اهداف واقعیست...!

                          دیدگاه


                            #14
                            پاسخ : مشکل در فهم کد

                            نوشته اصلی توسط mohsen9april

                            من که میگم حالا که شما علاقه دارین شروع کنین استارت کار رو بزنین بچه ها هستند میتونن راهنما باشن :job:
                            بچه ها!!!!
                            بله خیلی ممنون از شما وبچه ها :icon_razz:
                            به خاطر همین این سوالارو می پرسم دیگه!
                            :biggrin:

                            دیدگاه

                            لطفا صبر کنید...
                            X