اطلاعیه

Collapse
No announcement yet.

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

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

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

    سلام من یک کتابخونه برای lcd کاراکتری توی keil نوشتم ولی ناقص کار می کنه lcd رو که clear میکنم فقط خط پایین خالی می شه و خط بالا همهی خونه هاش روشن و متن رو نشون نمیده و cursor رو فعال می کنم ولی اون هم فعال نمیشه باید چکار کنم
    اگه میشه کمکم کنید

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

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

    دیدگاه


      #3
      پاسخ : مشکل با 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 هست و خودم نوشتم

      کد:
      [FONT=Yekan]#include "GPIO.h"[/FONT]#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; ۱۲:۳۷ ۱۳۹۵/۱۰/۱۸.

      دیدگاه


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

        نوشته اصلی توسط malmal2694 نمایش پست ها
        کار با lcd کاراکتری
        ببخشید با تاخیر جواب میدم

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

        دیدگاه


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

          نوشته اصلی توسط سعید خیری نمایش پست ها
          ببخشید با تاخیر جواب میدم

          هدر فایل برای LCD Char با STM32F10x
          ممنون بابت کتابخونه

          دیدگاه


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

            نوشته اصلی توسط سعید خیری نمایش پست ها
            ببخشید با تاخیر جواب میدم

            هدر فایل برای LCD Char با STM32F10x
            سلام
            تو این کتابخونه global.h فراخوانی شده که من ندارم
            اگه امکانش هست اون رو هم بذارید چون تو کیل با خطا مواجه شدم
            ممنون از پاسخ

            دیدگاه


              #7
              پاسخ : مشکل با 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
                پاسخ : مشکل با lcd کاراکتری

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

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

                دیدگاه


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

                  نوشته اصلی توسط jeremy نمایش پست ها
                  من هم همچین کدی رو میریزم روی میکرو(دیسکاوری f429) منتهی چیزی نشون نمیده،حالا مشکل از lcd میتونه باشه یا کد؟
                  پس کو تاخیرهای بعد از دستورات ؟؟؟ سرعت پاسخ دهی این نمایشگر خیلی پایینه، لزومی هم نداره سرعتش بالا باش ، یجور مزیتم به حساب میاد، شما باید یه تاخیر که در دیتاشیت ذکر شده برای خونده شدن دیتا 4 پین توسط کنترلر نمایشگر بذارین، حتی AVR هم این تاخیرها نیازه دیگه F429 جای خود داره.
                  جدیدترین ویرایش توسط محمد پورخلیلی; ۰۹:۵۸ ۱۳۹۶/۰۲/۲۸.

                  دیدگاه


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

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

                    کد:
                    
                    
                    [LEFT]#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);
                        
                    [/LEFT]
                    }
                    جدیدترین ویرایش توسط samieinia; ۱۵:۲۸ ۱۳۹۶/۰۵/۰۷.

                    دیدگاه


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

                      من هم همین مشکل رو دارم
                      این کد تو کتاب نجفی هست و میخوام پایه های درایور کردن ال سی دی رو تغییر بدم

                      دیدگاه


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

                        مشکل از ال سی دی 5 ولتیت نیست . یک چکیش کن . دومن از روی داتا شیت یک لایبری بنویس که به خود دیوایست بخوره . روی تایم فاصله ها هم از HAL_Delay استفاده کن . من با 8 پین بدون مشکل با 3.3 ولتی lcd تکست هم دارم ولی روی همین مدل با 4 پین مشکل دارم . مخصوصا روی کیل با شیفت داتا به چپ و راست به باگ خوردم که روی متغییر ها درست انجام نمی شه و دیباگر هم داتا رو رصد نمی کنه

                        دیدگاه

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