صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از 1 به 10 از 27
Like Tree17 لایک

موضوع: ماژول سون سگمنت 4 رقمی همراه با درایور 74hc59

Hybrid View

  1. #1
    Junior Member
    تاریخ عضویت
    Nov 2014
    نوشته ها
    2

    Post ماژول سون سگمنت 4 رقمی همراه با درایور 74hc59

    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: IMG_20140712_182909-500x500.jpg
مشاهده: 198
حجم: 41.9 کیلو بایت


    خیلی وقت بود که دنبال کدی برای این ماژول می گشتم، که خوشبختانه دیروز پیدا کردم
    این ماژول در فروشگاه هم موجود هست.

    اینم کد این ماژول:

    کد:
    /*
     written by Jason Berger ,arduinoall, พ.ไพศาล
     reedited by Phaisarn Te. @060614
     
     8-Digit 7-Segment display driver.
     2x 74HC595 wired to 2x 4-digit 7-segment displays
     bits 0-7 select a digit
     bits 8-14 A-G
     
     */
    char disp_c[8] ;
    
    //กำหนด ขา pin
    const int SCLK_pin=4;
    const int RCLK_pin=5;
    const int DIO_pin =6;
    
    
    // 0-9   --> ใช้ค่า 0-9
    // 0.-9. --> ใช้ค่า 10-19
    // space --> ' '
    // A-Z, a-z --> 'A' 'B' ... 'a' 'b'
    
    int  disp[8];
    
    //time values for delay workaround
    unsigned long prev =0;
    unsigned long waitMS=0;
    
    void setup()
    {
    
      pinMode(RCLK_pin,OUTPUT);
      pinMode(DIO_pin,OUTPUT);
      pinMode(SCLK_pin,OUTPUT);
      showText('O','P','E','N'); // แสดงข้อความต้อนรับ
    }  
    
    int n;
    unsigned long start=millis();
    byte b = 0;
    void loop()
    {
      showDisplay();
      if(b==0){
        b++;
        wait(3000);     // หน่วงเวลาแสดงข้อความต้อนรับ
      }
      else{
        if ( millis() > (prev + waitMS))
        {
          //code to loop in here
    
    
          //ระหว่าง loop แก้ไขแสดงค่าอื่นๆได้
    
          // แสดงผลแบบตัวอักษร ตัวอย่างแสดงคำว่า Ardu
         // showText('A','r','d','u'); //  แก้ค่าที่จะให้แสดงผลตรงนี้
    
    
          // แสดงผลแบบตัวเลข ตัวอย่างแสดงค่า 95.42
          // showText(9,15,4,2); //15 --> แสดงเลข 5.
    
    
           // แสดงผลตัวอย่าง การ run เลข
          showText((n/1000)%10,(n/100)%10+10,(n/10)%10,n%10);  //แก้ค่าที่จะให้แสดงผลตรงนี้
          n++;
          if(n>10000) {
            n=0;
          }
          
          // หน่วงเวลา
          wait(1000);
        }
      }
    }
    
    void showText(char a, char b , char c,char d){
      disp_c[0] = d;
      disp_c[1] = c;
      disp_c[2] = b;
      disp_c[3] = a;
    }
    void showDisplay()
    {
      setDisp();
      for(int i=0; i<8; i++)
      {
        setDigit(i,disp[i]);
      }
    }
    
    void setDigit(int dig, int character)
    {
      int digits[]= {
        128,64,32,16,8,4,2,1        };
    
      //character set (0-9)0-9
      //            (10-19)0.-9.
      //            (20-45)A-Z
      //            (46-71)a-z
      //            (72)- (73) space
      int characters[]= {
        3,159,37,13,153,73,65,31,1,9,
        2,158,36,12,152,72,64,30,0,8,
        17,1,99,3,97,113,67,145,243,135,145,227,85,19,3,49,25,115,73,31,129,129,169,145,137,37,
        5,193,229,133,33,113,9,209,247,143,81,227,85,213,197,49,25,245,73,225,199,199,169,145,137,37,
        253,255        };
    
      digitalWrite(RCLK_pin, LOW);
      shiftOut(DIO_pin, SCLK_pin, LSBFIRST, characters[character]);
      shiftOut(DIO_pin, SCLK_pin, LSBFIRST, digits[dig]);
      digitalWrite(RCLK_pin, HIGH);
    }
    
    void setDisp()
    {
      for (int i=0; i<8;i++)
      {
        int val = disp_c[i];
        if((val >= 32)&&(val <= 47)){ // ! ถึง / ไม่ให้แสดง
          switch (val){
          case 45 :
            val = 72;
            break;  // เครื่องหมาย -
          default :
            val = 73;
            break;  // ค่าอื่นระหว่างนี้ ไม่ให้แสดง
          }
        }
        else if((val >= 48)&&(val <= 57)) //0-9
        {
          val -= 48;
        }
        else if((val >= 65)&&(val <= 90)) //A-Z
        {
          val -= 45;
        }
        else if((val >= 97)&&(val <= 122)) //a-z
        {
          val -= 51;
        }
    
        disp[i] = val;
    
      }
    }   
    void wait( unsigned long milsec)
    {
      prev = millis();
      waitMS = milsec;
    }
    موفق باشید
    ویرایش توسط kia1234 : 11-29-2014 در ساعت 09:39 AM

  2. #2
    Junior Member
    تاریخ عضویت
    Oct 2015
    نوشته ها
    24
    چون توضیحاتش تایلندیه من با ترجمش میذارم
    اولش OPEN نشون میده و شروع میکنه به شمارش
    ضمناً دنبال اسکرول متنش هستم به محض اینکه پیدا کنم کدشو اینجا میذارم
    ضمناً با 5 ولت کار میکنه
    کد:
    /* written by Jason Berger ,arduinoall, พ.ไพศาล reedited by Phaisarn Te. @060614 8-Digit 7-Segment display driver. 2x 74HC595 wired to 2x 4-digit 7-segment displays bits 0-7 select a digit bits 8-14 A-G */ char disp_c[8] ; //Pin assignments const int SCLK_pin=4; const int RCLK_pin=5; const int DIO_pin =6; // 0-9 --> use the 0-9 // 0.-9. --> use the 10-19 // space --> ' ' // A-Z, a-z --> 'A' 'B' ... 'a' 'b' int disp[8]; //time values for delay workaround unsigned long prev =0; unsigned long waitMS=0; void setup() { pinMode(RCLK_pin,OUTPUT); pinMode(DIO_pin,OUTPUT); pinMode(SCLK_pin,OUTPUT); showText('O','P','E','N'); // Show welcome message } int n; unsigned long start=millis(); byte b = 0; void loop() { showDisplay(); if(b==0){ b++; wait(3000); // Delay display a welcome message } else{ if ( millis() > (prev + waitMS)) { //code to loop in here //between loop Other fixed costs // Display font displays. Ardu // showText('A','r','d','u'); // The solution to this display. // number Example display 95.42 // showText(9,15,4,2); //15 --> Show No. 5. // Showing examples run เลข showText((n/1000)%10,(n/100)%10+10,(n/10)%10,n%10); //solution to this display. n++; if(n>10000) { n=0; } // delay wait(1000); } } } void showText(char a, char b , char c,char d){ disp_c[0] = d; disp_c[1] = c; disp_c[2] = b; disp_c[3] = a; } void showDisplay() { setDisp(); for(int i=0; i<8; i++) { setDigit(i,disp[i]); } } void setDigit(int dig, int character) { int digits[]= { 128,64,32,16,8,4,2,1 }; //character set (0-9)0-9 // (10-19)0.-9. // (20-45)A-Z // (46-71)a-z // (72)- (73) space int characters[]= { 3,159,37,13,153,73,65,31,1,9, 2,158,36,12,152,72,64,30,0,8, 17,1,99,3,97,113,67,145,243,135,145,227,85,19,3,49,25,115,73,31,129,129,169,145,137,37, 5,193,229,133,33,113,9,209,247,143,81,227,85,213,197,49,25,245,73,225,199,199,169,145,137,37, 253,255 }; digitalWrite(RCLK_pin, LOW); shiftOut(DIO_pin, SCLK_pin, LSBFIRST, characters[character]); shiftOut(DIO_pin, SCLK_pin, LSBFIRST, digits[dig]); digitalWrite(RCLK_pin, HIGH); } void setDisp() { for (int i=0; i<8;i++) { int val = disp_c[i]; if((val >= 32)&&(val <= 47)){ // To / not to show switch (val){ case 45 : val = 72; break; //mark - default : val = 73; break; //The other between this show. } } else if((val >= 48)&&(val <= 57)) //0-9 { val -= 48; } else if((val >= 65)&&(val <= 90)) //A-Z { val -= 45; } else if((val >= 97)&&(val <= 122)) //a-z { val -= 51; } disp[i] = val; } } void wait( unsigned long milsec) { prev = millis(); waitMS = milsec; }

  3. #3
    Junior Member
    تاریخ عضویت
    Jan 2016
    نوشته ها
    4
    نقل قول نوشته اصلی توسط dm800vpr نمایش پست ها
    چون توضیحاتش تایلندیه من با ترجمش میذارم
    اولش OPEN نشون میده و شروع میکنه به شمارش
    ضمناً دنبال اسکرول متنش هستم به محض اینکه پیدا کنم کدشو اینجا میذارم
    ضمناً با 5 ولت کار میکنه
    کد:
    /* written by Jason Berger ,arduinoall, พ.ไพศาล reedited by Phaisarn Te. @060614 8-Digit 7-Segment display driver. 2x 74HC595 wired to 2x 4-digit 7-segment displays bits 0-7 select a digit bits 8-14 A-G */ char disp_c[8] ; //Pin assignments const int SCLK_pin=4; const int RCLK_pin=5; const int DIO_pin =6; // 0-9 --> use the 0-9 // 0.-9. --> use the 10-19 // space --> ' ' // A-Z, a-z --> 'A' 'B' ... 'a' 'b' int disp[8]; //time values for delay workaround unsigned long prev =0; unsigned long waitMS=0; void setup() { pinMode(RCLK_pin,OUTPUT); pinMode(DIO_pin,OUTPUT); pinMode(SCLK_pin,OUTPUT); showText('O','P','E','N'); // Show welcome message } int n; unsigned long start=millis(); byte b = 0; void loop() { showDisplay(); if(b==0){ b++; wait(3000); // Delay display a welcome message } else{ if ( millis() > (prev + waitMS)) { //code to loop in here //between loop Other fixed costs // Display font displays. Ardu // showText('A','r','d','u'); // The solution to this display. // number Example display 95.42 // showText(9,15,4,2); //15 --> Show No. 5. // Showing examples run เลข showText((n/1000)%10,(n/100)%10+10,(n/10)%10,n%10); //solution to this display. n++; if(n>10000) { n=0; } // delay wait(1000); } } } void showText(char a, char b , char c,char d){ disp_c[0] = d; disp_c[1] = c; disp_c[2] = b; disp_c[3] = a; } void showDisplay() { setDisp(); for(int i=0; i<8; i++) { setDigit(i,disp[i]); } } void setDigit(int dig, int character) { int digits[]= { 128,64,32,16,8,4,2,1 }; //character set (0-9)0-9 // (10-19)0.-9. // (20-45)A-Z // (46-71)a-z // (72)- (73) space int characters[]= { 3,159,37,13,153,73,65,31,1,9, 2,158,36,12,152,72,64,30,0,8, 17,1,99,3,97,113,67,145,243,135,145,227,85,19,3,49,25,115,73,31,129,129,169,145,137,37, 5,193,229,133,33,113,9,209,247,143,81,227,85,213,197,49,25,245,73,225,199,199,169,145,137,37, 253,255 }; digitalWrite(RCLK_pin, LOW); shiftOut(DIO_pin, SCLK_pin, LSBFIRST, characters[character]); shiftOut(DIO_pin, SCLK_pin, LSBFIRST, digits[dig]); digitalWrite(RCLK_pin, HIGH); } void setDisp() { for (int i=0; i<8;i++) { int val = disp_c[i]; if((val >= 32)&&(val <= 47)){ // To / not to show switch (val){ case 45 : val = 72; break; //mark - default : val = 73; break; //The other between this show. } } else if((val >= 48)&&(val <= 57)) //0-9 { val -= 48; } else if((val >= 65)&&(val <= 90)) //A-Z { val -= 45; } else if((val >= 97)&&(val <= 122)) //a-z { val -= 51; } disp[i] = val; } } void wait( unsigned long milsec) { prev = millis(); waitMS = milsec; }
    اگه من بخواهم یک متغیر رو روی سون سگمنت نشون بدم کجای این کد باید متغیر رو وارد کنم؟

  4. #4
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط ali.k نمایش پست ها
    اگه من بخواهم یک متغیر رو روی سون سگمنت نشون بدم کجای این کد باید متغیر رو وارد کنم؟

    میتونی از این کد استفاده کنی سر راست تره:
    فایل های پیوست شده فایل های پیوست شده
    لایک کردن

  5. #5
    Junior Member
    تاریخ عضویت
    Jan 2016
    نوشته ها
    4
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    میتونی از این کد استفاده کنی سر راست تره:
    خب کجاش اون عددی که میخواهم نمایش بدم رو بزنم

  6. #6
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط ali.k نمایش پست ها
    خب کجاش اون عددی که میخواهم نمایش بدم رو بزنم

    با دستور setDigit هر سگمنت رو مقدار میده
    میتونی داده اولیت رو بشکونی و سگمنت به سگمنت داده بدی
    لایک کردن

  7. #7
    Junior Member
    تاریخ عضویت
    Jul 2016
    نوشته ها
    15
    سلام
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    میتونی از این کد استفاده کنی سر راست تره:
    اولین سوالم اینه که موارد زیر باید به کدوم پین ها وصل شن؟
    SCLK_pin

    RCLK_pin

    DIO_pin
    -------------------------------------

  8. #8
    Junior Member
    تاریخ عضویت
    Jul 2016
    نوشته ها
    15
    نقل قول نوشته اصلی توسط مهیار نمایش پست ها
    سلام


    اولین سوالم اینه که موارد زیر باید به کدوم پین ها وصل شن؟
    SCLK_pin

    RCLK_pin

    DIO_pin
    -------------------------------------
    بعدشم اینکه من چطوری مقدار متغیر"sensor"رو توی7سگمنت نشون بدم

  9. #9
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط مهیار نمایش پست ها
    سلام


    اولین سوالم اینه که موارد زیر باید به کدوم پین ها وصل شن؟
    SCLK_pin

    RCLK_pin

    DIO_pin
    -------------------------------------

    فکر می کنم شما هدر کد رو مطالعه نکردید!
    کد:
    int latchpin = 5; 
    int clockpin = 7;
    int datapin = 6;
    float b = 0;
    int c = 0;
    float d = 0;
    int e = 0;
    int speed = 300; // used to control speed of counting
    int segdisp[10] = {3,159,37,13,153,73,65,27,1,9 };
    int digits[]= {128,64,32,16,8,4,2,1};
    void setup()
    {
      pinMode(latchpin, OUTPUT);
      pinMode(clockpin, OUTPUT);
      pinMode(datapin, OUTPUT);
      digitalWrite(latchpin, LOW);
      shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the right display
      shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the left display
      digitalWrite(latchpin, HIGH);
    
    
    }
    void loop()
    {
      setDigit(3,1);
    //  setDigit(1,5);
    //  setDigit(2,0);
      delay(10);
    }
    void setDigit(int dig, int character)
    {
    				   
    	digitalWrite(latchpin, LOW);
            shiftOut(datapin, clockpin, LSBFIRST, segdisp[character]);
            shiftOut(datapin, clockpin, LSBFIRST, digits[dig]);
    	digitalWrite(latchpin, HIGH);
            digitalWrite(latchpin, LOW);
            shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the right display
            shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the left display
            digitalWrite(latchpin, HIGH);
    }
    void shoop()
    {
      //  Count up
      for (int z=0; z<100; z++)
      {
        digitalWrite(latchpin, LOW);
        shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the right display
        shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the left display
        digitalWrite(latchpin, HIGH);
        if (z<10)
        {
          digitalWrite(latchpin, LOW);
          shiftOut(datapin, clockpin, LSBFIRST, segdisp[z]); // sends the digit down the serial path
          shiftOut(datapin, clockpin, LSBFIRST, 255); // sends a blank down the serial path to push the digit to the right
          digitalWrite(latchpin, HIGH);
        }
        else if (z>=10)
        {
          d=z%10; // find the remainder of dividing z by 10, this will be the right-hand digit
          c=int(d); // make it an integer, c is the right hand digit
          b=z/10; // divide z by 10 - the whole number value will be the left-hand digit
          e = int(b); // e is the left hand digit
          digitalWrite(latchpin, LOW); // send the digits down to the shift registers!
          shiftOut(datapin, clockpin, LSBFIRST, segdisp[c]); 
          shiftOut(datapin, clockpin, LSBFIRST, segdisp[e]); 
          digitalWrite(latchpin, HIGH);
        }
        delay(speed);
      }
      delay(2000);
      //  Count down
      for (int z=99; z>=0; z--)
      {
        digitalWrite(latchpin, LOW);
        shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the right display
        shiftOut(datapin, clockpin, LSBFIRST, 0); // clears the left display
        digitalWrite(latchpin, HIGH);
        if (z<10)
        {
          digitalWrite(latchpin, LOW);
          shiftOut(datapin, clockpin, LSBFIRST, segdisp[z]); // sends the digit down the serial path
          shiftOut(datapin, clockpin, LSBFIRST, 255); // sends a blank down the serial path to push the digit to the right
          digitalWrite(latchpin, HIGH);
        }
        else if (z>=10)
        {
          d=z%10; // find the remainder of dividing z by 10, this will be the right-hand digit
          c=int(d); // make it an integer, c is the right hand digit
          b=z/10; // divide z by 10 - the whole number value will be the left-hand digit
          e = int(b); // e is the left hand digit
          digitalWrite(latchpin, LOW); // send the digits down to the shift registers!
          shiftOut(datapin, clockpin, LSBFIRST, segdisp[c]); 
          shiftOut(datapin, clockpin, LSBFIRST, segdisp[e]); 
          digitalWrite(latchpin, HIGH);
        }
        delay(speed);
      }
    
    
      delay(2000);
    }
    لایک کردن

  10. #10
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    از این لینک هم میتونی کمک بگیری
    https://brainy-bits.com/tutorials/4-...-with-arduino/
    لایک کردن

صفحه 1 از 2 12 آخرینآخرین

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

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

SEO by vBSEO