ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 12
  1. #1
    2015/06/06
    44
    19

    مشکل با lcd کاراکتری

    سلام من یک کتابخونه برای lcd کاراکتری توی keil نوشتم ولی ناقص کار می کنه lcd رو که clear میکنم فقط خط پایین خالی می شه و خط بالا همهی خونه هاش روشن و متن رو نشون نمیده و cursor رو فعال می کنم ولی اون هم فعال نمیشه باید چکار کنم
    اگه میشه کمکم کنید
  2. #2
    2008/09/12
    Isfahan
    1,040
    235

    پاسخ : مشکل با lcd کاراکتری

    نقل قول نوشته اصلی توسط malmal2694

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام من یک کتابخونه برای lcd کاراکتری توی keil نوشتم ولی ناقص کار می کنه lcd رو که clear میکنم فقط خط پایین خالی می شه و خط بالا همهی خونه هاش روشن و متن رو نشون نمیده و cursor رو فعال می کنم ولی اون هم فعال نمیشه باید چکار کنم
    اگه میشه کمکم کنید
    سلام دوست عزیز ، لطفا کدتون را ارال کنید تا بررسی کنیم.
    Reveng will surely come... Your hard time are ahead
    // - - - - - - - - - -
    برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
    // - - - - - - - - - -
    اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
    // - - - - - - - - - -
  3. #3
    2015/06/06
    44
    19

    پاسخ : مشکل با lcd کاراکتری

    این کد رو خودم نوشتم و برای کار با lcd کاراکتری است

    کد:
    #include "LCD.h"#include "GPIO.h"
    
    
    #define OD Out_PP
    #define D1 3000 //900
    #define D2 180000//60000 
    #define D3 30000 //4000
    #define D4 4000000 //4000
    
    
    
    
    void Delay(int Time){
        unsigned int i;
        for(i = 0; i <= Time; i++);
    };
    
    
    /********* function for lcd 8bit init **************/
    void LCD_8BIT_Init(struct PIN_LCD *PIN_LCD){
        Delay(D2);
        Init_PIN(PIN_LCD->PORT_BIT0,PIN_LCD->PIN_BIT0,Config_Out_50MHz,OD); // set pin bit 0
        Init_PIN(PIN_LCD->PORT_BIT1,PIN_LCD->PIN_BIT1,Config_Out_50MHz,OD); // set pin bit 1
        Init_PIN(PIN_LCD->PORT_BIT2,PIN_LCD->PIN_BIT2,Config_Out_50MHz,OD); // set pin bit 2
        Init_PIN(PIN_LCD->PORT_BIT3,PIN_LCD->PIN_BIT3,Config_Out_50MHz,OD); // set pin bit 3
        Init_PIN(PIN_LCD->PORT_BIT4,PIN_LCD->PIN_BIT4,Config_Out_50MHz,OD); // set pin bit 4
        Init_PIN(PIN_LCD->PORT_BIT5,PIN_LCD->PIN_BIT5,Config_Out_50MHz,OD); // set pin bit 5
        Init_PIN(PIN_LCD->PORT_BIT6,PIN_LCD->PIN_BIT6,Config_Out_50MHz,OD); // set pin bit 6
        Init_PIN(PIN_LCD->PORT_BIT7,PIN_LCD->PIN_BIT7,Config_Out_50MHz,OD); // set pin bit 7
        Init_PIN(PIN_LCD->PORT_RS,PIN_LCD->PIN_RS,Config_Out_50MHz,OD); // set pin bit RS
        Init_PIN(PIN_LCD->PORT_E,PIN_LCD->PIN_E,Config_Out_50MHz,OD); // set pin bit E
        Init_PIN(PIN_LCD->PORT_RW,PIN_LCD->PIN_RW,Config_Out_50MHz,OD); // set pin bit RW
        
        LCD_Command(0x38,PIN_LCD); // send command to lcd for init lcd 8 bit
        LCD_Command(0x0F,PIN_LCD); // send command to lcd for Display ON
        LCD_Command(0x01,PIN_LCD); // send command to lcd for clear Display
        LCD_Command(0x06,PIN_LCD); // Entry Mode SET
        LCD_Command(0x80,PIN_LCD); // cursor go to row 1 & column 1
    };
    
    
    /************ send command to lcd *************/
    void LCD_Command(unsigned char Command,struct PIN_LCD *PIN_LCD){
        Reset_PIN(PIN_LCD->PORT_RW,PIN_LCD->PIN_RW); // reset Pin RW
        Reset_PIN(PIN_LCD->PORT_RS,PIN_LCD->PIN_RS); // reset Pin RS
        Set_PIN_LCD(PIN_LCD,Command); // set Pins value
        Set_PIN(PIN_LCD->PORT_E,PIN_LCD->PIN_E); // set Pin Enable LCD
        Delay(D1);
        Reset_PIN(PIN_LCD->PORT_E,PIN_LCD->PIN_E); // Reset Pin Enable LCD
        Delay(D2);
        Reset_PIN_LCD(PIN_LCD,Command); // reset Pins data
    };
    
    
    /************ send Character to lcd *************/
    void LCD_Putchar(char Char,struct PIN_LCD *PIN_LCD){
        Set_PIN(PIN_LCD->PORT_RS,PIN_LCD->PIN_RS); // set pin RS
        Reset_PIN(PIN_LCD->PORT_RW,PIN_LCD->PIN_RW); // reset pin RW
        Set_PIN_LCD(PIN_LCD,Char); // set pins data
        Set_PIN(PIN_LCD->PORT_E,PIN_LCD->PIN_E); // set pin E
        Delay(D1);
        Reset_PIN(PIN_LCD->PORT_E,PIN_LCD->PIN_E); // reset pin Enable lcd
        Delay(D3);
        Reset_PIN_LCD(PIN_LCD,Char); // reset pins data
    };
    
    
    
    
    void Set_PIN_LCD(struct PIN_LCD *PIN_LCD,char Value){
        if( (Value - 128) >= 0){
        Set_PIN(PIN_LCD->PORT_BIT7,PIN_LCD->PIN_BIT7); // while (value -128) >=0 set PIN
        Value = Value - 128;
        };
        
        if( (Value - 64) >= 0){
        Set_PIN(PIN_LCD->PORT_BIT6,PIN_LCD->PIN_BIT6); // while (value -64) >=0 set PIN
        Value = Value - 64;
        };
        
        if( (Value - 32) >= 0){
        Set_PIN(PIN_LCD->PORT_BIT5,PIN_LCD->PIN_BIT5); // while (value -32) >=0 set PIN
        Value = Value - 32;
        };
        
        if( (Value - 16) >= 0){
        Set_PIN(PIN_LCD->PORT_BIT4,PIN_LCD->PIN_BIT4); // while (value -16) >=0 set PIN
        Value = Value - 16;
        };
        
        if( (Value - 8) >= 0){
        Set_PIN(PIN_LCD->PORT_BIT3,PIN_LCD->PIN_BIT3); // while (value -8) >=0 set PIN
        Value = Value - 8;
        };
        
        if( (Value - 4) >= 0){
        Set_PIN(PIN_LCD->PORT_BIT2,PIN_LCD->PIN_BIT2); // while (value -4) >=0 set PIN
        Value = Value - 4;
        };
        
        if( (Value - 2) >= 0){
        Set_PIN(PIN_LCD->PORT_BIT1,PIN_LCD->PIN_BIT1); // while (value -2) >=0 set PIN
        Value = Value - 2;
        };
        
        if( (Value - 1) >= 0){
        Set_PIN(PIN_LCD->PORT_BIT0,PIN_LCD->PIN_BIT0); // while (value -1) >=0 set PIN
        Value = Value - 1;
        };
        
    };
    
    
    
    
    void Reset_PIN_LCD(struct PIN_LCD *PIN_LCD,char Value){
        if( (Value - 128) >= 0){
        Reset_PIN(PIN_LCD->PORT_BIT7,PIN_LCD->PIN_BIT7); // while (value -128) >=0 reset PIN
        Value = Value - 128;
        };
        
        if( (Value - 64) >= 0){
        Reset_PIN(PIN_LCD->PORT_BIT6,PIN_LCD->PIN_BIT6); // while (value -64) >=0 reset PIN
        Value = Value - 64;
        };
        
        if( (Value - 32) >= 0){
        Reset_PIN(PIN_LCD->PORT_BIT5,PIN_LCD->PIN_BIT5); // while (value -32) >=0 reset PIN
        Value = Value - 32;
        };
        
        if( (Value - 16) >= 0){
        Reset_PIN(PIN_LCD->PORT_BIT4,PIN_LCD->PIN_BIT4); // while (value -16) >=0 reset PIN
        Value = Value - 16;
        };
        
        if( (Value - 8) >= 0){
        Reset_PIN(PIN_LCD->PORT_BIT3,PIN_LCD->PIN_BIT3); // while (value -8) >=0 reset PIN
        Value = Value - 8;
        };
        
        if( (Value - 4) >= 0){
        Reset_PIN(PIN_LCD->PORT_BIT2,PIN_LCD->PIN_BIT2); // while (value -4) >=0 reset PIN
        Value = Value - 4;
        };
        
        if( (Value - 2) >= 0){
        Reset_PIN(PIN_LCD->PORT_BIT1,PIN_LCD->PIN_BIT1); // while (value -2) >=0 reset PIN
        Value = Value - 2;
        };
        
        if( (Value - 1) >= 0){
        Reset_PIN(PIN_LCD->PORT_BIT0,PIN_LCD->PIN_BIT0); // while (value -1) >=0 reset PIN
        Value = Value - 1;
        };
        
    };
    دلیل: ادغام دو پست برای جلوگیری از اسپم

    این یکی کتابخونه هم برای کار با GPIO هست و خودم نوشتم

    کد:
    #include "GPIO.h"#include "stm32f10x.h"
    
    
    
    
    
    
    void Init_PIN(char Port,char PIN,char Config_IO,char Mode){
            switch (Port){
                case 1: //PORT is A
                    while( ( (Config_IO < 0) || (Config_IO > 3) ) || ( (Mode <0) || (Mode > 3) ) ); // check Config_IO And Mode Not INvalid 
                    if( (PIN >= 0) && (PIN <= 7) ){ // Number Pin Between 0 And 7
                        GPIOA->CRL &=  ~( 3 << (PIN * 4) ); // Config Bit Mode(In Register CRL) == 0
                        GPIOA->CRL &= ~( 3  << ( ( PIN * 4) + 2 )  ); // Config Bit CNF(In Register CRL) for Config Mode == 0
                        GPIOA->CRL |= ( Config_IO << (PIN * 4)  ); // Config Bit Mode(In Register CRL) 
                        GPIOA->CRL |= ( Mode  << ( ( PIN * 4) + 2 )  ); // Config Bit CNF(In Register CRL) for Config Mode 
                        while( ( ( GPIOA->CRL & ( 3 << (PIN * 4) ) ) != ( Config_IO << (PIN * 4) ) )  ||  ( ( GPIOA->CRL & ( 3  << ( ( PIN * 4) + 2 ) ) ) != ( Mode  << ( ( PIN * 4) + 2 )  ) ) ); // wait set Bits Mode And CNF(In Register CRL)
                    }
                    else if( (PIN >= 8) && (PIN <= 15) ){ // Number Pin Between 8 And 15
                        GPIOA->CRH &=  ~( 3 << ( ( PIN - 8 ) * 4) ); // Config Bit Mode(In Register CRH) == 0
                        GPIOA->CRH &= ~( 3  << ( ( ( PIN - 8 ) * 4) + 2 )  ); // Config Bit CNF(In Register CRH) for Config Mode == 0
                        GPIOA->CRH |= ( Config_IO << ( (PIN - 8) * 4)  ); // Config Bit Mode(In Register CRH) 
                        GPIOA->CRH |= ( Mode  << ( ( ( PIN - 8 ) * 4) + 2 )  ); // Config Bit CNF(In Register CRH) for Config Mode 
                        while( ( ( GPIOA->CRH & ( 3 << ( ( PIN - 8 ) * 4) ) ) != ( Config_IO << ( ( PIN - 8 ) * 4) ) )  ||  ( ( GPIOA->CRH & ( 3  << ( ( ( PIN - 8 ) * 4) + 2 ) ) ) != ( Mode  << ( ( ( PIN - 8 ) * 4) + 2 )  ) ) ); // wait set Bits Mode And CNF(In Register CRH)                                             
                    }
                    else{
                        while(1);
                    };
                    break;
                    
                case 2: //PORT is B
                    while( ( (Config_IO < 0) || (Config_IO > 3) ) || ( (Mode <0) || (Mode > 3) ) ); // check Config_IO And Mode Not INvalid
                    if( (PIN >= 0) && (PIN <= 7) ){ // Number Pin Between 0 And 7
                        GPIOB->CRL &=  ~( 3 << (PIN * 4) ); // Config Bit Mode(In Register CRL) == 0
                        GPIOB->CRL &= ~( 3  << ( ( PIN * 4) + 2 )  ); // Config Bit CNF(In Register CRL) for Config Mode == 0
                        GPIOB->CRL |= ( Config_IO << (PIN * 4)  ); // Config Bit Mode(In Register CRL) 
                        GPIOB->CRL |= ( Mode  << ( ( PIN * 4) + 2 )  ); // Config Bit CNF(In Register CRL) for Config Mode
                        while( ( ( GPIOB->CRL & ( 3 << (PIN * 4) ) ) != ( Config_IO << (PIN * 4) ) )  ||  ( ( GPIOB->CRL & ( 3  << ( ( PIN * 4) + 2 ) ) ) != ( Mode  << ( ( PIN * 4) + 2 )  ) ) ); // wait set Bits Mode And CNF(In Register CRL)                    
                    }
                    else if( (PIN >= 8) && (PIN <= 15) ){ // Number Pin Between 8 And 15
                        GPIOB->CRH &=  ~( 3 << ( ( PIN - 8 ) * 4) ); // Config Bit Mode(In Register CRH) == 0
                        GPIOB->CRH &= ~( 3  << ( ( ( PIN - 8 ) * 4) + 2 )  ); // Config Bit CNF(In Register CRH) for Config Mode == 0
                        GPIOB->CRH |= ( Config_IO << ( (PIN - 8) * 4)  ); // Config Bit Mode(In Register CRH) 
                        GPIOB->CRH |= ( Mode  << ( ( ( PIN - 8 ) * 4) + 2 )  ); // Config Bit CNF(In Register CRH) for Config Mode 
                        while( ( ( GPIOB->CRH & ( 3 << ( ( PIN - 8 ) * 4) ) ) != ( Config_IO << ( ( PIN - 8 ) * 4) ) )  ||  ( ( GPIOB->CRH & ( 3  << ( ( ( PIN - 8 ) * 4) + 2 ) ) ) != ( Mode  << ( ( ( PIN - 8 ) * 4) + 2 )  ) ) ); // wait set Bits Mode And CNF(In Register CRH)                                 
                    }
                    else{
                        while(1);
                    };
                    break;
                    
                case 3: //PORT is C
                    while( ( (Config_IO < 0) || (Config_IO > 3) ) || ( (Mode <0) || (Mode > 3) ) ); // check Config_IO And Mode Not INvalid
                    if( (PIN >= 0) && (PIN <= 7) ){ // Number Pin Between 0 And 7
                        GPIOC->CRL &=  ~( 3 << (PIN * 4) ); // Config Bit Mode(In Register CRL) == 0
                        GPIOC->CRL &= ~( 3  << ( ( PIN * 4) + 2 )  ); // Config Bit CNF(In Register CRL) for Config Mode == 0
                        GPIOC->CRL |= ( Config_IO << (PIN * 4)  ); // Config Bit Mode(In Register CRL) 
                        GPIOC->CRL |= ( Mode  << ( ( PIN * 4) + 2 )  ); // Config Bit CNF(In Register CRL) for Config Mode 
                        while( ( ( GPIOC->CRL & ( 3 << (PIN * 4) ) ) != ( Config_IO << (PIN * 4) ) )  ||  ( ( GPIOC->CRL & ( 3  << ( ( PIN * 4) + 2 ) ) ) != ( Mode  << ( ( PIN * 4) + 2 )  ) ) ); // wait set Bits Mode And CNF(In Register CRL)
                    }
                    else if( (PIN >= 8) && (PIN <= 15) ){ // Number Pin Between 8 And 15
                        GPIOC->CRH &=  ~( 3 << ( ( PIN - 8 ) * 4) ); // Config Bit Mode(In Register CRH) == 0
                        GPIOC->CRH &= ~( 3  << ( ( ( PIN - 8 ) * 4) + 2 )  ); // Config Bit CNF(In Register CRH) for Config Mode == 0
                        GPIOC->CRH |= ( Config_IO << ( (PIN - 8) * 4)  ); // Config Bit Mode(Input or Output)(In Register CRH) 
                        GPIOC->CRH |= ( Mode  << ( ( ( PIN - 8 ) * 4) + 2 )  ); // Config Bit CNF(In Register CRH) for Config Mode 
                        while( ( ( GPIOC->CRH & ( 3 << ( ( PIN - 8 ) * 4) ) ) != ( Config_IO << ( ( PIN - 8 ) * 4) ) )  ||  ( ( GPIOC->CRH & ( 3  << ( ( ( PIN - 8 ) * 4) + 2 ) ) ) != ( Mode  << ( ( ( PIN - 8 ) * 4) + 2 )  ) ) ); // wait set Bits Mode And CNF(In Register CRH)                                                     
                    }
                    else{
                        while(1);
                    };
                    break;
                
                case 4: //PORT is D
                    while( ( (Config_IO < 0) || (Config_IO > 3) ) || ( (Mode <0) || (Mode > 3) ) ); // check Config_IO And Mode Not INvalid
                    if( (PIN >= 0) && (PIN <= 7) ){ // Number Pin Between 0 And 7
                        GPIOD->CRL &=  ~( 3 << (PIN * 4) ); // Config Bit Mode(In Register CRL) == 0
                        GPIOD->CRL &= ~( 3  << ( ( PIN * 4) + 2 )  ); // Config Bit CNF(In Register CRL) for Config Mode == 0
                        GPIOD->CRL |= ( Config_IO << (PIN * 4)  ); // Config Bit Mode(In Register CRL) 
                        GPIOD->CRL |= ( Mode  << ( ( PIN * 4) + 2 )  ); // Config Bit CNF(In Register CRL) for Config Mode 
                        while( ( ( GPIOD->CRL & ( 3 << (PIN * 4) ) ) != ( Config_IO << (PIN * 4) ) )  ||  ( ( GPIOD->CRL & ( 3  << ( ( PIN * 4) + 2 ) ) ) != ( Mode  << ( ( PIN * 4) + 2 )  ) ) ); // wait set Bits Mode And CNF(In Register CRL)
                    }
                    else if( (PIN >= 8) && (PIN <= 15) ){ // Number Pin Between 8 And 15
                        GPIOD->CRH &=  ~( 3 << ( ( PIN - 8 ) * 4) ); // Config Bit Mode(In Register CRH) == 0
                        GPIOD->CRH &= ~( 3  << ( ( ( PIN - 8 ) * 4) + 2 )  ); // Config Bit CNF(In Register CRH) for Config Mode == 0
                        GPIOD->CRH |= ( Config_IO << ( (PIN - 8) * 4)  ); // Config Bit Mode(In Register CRH) 
                        GPIOD->CRH |= ( Mode  << ( ( ( PIN - 8 ) * 4) + 2 )  ); // Config Bit CNF(In Register CRH) for Config Mode 
                        while( ( ( GPIOD->CRH & ( 3 << ( ( PIN - 8 ) * 4) ) ) != ( Config_IO << ( ( PIN - 8 ) * 4) ) )  ||  ( ( GPIOD->CRH & ( 3  << ( ( ( PIN - 8 ) * 4) + 2 ) ) ) != ( Mode  << ( ( ( PIN - 8 ) * 4) + 2 )  ) ) ); // wait set Bits Mode And CNF(In Register CRH)                                                     
                    }
                    else{
                        while(1);
                    };
                    break;
                    
                case 5: //PORT is E
                    while( ( (Config_IO < 0) || (Config_IO > 3) ) || ( (Mode <0) || (Mode > 3) ) ); // check Config_IO And Mode Not INvalid
                    if( (PIN >= 0) && (PIN <= 7) ){ // Number Pin Between 0 And 7
                        GPIOE->CRL &=  ~( 3 << (PIN * 4) ); // Config Bit Mode(In Register CRL) == 0
                        GPIOE->CRL &= ~( 3  << ( ( PIN * 4) + 2 )  ); // Config Bit CNF(In Register CRL) for Config Mode == 0
                        GPIOE->CRL |= ( Config_IO << (PIN * 4)  ); // Config Bit Mode(In Register CRL) 
                        GPIOE->CRL |= ( Mode  << ( ( PIN * 4) + 2 )  ); // Config Bit CNF(In Register CRL) for Config Mode 
                        while( ( ( GPIOE->CRL & ( 3 << (PIN * 4) ) ) != ( Config_IO << (PIN * 4) ) )  ||  ( ( GPIOE->CRL & ( 3  << ( ( PIN * 4) + 2 ) ) ) != ( Mode  << ( ( PIN * 4) + 2 )  ) ) ); // wait set Bits Mode And CNF(In Register CRL)
                    }
                    else if( (PIN >= 8) && (PIN <= 15) ){ // Number Pin Between 8 And 15
                        GPIOE->CRH &=  ~( 3 << ( ( PIN - 8 ) * 4) ); // Config Bit Mode(In Register CRH) == 0
                        GPIOE->CRH &= ~( 3  << ( ( ( PIN - 8 ) * 4) + 2 )  ); // Config Bit CNF(In Register CRH) for Config Mode == 0
                        GPIOE->CRH |= ( Config_IO << ( (PIN - 8) * 4)  ); // Config Bit Mode(In Register CRH) 
                        GPIOE->CRH |= ( Mode  << ( ( ( PIN - 8 ) * 4) + 2 )  ); // Config Bit CNF(In Register CRH) for Config Mode                     while( ( ( GPIOB->CRH & ( 3 << ( ( PIN - 8 ) * 4) ) ) != ( Config_IO << (PIN * 4) ) )  &&  ( ( GPIOB->CRH & ( 3  << ( ( PIN * 4) + 2 ) ) ) != ( Mode  << ( ( ( PIN - 8 ) * 4) + 2 )  ) ) ); // wait set Bits Mode And CNF(In Register CRLH)                                 
                        while( ( ( GPIOE->CRH & ( 3 << ( ( PIN - 8 ) * 4) ) ) != ( Config_IO << ( ( PIN - 8 ) * 4) ) )  ||  ( ( GPIOE->CRH & ( 3  << ( ( ( PIN - 8 ) * 4) + 2 ) ) ) != ( Mode  << ( ( ( PIN - 8 ) * 4) + 2 )  ) ) ); // wait set Bits Mode And CNF(In Register CRH)                                 
                    }
                    else{
                        while(1);
                    };
                    break;
    
    
                default: while(1);
            }
    };
    
    
    
    
    /*********** Functions Set Pins ******************/
    void Set_PINA(char PIN){
        GPIOA->BSRR |= 1 << PIN; // Set PIN
        while( ( (GPIOA->ODR) & ( 1 << PIN) )  != ( 1 << PIN ) ); // wait set PIN = 1
    };
    
    
    void Set_PINB(char PIN){
        GPIOB->BSRR |= 1 << PIN; //set PIN
        //while( ( (GPIOB->ODR) & ( 1 << PIN) )  != ( 1 << PIN ) ); // wait set PIN = 1
    };
    
    
    void Set_PINC(char PIN){
        GPIOC->BSRR |= 1 << PIN; //set PIN
        while( ( (GPIOC->ODR) & ( 1 << PIN) )  != ( 1 << PIN ) ); // wait set PIN = 1
    };
    
    
    void Set_PIND(char PIN){
        GPIOD->BSRR |= 1 << PIN; //set PIN
        while( ( (GPIOD->ODR) & ( 1 << PIN) )  != ( 1 << PIN ) ); // wait set PIN = 1
    };
    
    
    void Set_PINE(char PIN){
        GPIOE->BSRR |= 1 << PIN; //set PIN
        while( ( (GPIOE->ODR) & ( 1 << PIN) )  != ( 1 << PIN ) ); // wait set PIN = 1
    };
    
    
    void Set_PIN(char PORT,char PIN){
        if(PORT == PORTA){
            GPIOA->BSRR |= 1 << PIN; // Set PIN
            while( ( (GPIOA->ODR) & ( 1 << PIN) )  != ( 1 << PIN ) ); // wait set PIN = 1
        }
        if(PORT == PORTB){
            GPIOB->BSRR |= 1 << PIN; // Set PIN
            while( ( (GPIOB->ODR) & ( 1 << PIN) )  != ( 1 << PIN ) ); // wait set PIN = 1
        }
        if(PORT == PORTC){
            GPIOC->BSRR |= 1 << PIN; // Set PIN
            while( ( (GPIOC->ODR) & ( 1 << PIN) )  != ( 1 << PIN ) ); // wait set PIN = 1
        }
        if(PORT == PORTD){
            GPIOD->BSRR |= 1 << PIN; // Set PIN
            while( ( (GPIOD->ODR) & ( 1 << PIN) )  != ( 1 << PIN ) ); // wait set PIN = 1
        }
        if(PORT == PORTE){
            GPIOE->BSRR |= 1 << PIN; // Set PIN
            while( ( (GPIOE->ODR) & ( 1 << PIN) )  != ( 1 << PIN ) ); // wait set PIN = 1
        }
    };
    
    
    
    
    /************ Functions Reset PIN ************/
    void Reset_PINA(char PIN){
        GPIOA->BRR |= 1 << PIN;
        while( ( ( GPIOA->ODR) & ( 1 << PIN) ) == ( 1 << PIN ) );
    };
    
    
    void Reset_PINB(char PIN){
        GPIOB->BRR |= 1 << PIN;
        while( ( ( GPIOB->ODR) & ( 1 << PIN) ) == ( 1 << PIN ) );
    };
    
    
    void Reset_PINC(char PIN){
        GPIOC->BRR |= 1 << PIN;
        while( ( ( GPIOC->ODR) & ( 1 << PIN) ) == ( 1 << PIN ) );
    };
    
    
    void Reset_PIND(char PIN){
        GPIOD->BRR |= 1 << PIN;
        while( ( ( GPIOD->ODR) & ( 1 << PIN) ) == ( 1 << PIN ) );
    };
    
    
    void Reset_PINE(char PIN){
        GPIOE->BRR |= 1 << PIN;
        while( ( (GPIOE->ODR) & ( 1 << PIN) ) == ( 1 << PIN ) );
    };
    
    
    void Reset_PIN(char PORT,char PIN){
        if(PORT == PORTA){
            GPIOA->BRR |= 1 << PIN; // set pin
            while( ( (GPIOA->ODR) & ( 1 << PIN) ) == ( 1 << PIN ) ); // wait set pin
        }
        
        else if(PORT == PORTB){
            GPIOB->BRR |= 1 << PIN; // set pin
            while( ( (GPIOB->ODR) & ( 1 << PIN) ) == ( 1 << PIN ) ); // wait set pin
        }
        
        else if(PORT == PORTC){
            GPIOC->BRR |= 1 << PIN; // set pin
            while( ( (GPIOC->ODR) & ( 1 << PIN) ) == ( 1 << PIN ) ); // wait set pin
        }
        
        else if(PORT == PORTD){
            GPIOD->BRR |= 1 << PIN; // set pin
            while( ( (GPIOD->ODR) & ( 1 << PIN) ) == ( 1 << PIN ) ); // wait set pin
        }
        
        else if(PORT == PORTE){
            GPIOE->BRR |= 1 << PIN; // set pin
            while( ( (GPIOE->ODR) & ( 1 << PIN) ) == ( 1 << PIN ) ); // wait set pin
        }
        
    };
    ویرایش توسط malmal2694 : 2017/01/07 در ساعت 11:37
  4. #4
    2008/09/12
    Isfahan
    1,040
    235

    پاسخ : مشکل با lcd کاراکتری

    نقل قول نوشته اصلی توسط malmal2694

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    کار با lcd کاراکتری
    ببخشید با تاخیر جواب میدم

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    Reveng will surely come... Your hard time are ahead
    // - - - - - - - - - -
    برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
    // - - - - - - - - - -
    اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
    // - - - - - - - - - -
  5. #5
    2015/06/06
    44
    19

    پاسخ : مشکل با lcd کاراکتری

    نقل قول نوشته اصلی توسط سعید خیری

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ببخشید با تاخیر جواب میدم

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ممنون بابت کتابخونه
  6. #6
    2011/08/12
    15
    15

    پاسخ : مشکل با lcd کاراکتری

    نقل قول نوشته اصلی توسط سعید خیری

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ببخشید با تاخیر جواب میدم

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام
    تو این کتابخونه global.h فراخوانی شده که من ندارم
    اگه امکانش هست اون رو هم بذارید چون تو کیل با خطا مواجه شدم
    ممنون از پاسخ
  7. #7
    2017/04/30
    1
    1

    پاسخ : مشکل با lcd کاراکتری

    من هم همچین کدی رو میریزم روی میکرو(دیسکاوری f429) منتهی چیزی نشون نمیده،حالا مشکل از lcd میتونه باشه یا کد؟

    #ifndef _LCD_H
    #define _LCD_H

    #include "stm32f4xx_hal.h"

    #define T 1

    #define D0_PIN_NUMBER 7

    #define DATA_PORT GPIOE

    #define CTRL_PORT GPIOA

    #define RS_PIN_NUMBER 1
    #define RW_PIN_NUMBER 2
    #define E_PIN_NUMBER 3


    void lcd_init(void);
    void lcd_clear(void);
    void lcd_gotoxy(unsigned char x, unsigned char y);
    void lcd_puts(char *str);

    #endif



    #include "lcd.h"

    void send_command(unsigned char data)
    {
    HAL_Delay(T);
    HAL_GPIO_WritePin(CTRL_PORT,(1<<RS_PIN_NUMBER),GPIO_PIN_RESET);
    HAL_GPIO_WritePin(CTRL_PORT,(1<<RW_PIN_NUMBER),GPIO_PIN_RESET);
    HAL_GPIO_WritePin(DATA_PORT,(0xFF<<D0_PIN_NUMBER),GPIO_PIN_RESET);
    HAL_GPIO_WritePin(DATA_PORT,(data<<D0_PIN_NUMBER),GPIO_PIN_SET);
    HAL_GPIO_WritePin(CTRL_PORT,(1<<E_PIN_NUMBER),GPIO_PIN_SET);
    HAL_GPIO_WritePin(CTRL_PORT,(1<<E_PIN_NUMBER),GPIO_PIN_RESET);
    }

    void lcd_putchar(unsigned char data)
    {
    HAL_Delay(T);
    HAL_GPIO_WritePin(CTRL_PORT,(1<<RS_PIN_NUMBER),GPIO_PIN_SET);
    HAL_GPIO_WritePin(CTRL_PORT,(1<<RW_PIN_NUMBER),GPIO_PIN_RESET);
    HAL_GPIO_WritePin(DATA_PORT,(0xFF<<D0_PIN_NUMBER),GPIO_PIN_RESET);
    HAL_GPIO_WritePin(DATA_PORT,(data<<D0_PIN_NUMBER),GPIO_PIN_SET);
    HAL_GPIO_WritePin(CTRL_PORT,(1<<E_PIN_NUMBER),GPIO_PIN_SET);
    HAL_GPIO_WritePin(CTRL_PORT,(1<<E_PIN_NUMBER),GPIO_PIN_RESET);
    }

    void lcd_init(void)
    {
    HAL_Delay(T);
    send_command(0x38);
    send_command(0x06);
    send_command(0x0c);
    }

    void lcd_puts(char *str)
    {
    HAL_Delay(T);
    while(*str != 0)
    {
    lcd_putchar(*str);
    str++;
    }
    }

    void lcd_gotoxy(unsigned char x, unsigned char y)
    {
    HAL_Delay(T);

    switch(y){
    case 0:
    send_command( 0x80 + x );
    break;
    case 1:
    send_command( 0xC0 + x );
    break;
    case 2:
    send_command( 0x94 + x );
    break;
    case 3:
    send_command( 0xD4 + x );
    }
    }

    void lcd_clear(void)
    {
    HAL_Delay(T);
    send_command(0x01);
    send_command(0x02);
    }
  8. #8
    2008/09/12
    Isfahan
    1,040
    235

    پاسخ : مشکل با lcd کاراکتری

    نقل قول نوشته اصلی توسط jeremy

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    مشکل از lcd میتونه باشه یا کد؟
    احتمالا مشکل از کد هست ،

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    Reveng will surely come... Your hard time are ahead
    // - - - - - - - - - -
    برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
    // - - - - - - - - - -
    اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
    // - - - - - - - - - -
  9. #9
    2014/01/25
    شهرکرد
    247
    267

    پاسخ : مشکل با lcd کاراکتری

    نقل قول نوشته اصلی توسط jeremy

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    من هم همچین کدی رو میریزم روی میکرو(دیسکاوری f429) منتهی چیزی نشون نمیده،حالا مشکل از lcd میتونه باشه یا کد؟
    پس کو تاخیرهای بعد از دستورات ؟؟؟ سرعت پاسخ دهی این نمایشگر خیلی پایینه، لزومی هم نداره سرعتش بالا باش ، یجور مزیتم به حساب میاد، شما باید یه تاخیر که در دیتاشیت ذکر شده برای خونده شدن دیتا 4 پین توسط کنترلر نمایشگر بذارین، حتی AVR هم این تاخیرها نیازه دیگه F429 جای خود داره.
    ویرایش توسط محمد پورخلیلی : 2017/05/18 در ساعت 08:58
  10. #10
    2017/02/02
    6
    0

    پاسخ : مشکل با lcd کاراکتری

    اگه به دیتا شیت ال سی دی نگاه کنی حداقل 3 تایم 0x38 رو سند میکنی تا تازه بری واسه بقیه داتا هاش تعداد سند کامندهاتون کمه که

    کد:
    
    
    
    #define RS_ENable HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_SET); #define RS_DISable HAL_GPIO_WritePin(GPIOA,RS_Pin,GPIO_PIN_RESET); #define RW_ENable HAL_GPIO_WritePin(GPIOB,RW_Pin,GPIO_PIN_SET); #define RW_DISable HAL_GPIO_WritePin(GPIOB,RW_Pin,GPIO_PIN_RESET); #define EN_ENable HAL_GPIO_WritePin(GPIOB,EN_Pin,GPIO_PIN_SET); #define EN_DISable HAL_GPIO_WritePin(GPIOB,EN_Pin,GPIO_PIN_RESET); #define DATA_SHIFT 0x06 #define DATA_LINE GPIOB #define LCD_8Bit_Function 0x38 #define LCD_home 0x02 #define LCD_Clear 0x01 #define LCD_EnteryMode 0x07 #define LCD_ON 0x0f #define LCD_OFF 0x08 #define LCD_Cursor_Right 0x14 #define LCD_Cursor_Left 0x10 #define LCD_CGRAM 0x40 #define LCD_DRAM 0x80 #define LCD_Line2 0x40 void Init_Lcd (void); void Init_Lcd (void) { HAL_Delay(500); unsigned int temp=0; temp=(LCD_8Bit_Function<<DATA_SHIFT); DATA_LINE->ODR=temp; EN_ENable; HAL_Delay(1); EN_DISable; HAL_Delay(4); EN_ENable; HAL_Delay(1); EN_DISable; HAL_Delay(1); EN_ENable; HAL_Delay(1); EN_DISable; HAL_Delay(1); EN_ENable; HAL_Delay(1); EN_DISable; HAL_Delay(1); // Last Used Function SET 8BIT temp=0; temp=(LCD_OFF<<DATA_SHIFT); DATA_LINE->ODR=temp; EN_ENable; HAL_Delay(1); EN_DISable; HAL_Delay(1); temp=0; temp=(LCD_Clear<<DATA_SHIFT); DATA_LINE->ODR=temp; EN_ENable; HAL_Delay(1); EN_DISable; HAL_Delay(1); temp=0; temp=(LCD_EnteryMode<<DATA_SHIFT); DATA_LINE->ODR=temp; EN_ENable; HAL_Delay(1); EN_DISable; HAL_Delay(1); temp=0; temp=(LCD_ON<<DATA_SHIFT); DATA_LINE->ODR=temp; EN_ENable; HAL_Delay(1); EN_DISable; HAL_Delay(1);
    }
    ویرایش توسط samieinia : 2017/07/29 در ساعت 14:28
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 12

موضوعات مشابه

  1. مشکل با lcd کاراکتری 4*20
    توسط soa در انجمن STM
    پاسخ: 7
    آخرين نوشته: 2017/09/17, 14:48
  2. مشکل با lcd کاراکتری
    توسط sinaitg در انجمن XMEGA
    پاسخ: 4
    آخرين نوشته: 2015/06/23, 09:58
  3. مشکل با lcd کاراکتری
    توسط soa در انجمن سایر مطالب مرتبط با ميکرو ها و پروسسورها
    پاسخ: 0
    آخرين نوشته: 2014/12/21, 13:12
  4. حل مشکل lcd کاراکتری تا ابد
    توسط silentshot در انجمن ATMEL
    پاسخ: 6
    آخرين نوشته: 2014/08/09, 20:12
  5. مشکل با lcd کاراکتری 16*2
    توسط silicon0 در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2012/08/21, 18:23

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •