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桁表示のいずれかを選択できます。
SevenSegLed.hの設定箇所
Libraryの使い方
サンプルプログラムより
- 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から供給します。
回路図
ブレットボードでの配線\
プログラムの動作内容
USBから電源を供給すると、カウントアップ表示をします。
左側2桁が16進数表示、右側2桁が10進数表示です。左から2、4桁目のドットが1秒毎に交互に点滅します。
サンプルプログラムの設定は、スムース表示モードですが、端子設定か、設定変更用関数で、スムース表示と、ハード表示を変更できます。
表示変更方法
以上
main.cpp@0:585eaef391d2, 2013-12-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |