اطلاعیه

Collapse
No announcement yet.

شیفت رجیستر 595

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

    شیفت رجیستر 595

    با سلام و وقت بخیر

    برای استفاده از شیفت رجیستر 595 ما توی بسکام میخواستیم یه عدد سه رقمی رو روی 3 تا سگمنتهای تک رقمی شبیه تصویر ضمیمه شده نشان دهیم از دستورات زیر استفاده میکردیم :

    Shiftout Ds , Sh_cp , Yekan , 1
    Shiftout Ds , Sh_cp , Dahgan , 1
    Shiftout Ds , Sh_cp , Sadgan , 1

    Reset St_cp
    Set St_cp
    Reset St_cp

    توی آردوینو به چه شکلی باید بنویسیم ؟ راههای زیادی رو از سایت های مختلف امتحان کردم ولی چرا نمیشه ؟؟؟؟
    فقط برای تک رقمی مشکلی ندارم و جواب میده !!

    ممنون میشم اگه کسی میدونه از ما هم دریغ نکنه
    قال امام صادق (ع):
    هر چیزی زکاتی دارد و زکات علم آنست که به اهلش بیاموزی.

    #2
    پاسخ : شیفت رجیستر 595

    من یک ساعت با RTC و سگمنت 4 دیجیت آند مشترک ساعتی با 2 عدد شیفت رجیستر این کد زیر رو نوشتم و اجرا شد.
    برای سگمنت ها یک شیفت رجیستر و برای آند مشترک سگمنت ها یک شیفت رجیستر جدا گذاشتم.
    در شیفت رجیستر اول که 8 خروجی داریم. خروجی ها رو برای 7 سگمنت و نقطه اعشار کناراعداد استفاده کردم.
    در شیفت رجیستر دوم از 8 خروجی تعداد 5 عدد را برای اعداد 1-4 و دونقطه ساعت استفاده کردم.
    عملا میشه با 2 عدد شیفت رجیستر و ارتباط 3 سیمه سون سگمنت 8 رقمی راه اندازی کرد.


    //**************************************************************//
    // Name : shiftOutCode, 4-Digit 7Segment //
    // Author : AbdolHakim Esmaeili, Iran, AqQaleh //
    // Date : 05 Mar, 2020 //
    // Version : 1.0 //
    // Notes : Code for using two 74HC595 Shift Register //
    // : to show clock using only 3 wire //
    //****************************************************************
    //RTC-DS1307 Wiring
    //SCL to A5 Arduino Pro Mini Or Uno
    //SDA to A4 Arduino Pro Mini Or Uno
    //GND to GND
    //VCC to VCC


    #include <RTClib.h>
    RTC_DS1307 rtc;


    //Pin connected to ST_CP of 74HC595
    int latchPin = 6;
    //Pin connected to SH_CP of 74HC595
    int clockPin = 7;
    ////Pin connected to DS of 74HC595
    int dataPin = 5;


    //Common Anode
    const byte Num[13]={0b00000011,0b10011111,0b00100101,0b00001101,0b10011001,0b01001001,0b01000001,0b00011111,0b00000001,0b00001001,0b11111110,0b00111111,0b11011111};//0,1,2,3,4,5,6,7,8,9,Dot,:,Degree
    const byte Pos[5]={0b00001000,0b00010000,0b00100000,0b01000000,0b10000000};//L,Dig1,Dig2,Dig3,Dig4
    unsigned long startMillis;
    unsigned long currentMillis;
    int HH;
    int MM;
    unsigned int Dly1 = 4;
    unsigned int Dly2 = 1;




    void setup() {

    if (! rtc.begin())
    {
    while (1);
    }
    //set pins to output because they are addressed in the main loop
    pinMode(latchPin, OUTPUT);
    pinMode(clockPin, OUTPUT);
    pinMode(dataPin, OUTPUT);
    startMillis = millis(); //initial start time
    }




    void loop() {


    DateTime now = rtc.now();
    HH=now.hour();
    MM=now.minute();
    TimeShow(HH,MM);

    }




    void Segment(int number,int digit){
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, Num[number]);
    shiftOut(dataPin, clockPin, LSBFIRST, Pos[digit]);
    digitalWrite(latchPin, HIGH);
    }

    void DoubleDot(){
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, Num[11]);
    shiftOut(dataPin, clockPin, LSBFIRST, Pos[0]);
    digitalWrite(latchPin, HIGH);
    delay(1);
    }


    void TimeShow(int hh,int mm){
    currentMillis = millis(); //get the current "time" (actually the number of milliseconds since the program started)
    int dig4=hh/10;
    int dig3=hh%10;
    int dig2=mm/10;
    int dig1=mm%10;


    if (currentMillis - startMillis <= 500) //test whether the period has elapsed
    {
    Segment(dig4,4);
    delay(Dly1);
    Segment(dig3,3);
    delay(Dly1);
    Segment(dig2,2);
    delay(Dly1);
    Segment(dig1,1);
    delay(Dly1);
    DoubleDot();
    }
    else
    {
    Segment(dig4,4);
    delay(Dly2);
    Segment(dig3,3);
    delay(Dly2);
    Segment(dig2,2);
    delay(Dly2);
    Segment(dig1,1);
    }

    if (currentMillis - startMillis >= 1000)
    {
    startMillis = currentMillis; //IMPORTANT to save the start time of the current state
    }
    [FONT=Yekan]}[/FONT]
    AGHYOOL

    دیدگاه


      #3
      پاسخ : شیفت رجیستر 595

      سلام
      ممنون از لطف و پاسخگویی شما
      البته منظور من خود دستور شیفت بود که آخرش مشکل حل شد و مشکل سخت افزاری بود!
      بازم بینهایت سپاسگزارم
      قال امام صادق (ع):
      هر چیزی زکاتی دارد و زکات علم آنست که به اهلش بیاموزی.

      دیدگاه

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