4桁7セグメントLEDのダイナミック駆動(Seven-Segment Numeric LED Display Dynamic Drive)
4桁7セグメントLED(LTC-4627)のダイナミック出力させてみました。
<回路図>
<解説>
mbedに4桁7セグメントLED(LTC-4627)をデジタル出力端子で接続して、ダイナミック駆動させました。 mbedは1端子あたり40mA、全体で400mAまで電流を流すことができるので、LEDドライバは使用せず直接駆動させました。
<サンプルプログラム>
/**********************************************************
* Attention : The comment on this file is written in Japanese.
*
* main.cpp
* dynamic kudou no sample program
* This is program to control LTC-4627(Seven-Segment Numeric LED Display) with mbed.
*
* LTC4627(4keta 7segment LED) o dynamic kudou suru.
* http://www.excesssolutions.com/mas_assets/acrobat/ES5721.pdf
* common shuturyoku wa 5 hon.
* segment shuturyoku wa 8 hon.
* 1hon no LED niwa 20[mA] nagasu no de teikou ha 165[ohm](165[ohm] = 3.3[V] / 20[mA])o tukau.165[ohm]ni chikai atai no 180[ohm]o tukau.
*
*
* LTC4627 to mbed no setuzoku kankei
* LTC4627 R(180[ohm]) mbed
* PinNo PinKinou (*1) Pin name (*2)
* 1 Common Anode Digit 1 - p20
* 2 Common Anode Digit 2 - p19
* 3 Cathode D R p18
* 4 Common Anode Digit L1,L2,L3 - p17
* 5 Cathode E R p16
* 6 Common Anode Digit 3 - p15
* 7 Cathode D.P R p14
* 8 Common Anode Digit 4 - p13
* 9 No Connection - -
* 10 No Pin - -
* 11 Cathode F R p25
* 12 No Pin - -
* 13 Cathode C, L3 R p24
* 14 Cathode A, L1 R p23
* 15 Cathode G R p22
* 16 Cathode B, L2 R p21
*
* *1 : "R" no tokoro wa LTC4627 to mbed no aidani teikou o chokuretu ni ireru.
* "-" wa teikou ha setuzoku sinai.
* *2 : subete "DigitalOut"
*
**********************************************************/
#include "mbed.h"
void dynamic_output(void);
// mbed pin no teigi
// common shuturyoku no setttei
DigitalOut com_1(p20);
DigitalOut com_2(p19);
DigitalOut com_3(p15);
DigitalOut com_4(p13);
DigitalOut com_L(p17); // colon
// segment shuturyoku no settei
DigitalOut seg_a(p23);
DigitalOut seg_b(p21);
DigitalOut seg_c(p24);
DigitalOut seg_d(p18);
DigitalOut seg_e(p16);
DigitalOut seg_f(p25);
DigitalOut seg_g(p22);
DigitalOut seg_p(p14); // DP
DigitalOut seg_col1(p23);
DigitalOut seg_col2(p21);
DigitalOut seg_col3(p24);
// 7segment no shuturyoku pattern
// seg: a b c d e f g p
// bit: 7 6 5 4 3 2 1 0
// ---------------------
#define D_0 (0xfc) // 0 1 1 1 1 1 1 0 0
#define D_1 (0x60) // 1 0 1 1 0 0 0 0 0
#define D_2 (0xda) // 2 1 1 0 1 1 0 1 0
#define D_3 (0xf2) // 3 1 1 1 1 0 0 1 0
#define D_4 (0x66) // 4 0 1 1 0 0 1 1 0
#define D_5 (0xb6) // 5 1 0 1 1 0 1 1 0
#define D_6 (0xbe) // 6 1 0 1 1 1 1 1 0
#define D_7 (0xe4) // 7 1 1 1 0 0 1 0 0
#define D_8 (0xfe) // 8 1 1 1 1 1 1 1 0
#define D_9 (0xf6) // 9 1 1 1 1 0 1 1 0
DigitalOut myled(LED1); // program dosa kakunin yo LED
unsigned char D_7seg[4]; // 7segment heno shuturyoku data kakunou you hensu
// [0]:1000 no kurai [1]:100 no kurai [2]:10 no kurai [3]:1 no kurai
/**************************************
* main
**************************************/
int main() {
int data = 0; // hyoji data (4keta no 7segment LED nanode 0 kara 9999 made hyoji dekiru)
float count = -1; // 0 kara hyoji saseru tameni -1 o settei suru
while(1) {
// program dosa kakunin yo LED tenmetu
myled = !myled;
wait(1.000000); // while{} o 1kai shori suru jikan o chosei(kokode jikan tubusi) (Seven segment refresh rate 1s) check.1
// hyoji data no kousin
count = count + 1.000000; // while{} o 1kai shori surugoto no kasan su check.2
if(count > 9999){count = 0;} // saidaichi o 9999 ni seigen
data = (int)count;
// shuturyoku data no kousin
D_7seg[0] = data / 1000; // 1000 no kurai no data
D_7seg[1] = (data % 1000) / 100; // 100 no kurai no data
D_7seg[2] = (data % 100) / 10; // 10 no kurai no data
D_7seg[3] = (data % 10); // 1 no kurai no data
// dynamic shuturyoku shori
dynamic_output();
}
}
/**************************************
* dynamic_comAllClear
*
* common pin o subete OFF suru
**************************************/
void dynamic_comAllClear(void){
com_1 = 0;
com_2 = 0;
com_3 = 0;
com_4 = 0;
com_L = 0;
}
/**************************************
* dynamic_segAllClear
*
* segment pin o subete OFF suru
**************************************/
void dynamic_segAllClear(void){
seg_a = 1;
seg_b = 1;
seg_c = 1;
seg_d = 1;
seg_e = 1;
seg_f = 1;
seg_p = 1;
}
/**************************************
* dynamic_segDataSet
*
* segment pin ni shuturyoku data o settei
**************************************/
void dynamic_segDataSet(unsigned char data){
const unsigned char Z_segData[10] = {D_0, D_1, D_2, D_3, D_4, D_5, D_6, D_7, D_8, D_9,};
unsigned char work;
work = Z_segData[data];
seg_a = (work & 0x80) ? 0 : 1;
seg_b = (work & 0x40) ? 0 : 1;
seg_c = (work & 0x20) ? 0 : 1;
seg_d = (work & 0x10) ? 0 : 1;
seg_e = (work & 0x08) ? 0 : 1;
seg_f = (work & 0x04) ? 0 : 1;
seg_g = (work & 0x02) ? 0 : 1;
seg_p = (work & 0x01) ? 0 : 1;
}
/**************************************
* dynamic_output
*
* dynamic dosa saseru.
* kono kansu wo jiikou suru tabi ni common pin o kirikaeru
**************************************/
void dynamic_output(void){
static unsigned char M_seg = 0;
switch(M_seg){
case 0: // shoto
dynamic_comAllClear();
dynamic_segAllClear();
M_seg = 1;
break;
case 1: // common1 shuturyoku
dynamic_comAllClear();
dynamic_segDataSet(D_7seg[0]);
com_1 = 1;
M_seg = 2;
break;
case 2: // common2 shuturyoku
dynamic_comAllClear();
dynamic_segDataSet(D_7seg[1]);
com_2 = 1;
M_seg = 3;
break;
case 3: // common3 shuturyoku
dynamic_comAllClear();
dynamic_segDataSet(D_7seg[2]);
com_3 = 1;
M_seg = 4;
break;
case 4: // common4 shuturyoku
dynamic_comAllClear();
dynamic_segDataSet(D_7seg[3]);
com_4 = 1;
M_seg = 1;
break;
default: // M_seg no atai ga ijo no tokino shori
dynamic_comAllClear();
dynamic_segAllClear();
M_seg = 1;
break;
}
}
LTC-4627のデータシート http://www.excesssolutions.com/mas_assets/acrobat/ES5721.pdf
Please log in to post comments.
