7세그 디코더 IC용으로 10진→2진 변환한다.

죄송합니다 tueks입니다.
이번에 7세그먼트 LED를 빛내기 위해서 7세그먼트 같이 디코드 IC를 입수했습니다.
이것은 4자리의 2진수에 의해 0~9까지의 숫자를 7세그먼트로 표시하기 위한 IC로, 좋아하는 숫자를 표시하기 위한 10진 2진 변환을 하기 위한 코드를 걸었으므로 비망록적 에 소개합니다.

Arduino Uno, Nano를 사용하여 7 세그 디코드 IC와 함께 사용하면 다음과 같이 7 세그먼트를 빛낼 수 있습니다.

여기까지 힘들었습니다 😇 피 c. 라고 r. 이 m / 3Y W9m MG — tueks (@tueks3) 10월 22, 2020


회로를 조립하지 않아도 직렬 모니터에서 10진수가 2진수로 변환되었는지 확인할 수 있습니다.



별로 똑똑하지 않다고 생각하지만 코드입니다.




DecToBin_7segmet

//10進数を2進数に変換します。
//ArduinoUno/Nanoで動きます。
//2進数によって7セグメントをスタティック点灯させるデコードICのために作成しました。
//2020.11.10 tueksによって作成されました。

void setup() {

  Serial.begin(9600);
}

/*10進数2進数変換*/
void ChangeBin(int Dec, int *Bin);

//https://monoist.atmarkit.co.jp/mn/articles/1408/07/news012.html


void loop()
{
  int deadtime = 500; /*mSec*/
  int Bin[4];//4桁2進数用の配列
  int i;
  int k = 0;

//0~9までの数字を順番に表示。
  for (int n = 0; n < 10; n++) {

    Serial.print(String(k)+" ");//シリアルモニタに10進の表示

    ChangeBin(k, Bin);//kで与えられる10進数を2進数にエンコード


 /*d2~4を出力ピンに設定、昇順に配列設定し、TC5068(7セグデコードIC)の入力ピンA~Dに対応*/
    for (i = 0; i < 4; i++) {
      //d2~d5に配列の値Bin[0]~Bin[3]を格納
      if (Bin[i] == 1) {
        digitalWrite(i + 2, HIGH); 
      } else {
        digitalWrite(i + 2, LOW);
      }
      Serial.print(",");
      Serial.print(Bin[i]);//シリアルモニタに2進数の表示
    } Serial.println();


    delay(deadtime);
    k = k + 1;


  }

}


//10進を4bitの2進数に変換し、配列に格納。
void ChangeBin(
  int Dec,  //input
  int *Bin  //roop()内で作成した配列のアドレスを受け取る。ポインタ渡し。
)
{
/*10進数が2進数に変換され、配列に格納。Bin[3]=0桁目,Bin[2]=1桁目,Bin[1]=2桁目,Bin[0}=3桁目*/
  int m = 3;
  for (int i = 0; i < 4; i++) {
    Bin[m] = Dec % 2;
    Dec = Dec / 2;
    m = m - 1;
  }

}



이하 잡음 코드의 해설입니다. 프로그래밍에는 정말 약하기 때문에 설명이 잘못되었을 수 있습니다. 뭔가 있으시면 지적해 주시면 좋겠습니다.



ChangeBin이라는 자작한 함수에 의해 10진수를 2진수로 변환합니다.

loop()내에서 k에 의해 주어진 10진수, Bin[]이라는 배열을 ChangeBin에 건네줍니다. 배열은 함수에 의해 직접 값을 재기록할 수 없기 때문에, 「포인터 전달」이라고 하는 작성한 배열 Bin[]의 주소를 건네줍니다.

ChangeBin 함수 내에서 10진수 이진 변환이 수행되고 이진수는 4자리 배열에 한 문자씩 저장됩니다.

loop()내에서 배열 Bin[0]~[3]의 값이 불려 가, digitalWrite에 의해 Arduino의 d0~d5를 2진수의 전압 출력으로 합니다.



2진수의 출력으로 직접 LED를 구동하면 이렇게 됩니다.

<script async=""src="https://platform.twitter.com/widgets.js"/>

이상입니다.

tueks


좋은 웹페이지 즐겨찾기