اطلاعیه

Collapse
No announcement yet.

LCD (بنی آدم اعضای یک پیکرند...!!!)

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

    #16
    پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

    سلام
    شما بیا یه کلک بزن :mrgreen: :mrgreen:
    وقتی میخواهی تو while(1) رو lcd نشون بدی بادستور #asm("cli" تمام وقفه ها را غیر فعال کن بعد که رو lcd نمایش دادی دوباره فعالشون کن و یه delay به اندازه 200 میلی ثانیه بده ببین درست میشه
    فرزندم در راه است

    دیدگاه


      #17
      پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

      :mrgreen:الان امتحان میکنم!
      برنامم میذارم،اگه ممکنه ببینینش! :smile:
      فقط دو راه برای زندگی کردن وجود دارد.یکی این است که هیچ چیز معجزه نیست.راه دیگر این است که انگار همه چیز معجزه است.
      " انیشتین"

      دیدگاه


        #18
        پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

        #include <mega16.h>
        #include <delay.h>
        #include <stdio.h>
        #include <string.h>
        #asm
        .equ __lcd_port=0x18 ;PORTB
        #endasm
        #include <lcd.h>

        #define RXB8 1
        #define TXB8 0
        #define UPE 2
        #define OVR 3
        #define FE 4
        #define UDRE 5
        #define RXC 7

        #define FRAMING_ERROR (1<<FE)
        #define PARITY_ERROR (1<<UPE)
        #define DATA_OVERRUN (1<<OVR)
        #define DATA_REGISTER_EMPTY (1<<UDRE)
        #define RX_COMPLETE (1<<RXC)

        #define RX_BUFFER_SIZE 8
        char rx_buffer[RX_BUFFER_SIZE],lcd_buffer[];
        #if RX_BUFFER_SIZE<256
        unsigned char rx_wr_index,rx_rd_index,rx_counter;
        #else
        unsigned int rx_wr_index,rx_rd_index,rx_counter;
        #endif

        bit rx_buffer_overflow,test=0;
        int cnt=0;
        interrupt [USART_RXC] void usart_rx_isr(void)
        {
        char status,data;
        status=UCSRA;
        data=UDR;
        test=1;
        lcd_buffer[cnt]=data;
        cnt++;
        if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
        {
        rx_buffer[rx_wr_index]=data;
        if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
        if (++rx_counter == RX_BUFFER_SIZE)
        {
        rx_counter=0;
        rx_buffer_overflow=1;
        };
        }

        #ifndef _DEBUG_TERMINAL_IO_
        #define _ALTERNATE_GETCHAR_
        #pragma used+
        char getchar(void)
        {
        char data;
        while (rx_counter==0);
        data=rx_buffer[rx_rd_index];
        if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
        #asm("cli&quot
        --rx_counter;
        #asm("sei&quot
        return data;
        }
        #pragma used-
        #endif

        void INQURY(void);
        void main(void)
        {
        int i=0;

        PORTA=0x00;
        DDRA=0xFF;
        PORTB=0x00;
        DDRB=0xFF;
        PORTC=0x00;
        DDRC=0x00;
        PORTD=0x00;
        DDRD=0x00;
        TCCR0=0x00;
        TCNT0=0x00;
        OCR0=0x00;
        TCCR1A=0x00;
        TCCR1B=0x00;
        TCNT1H=0x00;
        TCNT1L=0x00;
        ICR1H=0x00;
        ICR1L=0x00;
        OCR1AH=0x00;
        OCR1AL=0x00;
        OCR1BH=0x00;
        OCR1BL=0x00;
        ASSR=0x00;
        TCCR2=0x00;
        TCNT2=0x00;
        OCR2=0x00;
        MCUCR=0x00;
        MCUCSR=0x00;
        TIMSK=0x00;
        UCSRA=0x00;
        UCSRB=0x98;
        UCSRC=0x86;
        UBRRH=0x00;
        UBRRL=0x2F;
        ACSR=0x80;
        SFIOR=0x00;
        lcd_init(16);
        #asm("sei&quot

        for(i=0;i<7;i++)
        {
        PORTA.1=1;
        INQURY();
        delay_ms(1000);//Timeout of Inqury
        if(test==1) break;
        PORTA.1=0;
        delay_ms(100);
        };
        while (1)
        {
        lcd_puts(lcd_buffer);
        delay_ms(500);
        };
        }
        void INQURY(void)//=========INQURY=========//
        {
        delay_ms(10);
        putchar('A'
        delay_ms(10);
        putchar('T'
        delay_ms(10);
        putchar('+'
        delay_ms(10);
        putchar('B'
        delay_ms(10);
        putchar('T'
        delay_ms(10);
        putchar('I'
        delay_ms(10);
        putchar('N'
        delay_ms(10);
        putchar(0x0D);
        }
        فقط دو راه برای زندگی کردن وجود دارد.یکی این است که هیچ چیز معجزه نیست.راه دیگر این است که انگار همه چیز معجزه است.
        " انیشتین"

        دیدگاه


          #19
          پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

          راهی رو که گفتین انجام دادم اما فرقی نکرد.چند کاراکتر رو نشون میده اما بعد دیگه هیچی نشون نمیده.
          فکر میکنم برنامم مشکل داره!نگاه میکنین؟
          اونجاهایی که تغییر دادم رو blod کردم.
          فقط دو راه برای زندگی کردن وجود دارد.یکی این است که هیچ چیز معجزه نیست.راه دیگر این است که انگار همه چیز معجزه است.
          " انیشتین"

          دیدگاه


            #20
            پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

            نوشته اصلی توسط علیرضا کیانی
            سلام
            شما بیا یه کلک بزن :mrgreen: :mrgreen:
            وقتی میخواهی تو while(1) رو lcd نشون بدی بادستور #asm("cli" تمام وقفه ها را غیر فعال کن بعد که رو lcd نمایش دادی دوباره فعالشون کن و یه delay به اندازه 200 میلی ثانیه بده ببین درست میشه
            این کار را نکردین تو while(1);
            فرزندم در راه است

            دیدگاه


              #21
              پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

              اونقدام شاگرد سر به هوایی نیستم :rolleyes:
              نتیجه اونی که شما گفتین با اینی که اینجا گذاشتم،یکی بود.
              فقط دو راه برای زندگی کردن وجود دارد.یکی این است که هیچ چیز معجزه نیست.راه دیگر این است که انگار همه چیز معجزه است.
              " انیشتین"

              دیدگاه


                #22
                پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

                while (1)
                {
                #asm("cli&quot
                for(j=0;j<cnt;j++)
                {
                lcd_putchar(lcd_buffer[j]);
                delay_ms(100);
                }
                #asm("sei&quot

                };
                فقط دو راه برای زندگی کردن وجود دارد.یکی این است که هیچ چیز معجزه نیست.راه دیگر این است که انگار همه چیز معجزه است.
                " انیشتین"

                دیدگاه


                  #23
                  پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

                  سلام
                  اصلا منظورم این نبود :redface:
                  میشه یه بار دیگه بگید دقیقا چه اتفاقی میافته که نباید بیفته و چه مشکلی پیش میاد؟
                  (من یه خورده هستم)
                  فرزندم در راه است

                  دیدگاه


                    #24
                    پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

                    من وقتی دستوره inqury رو به بلوتوث میفرستم،اون همچین جوابی میده(تو hyper terminal دیدم):
                    AT+BTIN
                    001237D771AB,5A2204,"V3X"
                    OK
                    اما اینو نمایش میده:
                    AT+BTIN AT+BTIN AT+BTIN
                    و بعد صفحه پاک میشه!


                    فقط دو راه برای زندگی کردن وجود دارد.یکی این است که هیچ چیز معجزه نیست.راه دیگر این است که انگار همه چیز معجزه است.
                    " انیشتین"

                    دیدگاه


                      #25
                      پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

                      نوشته اصلی توسط M_E
                      while (1)
                      {
                      #asm("cli&quot
                      for(j=0;j<cnt;j++)
                      {
                      lcd_putchar(lcd_buffer[j]);
                      delay_ms(100);
                      }
                      #asm("sei&quot

                      };
                      در اینجا شما باید دستور #asm("sei&quot را تو خود while(1) و قبل از delay بنویسی
                      فرزندم در راه است

                      دیدگاه


                        #26
                        پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

                        فرقی نکرد :cry2:
                        فقط دو راه برای زندگی کردن وجود دارد.یکی این است که هیچ چیز معجزه نیست.راه دیگر این است که انگار همه چیز معجزه است.
                        " انیشتین"

                        دیدگاه


                          #27
                          پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

                          while (1)
                          {
                          #asm("cli&quot
                          lcd_puts(lcd_buffer);
                          #asm("sei&quot
                          delay_ms(100);
                          };
                          اینجوری نوشتم،اطلاعات رو نشون میده اما رو هم میاد!
                          دفعه اول درست نشون میده،دفعه دوم رو قبلیا مینویسه و ... تا جایی که هنگ میکنه!!!
                          فقط دو راه برای زندگی کردن وجود دارد.یکی این است که هیچ چیز معجزه نیست.راه دیگر این است که انگار همه چیز معجزه است.
                          " انیشتین"

                          دیدگاه


                            #28
                            پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

                            یادم رفت بگم
                            قبل از اینکه بخواهین رو ال سی دی نمایش بدین دستور lcd_clear(); را هم بدین :mrgreen: :mrgreen:
                            فرزندم در راه است

                            دیدگاه


                              #29
                              پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

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

                              دیدگاه


                                #30
                                پاسخ : LCD (بنی آدم اعضای یک پیکرند...!!!)

                                خب با یه lcd_gotoxy() این کار را انجام بدین :job:
                                فرزندم در راه است

                                دیدگاه

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