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

以上

Committer:
suupen
Date:
Fri Dec 27 23:30:28 2013 +0000
Revision:
0:585eaef391d2
This is a sample program, "SevenSegmentLed" library this is.; I re-create the sample program anew.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:585eaef391d2 1 /*************************************************
suupen 0:585eaef391d2 2 * SevenSegLed Library sample program
suupen 0:585eaef391d2 3 *
suupen 0:585eaef391d2 4 * <schematic>
suupen 0:585eaef391d2 5 * 1.seven segment numeric LED Display : OSL40562-LR
suupen 0:585eaef391d2 6 * http://akizukidenshi.com/download/OSL40562-LR.pdf
suupen 0:585eaef391d2 7 *
suupen 0:585eaef391d2 8 * OSL40562-LR Resister LPC1768
suupen 0:585eaef391d2 9 * Pin No Function [ohm] PinNo
suupen 0:585eaef391d2 10 * ---------------------------------------------------------------------------
suupen 0:585eaef391d2 11 * 1 segment E 100 p10
suupen 0:585eaef391d2 12 * 2 segment D 100 p11
suupen 0:585eaef391d2 13 * 3 segment Dp 100 p12
suupen 0:585eaef391d2 14 * 4 segment C 100 p13
suupen 0:585eaef391d2 15 * 5 segment G 100 p14
suupen 0:585eaef391d2 16 * 6 common 4 - p15
suupen 0:585eaef391d2 17 * 7 segment B 100 p26
suupen 0:585eaef391d2 18 * 8 common 3 - p27
suupen 0:585eaef391d2 19 * 9 common 2 - p28
suupen 0:585eaef391d2 20 * 10 segment F 100 p29
suupen 0:585eaef391d2 21 * 11 segment A 100 p30
suupen 0:585eaef391d2 22 * 12 common 1 - p21
suupen 0:585eaef391d2 23 *
suupen 0:585eaef391d2 24 **************************************************/
suupen 0:585eaef391d2 25
suupen 0:585eaef391d2 26 #include "mbed.h"
suupen 0:585eaef391d2 27 #include "SevenSegLed.h"
suupen 0:585eaef391d2 28
suupen 0:585eaef391d2 29 // common type (0:anode common 1:cathode common)
suupen 0:585eaef391d2 30 // |
suupen 0:585eaef391d2 31 // | display mode (0:smooth 1:hard)
suupen 0:585eaef391d2 32 // | |
suupen 0:585eaef391d2 33 // | | segA segB segC segD segE segF segG segP com1 com2 com3 com4 (com5,com6,com7,com8 = NC)
suupen 0:585eaef391d2 34 // | | | | | | | | | | | | | |
suupen 0:585eaef391d2 35 SevenSegLed sevenSegLed(1, 0, p30, p26, p13, p11, p10, p29, p14, p12, p21, p28, p27, p15); // OSL40562-LR
suupen 0:585eaef391d2 36
suupen 0:585eaef391d2 37 //================================
suupen 0:585eaef391d2 38 // display buffer
suupen 0:585eaef391d2 39 //================================
suupen 0:585eaef391d2 40 // com1
suupen 0:585eaef391d2 41 // | com2
suupen 0:585eaef391d2 42 // | | com3
suupen 0:585eaef391d2 43 // | | | com4
suupen 0:585eaef391d2 44 // | | | |
suupen 0:585eaef391d2 45 uint8_t D_7seg[4] = {0, 0, 0, 0}; // 0x0 to 0x9 = "0" to "9" ,0xA to 0xF = "A" to "F", 0x10 = extinction
suupen 0:585eaef391d2 46 uint8_t D_dot[4] = {0, 1, 0, 0}; // 0:extinction 1: light
suupen 0:585eaef391d2 47
suupen 0:585eaef391d2 48
suupen 0:585eaef391d2 49 //==============================
suupen 0:585eaef391d2 50 // Variable counter & work
suupen 0:585eaef391d2 51 //==============================
suupen 0:585eaef391d2 52 uint8_t count = 0; // free run counter (0x00 to 0xFF overflow to 0x00)
suupen 0:585eaef391d2 53 uint8_t work;
suupen 0:585eaef391d2 54
suupen 0:585eaef391d2 55 //==============================
suupen 0:585eaef391d2 56 // main
suupen 0:585eaef391d2 57 //==============================
suupen 0:585eaef391d2 58 int main() {
suupen 0:585eaef391d2 59
suupen 0:585eaef391d2 60 while(1) {
suupen 0:585eaef391d2 61
suupen 0:585eaef391d2 62 //==========================
suupen 0:585eaef391d2 63 // Show hexadecimal
suupen 0:585eaef391d2 64 //==========================
suupen 0:585eaef391d2 65 work = count / 0x10;
suupen 0:585eaef391d2 66 D_7seg[0] = work;
suupen 0:585eaef391d2 67
suupen 0:585eaef391d2 68 work = count % 0x10;
suupen 0:585eaef391d2 69 D_7seg[1] = work;
suupen 0:585eaef391d2 70
suupen 0:585eaef391d2 71 //========================
suupen 0:585eaef391d2 72 // Show decimal
suupen 0:585eaef391d2 73 //========================
suupen 0:585eaef391d2 74 work = count / 10;
suupen 0:585eaef391d2 75 work %= 10;
suupen 0:585eaef391d2 76 D_7seg[2] = work;
suupen 0:585eaef391d2 77
suupen 0:585eaef391d2 78 work = count % 10;
suupen 0:585eaef391d2 79 D_7seg[3] = work;
suupen 0:585eaef391d2 80
suupen 0:585eaef391d2 81 //=======================
suupen 0:585eaef391d2 82 // Show dot
suupen 0:585eaef391d2 83 //=======================
suupen 0:585eaef391d2 84 if((count % 2) == 0){
suupen 0:585eaef391d2 85 D_dot[1] = 1;
suupen 0:585eaef391d2 86 D_dot[3] = 0;
suupen 0:585eaef391d2 87 }
suupen 0:585eaef391d2 88 else{
suupen 0:585eaef391d2 89 D_dot[1] = 0;
suupen 0:585eaef391d2 90 D_dot[3] = 1;
suupen 0:585eaef391d2 91 }
suupen 0:585eaef391d2 92
suupen 0:585eaef391d2 93 D_dot[0] = 0;
suupen 0:585eaef391d2 94 //D_dot[1] = 0;
suupen 0:585eaef391d2 95 D_dot[2] = 0;
suupen 0:585eaef391d2 96 //D_dot[3] = 0;
suupen 0:585eaef391d2 97
suupen 0:585eaef391d2 98 //==============================
suupen 0:585eaef391d2 99 // set dynamic output data
suupen 0:585eaef391d2 100 //==============================
suupen 0:585eaef391d2 101 sevenSegLed.SevenSegLed_main(D_7seg, D_dot);
suupen 0:585eaef391d2 102
suupen 0:585eaef391d2 103 //==============================
suupen 0:585eaef391d2 104 // counter increment & time wait
suupen 0:585eaef391d2 105 //==============================
suupen 0:585eaef391d2 106 count++;
suupen 0:585eaef391d2 107
suupen 0:585eaef391d2 108 wait(1.0);
suupen 0:585eaef391d2 109
suupen 0:585eaef391d2 110 }
suupen 0:585eaef391d2 111 }