This is a sample program, "SevenSegmentLed" library this is. I re-create the sample program anew.

Dependencies:   SevenSegLed mbed

7セグメントLED出力Libraryのサンプルプログラムの説明

<概要>

8桁までの7セグメントLEDの表示制御を行うLibraryと、Libraryを使用したサンプルプログラムについて説明します。

Libraryとサンプルプログラムは次のアドレスからダウンロードできます。
Library:
http://mbed.org/users/suupen/code/SevenSegLed/

サンプルプログラム:
http://mbed.org/users/suupen/code/SevenSegmentLedSample/

サンプルプログラムの動作

<Libraryについて>

7セグメントLED(正確には“ドット”を含めて8セグメントになります)をダイナミック駆動します。
8桁までの表示に対応しています。LPC1768なら、最初の端子設定で、1~8桁のいずれかを選択できます。
(LPC1114FN28では、未使用になるCOM端子があると動作しませんでした。この場合はLibrary自体を修正して、COMの未使用端子部分のコードを削除する必要があります)
LEDは設定変更で、アノードコモン、カソードコモンどちらでも使用できます。また、表示変化方法も、1秒かけてスムーズに変化するものと、遅れ無しに変化するモードを選択することが出来ます。
COM端子の切り替え周期は1[ms]ですので、8桁表示(8本のCOM端子)の場合は8[ms]で全桁の表示を行います。
スムース表示は、10[ms]毎に表示輝度を変化させています。

このLibraryで使用するmbed機能

  • チッカータイマー(Ticker) 1[us]単位、1[ms]周期

使用可能な端子(LPC1768)
DigitalOut 設定が出来る端子。SEG端子、COM端子に割付の条件はありません。

使用可能な端子(LPC1114FN28)
DigitalOut 設定が出来る端子。
ただし、dp5,27 はopen drainなので、端子に電流を流し込む(アノードコモンのSEG端子、カソードコモンのCOM端子)の設定しかできません。

LPC1114FN28用の表示桁数変更
LPC1114FN28では、未使用のCOM端子があると動作しません。このため、4桁表示専用の定義を用意しました。
LPC1114FN28で4桁表示をする場合は、ヘッダファイルにある”USECOM4”の定義を有効にしてください。
(LPC1114FN28では、4,8桁以外では使えないことになります。これ以外の桁数の場合は、Libraryを改造してCOM端子の数を増減してください)

LPC1768では、上記の制限はありません。設定無しで、1~8桁表示のいずれかを選択できます。

/media/uploads/suupen/0-1_sevensegled_h---.jpg
SevenSegLed.hの設定箇所

Libraryの使い方

/media/uploads/suupen/0-2_library----.jpg
サンプルプログラムより

  • 7セグメントLED出力する端子の指定:SevenSegLed
    *7セグメントLEDへのデータ出力関数:sevenSegLed_main(数字部配列変数ポインタ、ドット部配列変数ポインタ)


表示データ格納用配列バッファは数字部、ドット部それぞれ用意してください。
サンプルプログラムでは、4桁表示なので、

  • 数字部用 uint8_t D_7seg[4]
  • ドット部用 uint8_t D_dot[4]
    としています。

<サンプルプログラムについて>

mbed(LPC1768)を使用しています。
7セグメントLEDは、秋月通商(http://akizukidenshi.com/catalog/g/gI-03673/)のOSL40562-LRを使用しています。
電流制限抵抗は、100[Ω]を8本(SEG端子数分)使用しています。


電源はUSBから供給します。

/media/uploads/suupen/0-3---.jpg
回路図

/media/uploads/suupen/-------p1170487.jpg
ブレットボードでの配線\

プログラムの動作内容

USBから電源を供給すると、カウントアップ表示をします。
左側2桁が16進数表示、右側2桁が10進数表示です。左から2、4桁目のドットが1秒毎に交互に点滅します。

サンプルプログラムの設定は、スムース表示モードですが、端子設定か、設定変更用関数で、スムース表示と、ハード表示を変更できます。

/media/uploads/suupen/0-4------.jpg 表示変更方法

以上

Files at this revision

API Documentation at this revision

Comitter:
suupen
Date:
Fri Dec 27 23:30:28 2013 +0000
Commit message:
This is a sample program, "SevenSegmentLed" library this is.; I re-create the sample program anew.

Changed in this revision

SevenSegLed.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 585eaef391d2 SevenSegLed.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SevenSegLed.lib	Fri Dec 27 23:30:28 2013 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/suupen/code/SevenSegLed/#a1eb5de4146f
diff -r 000000000000 -r 585eaef391d2 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Dec 27 23:30:28 2013 +0000
@@ -0,0 +1,111 @@
+/*************************************************
+ * SevenSegLed Library sample program
+ * 
+ * <schematic>
+ * 1.seven segment numeric LED Display : OSL40562-LR
+ *       http://akizukidenshi.com/download/OSL40562-LR.pdf
+ *
+ *  OSL40562-LR                          Resister        LPC1768
+ *  Pin No     Function                   [ohm]           PinNo
+ *  ---------------------------------------------------------------------------
+ *   1         segment E                   100            p10 
+ *   2         segment D                   100            p11
+ *   3         segment Dp                  100            p12
+ *   4         segment C                   100            p13
+ *   5         segment G                   100            p14
+ *   6         common  4                   -              p15  
+ *   7         segment B                   100            p26
+ *   8         common  3                   -              p27 
+ *   9         common  2                   -              p28
+ *  10         segment F                   100            p29
+ *  11         segment A                   100            p30
+ *  12         common  1                    -             p21
+ * 
+ **************************************************/
+
+#include "mbed.h"
+#include "SevenSegLed.h"
+
+ //                     common type (0:anode common 1:cathode common)
+ //                     | 
+ //                     |  display mode (0:smooth 1:hard)
+ //                     |  |
+ //                     |  |    segA segB segC segD segE segF segG segP com1 com2 com3 com4 (com5,com6,com7,com8 = NC)                          
+ //                     |  |    |    |    |    |    |    |    |    |    |    |    |    | 
+SevenSegLed sevenSegLed(1, 0, p30, p26, p13, p11, p10, p29, p14, p12, p21, p28, p27, p15);   // OSL40562-LR
+
+//================================
+// display buffer
+//================================
+//                   com1
+//                   |  com2
+//                   |  |  com3
+//                   |  |  |  com4
+//                   |  |  |  |
+uint8_t D_7seg[4] = {0, 0, 0, 0};   // 0x0 to 0x9 = "0" to "9" ,0xA to 0xF = "A" to "F", 0x10 = extinction
+uint8_t D_dot[4]  = {0, 1, 0, 0};   // 0:extinction  1: light
+
+
+//==============================
+// Variable counter & work
+//==============================
+uint8_t count = 0;      // free run counter (0x00 to 0xFF overflow to 0x00)
+uint8_t work;
+
+//==============================
+// main 
+//==============================
+int main() {
+ 
+    while(1) {
+ 
+       //==========================
+       // Show hexadecimal
+       //==========================
+        work = count / 0x10;
+        D_7seg[0] = work;
+         
+        work = count % 0x10;
+        D_7seg[1] = work;
+        
+        //========================
+        // Show decimal
+        //========================
+        work = count / 10;
+        work %= 10;
+        D_7seg[2] = work;
+
+        work = count % 10;
+        D_7seg[3] = work;
+
+        //=======================
+        // Show dot
+        //=======================
+        if((count % 2) == 0){
+            D_dot[1] = 1;
+            D_dot[3] = 0;
+        }
+        else{
+            D_dot[1] = 0;
+            D_dot[3] = 1;
+        }
+
+        D_dot[0] = 0;
+        //D_dot[1] = 0;
+        D_dot[2] = 0;
+        //D_dot[3] = 0;
+ 
+        //==============================
+        // set dynamic output data
+        //==============================
+         sevenSegLed.SevenSegLed_main(D_7seg, D_dot);       
+ 
+        //==============================
+        // counter increment & time wait
+        //==============================
+        count++;
+
+        wait(1.0);
+
+    }
+}
diff -r 000000000000 -r 585eaef391d2 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Dec 27 23:30:28 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f
\ No newline at end of file