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 表示変更方法

以上

Revision:
0:585eaef391d2
--- /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);
+
+    }
+}