اطلاعیه

Collapse
No announcement yet.

تابع sprintf

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

    تابع sprintf

    سلام
    من ماژول sim800lبه میکرو و lcd2.8 وصل کردم.اما فقط در سطر اول خروجی نمایش داده میشه.یعنی اخرین اطلاعات نمایش داده میشن.من میخام بقیه اطلاعات در سطر های بعدی lcd نمایش داده شه اما متاسفانه هر کار میکنم فقط سطر اول نشون میده....
    تابعی که استفاده میکنم sprintf هست.
    unsigned char lcd2_buf[60];
    a[i]=UART0_RxChar
    sprintf(lcd_buf,"%s",a);
    LCD_ShowString(1,10,(const u8 *)lcd_buf);

    #2
    پاسخ : تابع sprintf

    نوشته اصلی توسط aminpower745 نمایش پست ها
    سلام
    من ماژول sim800lبه میکرو و lcd2.8 وصل کردم.اما فقط در سطر اول خروجی نمایش داده میشه.یعنی اخرین اطلاعات نمایش داده میشن.من میخام بقیه اطلاعات در سطر های بعدی lcd نمایش داده شه اما متاسفانه هر کار میکنم فقط سطر اول نشون میده....
    تابعی که استفاده میکنم sprintf هست.
    unsigned char lcd2_buf[60];
    a[i]=UART0_RxChar
    sprintf(lcd_buf,"%s",a);
    LCD_ShowString(1,10,(const u8 *)lcd_buf);
    سلام
    این کد ناقصه چیز زیادی ازش مشخص نیست! کد رو کامل قرار بدید.
    ضمنا برای قرار دادن کد حتما از تگ CPP توی نوار بالایی ویرایشگر متن انجمن استفاده کنید.
    راستی سخت افزار مورد استفاده رو هم دقیق ذکر کنید.
    جدیدترین ویرایش توسط hossein.m98; ۰۰:۰۸ ۱۳۹۹/۰۱/۳۱. دلیل: تکمیل

    دیدگاه


      #3
      پاسخ : تابع sprintf

      متوجه نشدم چطور کد بنویسم ..
      تو این برنامه اگه از uart استفاده بشه تو خروجی اطلاعات sim 800l تو چند سطر توی برنامه termite نمایش داده میشه.اما تو lcd2.8 فقط سطر اول نشون میده و تمام اطلاعات نشون داده نمیشن به عبارتی فقط یک سطر lcd اطلاعات ثبت میشن و به سطر بعدی نمیره.(ماژول sim800l و هدر برد lpc1768(

      #include "lcd.h"
      #include "string.h"
      #include "sys.h"
      #include "uart.h"
      #include "stdio.h"
      #include "delay.h"

      int main (void)
      {


      int i,j;
      char l;
      unsigned char d[32],lcd2_buf[60], lcd_buf[60],a[32],b[11]="AT+IPR=9600";

      SystemInit();
      UART0_Init(9200);

      LCD_Init();
      LCD_SetTextColor (BLUE);
      LCD_SetBackColor (BLUE);
      LCD_Clear (BLUE);

      UART0_TxString("AT+IPR=9600");

      while(1){

      for(i=0;i<=25;i++){

      a[i]=UART0_RxChar();;
      sprintf(lcd_buf,"%s",a);
      LCD_ShowString(1,10,(const u8 *)lcd_buf);
      }
      }]}
      جدیدترین ویرایش توسط aminpower745; ۱۲:۵۷ ۱۳۹۹/۰۱/۳۱.

      دیدگاه


        #4
        پاسخ : تابع sprintf

        نوشته اصلی توسط aminpower745 نمایش پست ها
        متوجه نشدم چطور کد بنویسم ..
        تو این برنامه اگه از uart استفاده بشه تو خروجی اطلاعات sim 800l تو چند سطر توی برنامه termite نمایش داده میشه.اما تو lcd2.8 فقط سطر اول نشون میده و تمام اطلاعات نشون داده نمیشن به عبارتی فقط یک سطر lcd اطلاعات ثبت میشن و به سطر بعدی نمیره.(ماژول sim800l و هدر برد lpc1768(

        #include "lcd.h"
        #include "string.h"
        #include "sys.h"
        #include "uart.h"
        #include "stdio.h"
        #include "delay.h"

        int main (void)
        {


        int i,j;
        char l;
        unsigned char d[32],lcd2_buf[60], lcd_buf[60],a[32],b[11]="AT+IPR=9600";

        SystemInit();
        UART0_Init(9200);

        LCD_Init();
        LCD_SetTextColor (BLUE);
        LCD_SetBackColor (BLUE);
        LCD_Clear (BLUE);

        UART0_TxString("AT+IPR=9600");

        while(1){

        for(i=0;i<=25;i++){

        a[i]=UART0_RxChar();;
        sprintf(lcd_buf,"%s",a);
        LCD_ShowString(1,10,(const u8 *)lcd_buf);
        }
        }]}
        برای گذاشتن کد داخل انجمن، اگر بالای ویرایشگر متنی انجمن (همینجایی که متن پست هاتون رو مینویسید) نگاه کنید، اشکال مختلفی هست که اگر موس رو ببرید روشون اسم هرکدوم رو مینویسه. برای گذاشتن کد، تگ های مختلفی برای زبان های مختلف هست که شما کافیه CPP یا همون ++C رو انتخاب کنید و کدتون رو داخلش کپی کنید. برای مثال من کد شما رو به اون شکل این پایین قرار میدم. البته کمی قشنگ تر اش کردم که خوانا بشه:

        #include "lcd.h"
        #include "string.h"
        #include "sys.h"
        #include "uart.h"
        #include "stdio.h"
        #include "delay.h"


        int main (void)
        {
        int i,j;
        char l;
        unsigned char d[32],lcd2_buf[60], lcd_buf[60],a[32],b[11]="AT+IPR=9600";

        SystemInit();
        UART0_Init(9200);

        LCD_Init();
        LCD_SetTextColor (BLUE);
        LCD_SetBackColor (BLUE);
        LCD_Clear (BLUE);

        UART0_TxString("AT+IPR=9600");

        while(1)
        {
        for(i=0;i<=25;i++)
        {
        a[i]=UART0_RxChar();;
        sprintf(lcd_buf,"%s",a);
        LCD_ShowString(1,10,(const u8 *)lcd_buf);
        }
        }
        ]}

        مورد اول اینکه چند جای کد مشکل داره که نمیدونم اشتباه تایپی بوده یا چیز دیگه. مثلا هیچ لازم نبود خطوط 30 و 31 داخل بدنه for باشن! یا تو خط آخر اون کروشه اصلا نباید باشه. بودنش باعث خطای کامپایلر میشه!
        مورد بعدی اینه که شما اصلا به این توجه نکردید که هر رشته یک کاراکتر پایانی هم داره! مثلا توی خط 13 که تعریف چندتا رشته رو داریم، رشته b رو 11 بایتی در نظر گرفتید و دقیقا با 11 کاراکتر مقدار دهی کردید. این کار باعث میشه اون کاراکتر پایانی رشته در جای غلطی ذخیره بشه و ممکنه مشکل پیش بیاره. برای اون مورد شما باید سایز رشته رو 12 در نظر میگرفتید!
        اما در مورد LCD؛ هرچند همونطوری که تذکر دادم مدلش رو نگفتید، اما با این حال باید به این توجه داشته باشید که نمایش روی LCD خیلی وابسته اس به نرم افزار راه انداز اون. ظاهرا شما میخوایید رشته ای روی LCD چاپ کنید که بزرگتر از عرض LCD هستش و انتظار دارید باقی رشته به صورت خودکار به سطر پایین منتقل بشه. اصلا شاید اون کتابخونه ای که ازش استفاده کردید همچین قابلیتی نداشته باشه و شما باید خودتون سطر ها رو مدیریت کنید! بعضا همین نکات کوچیک کلی روی عملکرد کد تاثیر گذاره.

        دیدگاه


          #5
          پاسخ : تابع sprintf

          ممنون.کروشه اشتباه تایپیه..
          من حتی رشته b دوازده بایت قرار دادم نشد.من از ماژول lcd3.2 tft خود eca استفاده میکنم.نرم افزار keil
          چطور میشه سطرها رو مدیریت کرد؟؟

          دیدگاه


            #6
            پاسخ : تابع sprintf

            نوشته اصلی توسط aminpower745 نمایش پست ها
            ممنون.کروشه اشتباه تایپیه..
            من حتی رشته b دوازده بایت قرار دادم نشد.من از ماژول lcd3.2 tft خود eca استفاده میکنم.نرم افزار keil
            چطور میشه سطرها رو مدیریت کرد؟؟
            اون رشته b رو که کلی گفتم؛ اصلا ربطی به این برنامه نداره.
            مدیریت سطر ها هم با خودتونه من شاید نتونم کمک زیادی بکنم. اما به هر صورت شما باید ببینید هر سطر چه مقدار کاراکتر جا میشه و همون مقدار بهش اختصاص بدید. باقی کاراکترها رو هم باید تو سطر بعدی بنویسید. این روند رو انقدر تکرار میکنید تا کاراکترها تموم بشه. این دیگه هنر برنامه نویسی شماست که مشخص میکنه به چه شکلی این کارو انجام بدید که کارایی و زیبایی رو با هم داشته باشه.
            اگر بازم سوالی بود بفرمایید.

            دیدگاه


              #7
              پاسخ : تابع sprintf

              ممنون.
              یعنی باید تو کتابخونه lcd تغییراتی بدم؟؟

              دیدگاه


                #8
                پاسخ : تابع sprintf

                نوشته اصلی توسط aminpower745 نمایش پست ها
                ممنون.
                یعنی باید تو کتابخونه lcd تغییراتی بدم؟؟
                نه لازم به تغییر کتابخونه نیست. شما اول باید ببینید توی هر سطر چند کاراکتر جا میشه؛ بعد داخل برنامه اصلی یجوری مینویسید که بعد از نوشتن اون مقدار کاراکتر خط رو عوض کنه و بقیش رو توی خط جدید بنویسه.

                دیدگاه


                  #9
                  پاسخ : تابع sprintf

                  ممنون.لطف کردین

                  دیدگاه

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