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

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

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

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

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

نام: IMG_20140712_182909-500x500.jpg
مشاهده: 179
حجم: 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
    تاریخ عضویت
    Jan 2016
    نوشته ها
    4
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    با دستور setDigit هر سگمنت رو مقدار میده
    میتونی داده اولیت رو بشکونی و سگمنت به سگمنت داده بدی
    ببخشید یه مشکل وجود داره
    void loop()
    {
    int h=0;

    if (digitalRead(2)==HIGH){h++;}


    setDigit(3,h);
    setDigit(1,5);
    setDigit(2,0);
    setDigit(0,6);

    }
    الان تو این کد من یه کلید ریستی به پین ۲ وصل کردم
    وقتی فشارش میدم بایذ رقم هزارگان سون سگمنت یک بشه و وقنی هم دستم رو از رپو کلید بر می
    دارم همچنان رقم باید یک بمونه چون من برنامه ندادم که اکه پین۲ صفر شد چکار نه ولی وقتی من ذستم رو از کلید ریستی برمیدارم رقم هزارگان دوباره صفر میشه

  8. #8
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط ali.k نمایش پست ها
    ببخشید یه مشکل وجود داره
    void loop()
    {
    int h=0;

    if (digitalRead(2)==HIGH){h++;}


    setDigit(3,h);
    setDigit(1,5);
    setDigit(2,0);
    setDigit(0,6);

    }
    الان تو این کد من یه کلید ریستی به پین ۲ وصل کردم
    وقتی فشارش میدم بایذ رقم هزارگان سون سگمنت یک بشه و وقنی هم دستم رو از رپو کلید بر می
    دارم همچنان رقم باید یک بمونه چون من برنامه ندادم که اکه پین۲ صفر شد چکار نه ولی وقتی من ذستم رو از کلید ریستی برمیدارم رقم هزارگان دوباره صفر میشه
    اوه نه
    کدت اشتباهه
    ببین اومدی نوشتی اگه پین دو های شد پرانتز باز برو h رو پلاس پلاس کن و پرانتز رو بستی
    یعنی اگه شرط ifاجرا شد فقط همون یه کار رو بکنه
    کد درست باید دستورات setDigit هم توش بیاد.
    یعنی مثلا این کشلی:
    کد:
    void loop()
    {
    int h=0;
    
    
    if (digitalRead(2)==HIGH){
    h++;
    setDigit(3,h);
    setDigit(1,5);
    setDigit(2,0);
    setDigit(0,6);
    }
    
    
    }
    البته امیدوارم منظورت رو درست فهمیده باشم
    لایک کردن

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

    RCLK_pin

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

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


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

    RCLK_pin

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

صفحه 1 از 3 123 آخرینآخرین

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

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

SEO by vBSEO