質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

747閲覧

四桁7セグLEDのプログラムの解説をお願いします

asahisann

総合スコア4

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2022/11/19 00:38

質問

elegooのarduino mega2560のスターターキットののチュートリアルで、
四桁7セグを光らせたのですが、プログラムがよくわかりません。
プログラムの解説をお願いしたいです

該当のソースコード

c?

1int latch=9; //74HC595 pin 9 STCP 2int clock=10; //74HC595 pin 10 SHCP 3int data=8; //74HC595 pin 8 DS 4 5unsigned char table[]= 6{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c 7,0x39,0x5e,0x79,0x71,0x00}; 8 9void setup() { 10 pinMode(latch,OUTPUT); 11 pinMode(clock,OUTPUT); 12 pinMode(data,OUTPUT); 13} 14void Display(unsigned char num) 15{ 16 17 digitalWrite(latch,LOW); 18 shiftOut(data,clock,MSBFIRST,table[num]); 19 digitalWrite(latch,HIGH); 20 21} 22void loop() { 23 Display(1); 24 delay(500); 25 Display(2); 26 delay(500); 27 Display(3); 28 delay(500); 29 Display(4); 30 delay(500); 31 Display(5); 32 delay(500); 33 Display(6); 34 delay(500); 35 Display(7); 36 delay(500); 37 Display(8); 38 delay(500); 39 Display(9); 40 delay(500); 41 Display(10); 42 delay(500); 43 Display(11); 44 delay(500); 45 Display(12); 46 delay(500); 47 Display(13); 48 delay(500); 49 Display(14); 50 delay(500); 51 Display(15); 52 delay(500); 53}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2022/11/19 02:34

どのへんが「よくわかりません」か? 「全くわかりません」とかいう話だとちょっと手当のしようが無いです。C/C++の入門書に目を通しているぐらいであって欲しいなぁ。
guest

回答1

0

ベストアンサー

何がわからないのかわからないので、ポイントだけ書いてみます。

74HC595は7ビットのシフトレジスタです。 シフトレジスタはデータを入れると、そのデータの2進数表現が7つの出力に表われます。

以下がその書き込み処理です。

c

1void Display(unsigned char num) 2{ 3 digitalWrite(latch,LOW); // 1) 4 shiftOut(data,clock,MSBFIRST,table[num]); // 2 5 digitalWrite(latch,HIGH); // 3 6}

データはSTCPの立ち上がりのタイミングでピンに出ますので、1 でLowにしておきます。
shiftOut関数は便利関数でシフトレジスタにデータを送ります。 送るデータほリスト table に入っています。
最後にSTCPをhightにして送ったデータピンに出力します。

このシフトレジスタは7ビットの出力を持っていて、「四桁7セグ」を光らせるということなので、その出力がぞれぞれ表示用の7つのセグメントにつながっているのでしょう。
対応した場所を 1 = High にすることで、7セグで数が表現できます。

さて、送られるデータ は、tableに入っています、「0x06,0x5b,0x4f」のようなデータが入っていますがこれはそれぞれインデックス「1, 2, 3」の場所にあるので、その数の時に使われる値です。
2進数にすると、
00000110
01011011
01001111
7セグの数字の表示をと比べてみると、1は2つのセグメントしか点いている、 2と3は2箇所 点く場所が違うのに対応して1 と 0 が入れかわっているのがわかると思います。

とりあえず、ここが肝心の部分です。

投稿2022/11/19 03:02

編集2022/11/19 03:37
TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asahisann

2022/11/20 00:33

おお!何となく理解しました。 毎度質問に答えてくださってありがとうございます。
asahisann

2022/11/20 00:48

すいませんもう少しわかりやすっく説明できませんかね? ごめんなさい。
TakaiY

2022/11/20 01:22 編集

どういうところがわかりませんか?
TakaiY

2022/11/20 02:01 編集

ちょっと探してみたら、いいのを見つけました。 https://xtech.nikkei.com/it/article/COLUMN/20120530/399499/ これ問題と解説ですが、7セグの点灯の仕組みの解説にもなっています。 出力ポートと書いてある部品がシフトレジスタです。 この問題では、「5」にあたる 「0x6d」を表示させています。 シフトレジスタの説明もみつけました。 比較的簡単に書いてあります。 真ん中あたりのタイミングチャートのところは難しければ今はわからなくてもOKです。 数値を入れると、その値の2進数表現に対応したピン(足・ポート)がON(Hight)になるところがポイントです。 https://ediy-fan.com/shift-register/ 次の記事に7セグの制御の話が出てきます。ちょうどいいかなと思ったのですが、Arduinoでないし言語もpythonなので、一部しか参考にならないかな。
asahisann

2022/11/29 11:41

よんでみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問