その4です。
回路の一部を「ikkeiplexing」に改造しました。
元の回路では、桁がOFFの時、ベースが浮いていますので、薄っすら光るセグメントがありました。
ベースをグラウンドに落とす抵抗を省略したのですが、レイアウトの関係で追加するのも面倒なので、「ikkeiplexing」方式に変更しました。
きたないですが、スケッチを掲載しておきます。
1mSごとにカウントアップするようにしたので、999.999秒までのストップできないウォッチです。
ストップウォッチで測定してみましたが結構正確でした。
<>は半角にしてください。
回路の一部を「ikkeiplexing」に改造しました。
元の回路では、桁がOFFの時、ベースが浮いていますので、薄っすら光るセグメントがありました。
ベースをグラウンドに落とす抵抗を省略したのですが、レイアウトの関係で追加するのも面倒なので、「ikkeiplexing」方式に変更しました。
きたないですが、スケッチを掲載しておきます。
1mSごとにカウントアップするようにしたので、999.999秒までのストップできないウォッチです。
ストップウォッチで測定してみましたが結構正確でした。
<>は半角にしてください。
#include <MsTimer2.h> /* Ikkeiplexing 7seg Led 6Digit Demo 2010-02-14 JJ1WKN Keta 6 5 4 3 2 1 Vcc-[C1]-[C2]-[C3]-[C4]-[C5]-[C6] D10 A A A A A A D10-R180-A6-A5-A4-A3-A2-A1 D9 B B B B B B D9-R180-B6-B5-B4-B3-B2-B1 D8 C C C C C C D8-R180-C6-C5-C4-C3-C2-C1 D7 D D D D D K1 D7-[B1]-R180-[E1]-Acom1-D6-D5-D4-D3-D2 D6 E E E E K2 E D6-[B2]-R180-[E2]-Acom2-E6-E5-E4-E3-E1 D5 F F F K3 F F D5-[B3]-R180-[E3]-Acom3-F6-F5-F4-F2-F1 D4 G G K4 G G G D4-[B4]-R180-[E4]-Acom4-G6-G5-G3-G2-G1 D3 P K5 P P P P D3-[B5]-R180-[E5]-Acom5-P6-P4-P3-P2-P1 D2 K6 P G F E D D2-[B6]-R180-[E6]-Acom1-P5-G4-F3-E2-D1 */ // 7seg Led Font unsigned char font[10] = { //ABCDEFGP 0:on 1:off 0b00000011, // 0 0b10011111, // 1 0b00100101, // 2 0b00001101, // 3 0b10011001, // 4 0b01001001, // 5 0b01000001, // 6 0b00011111, // 7 0b00000001, // 8 0b00011001 // 9 }; byte Keta,KetaMask; unsigned char buff[6]; long NumCount; void setup() { AllInput(); Keta = 0; KetaMask = B00010000; NumCount = 0; MsTimer2::set(1,Display); // 1mS MsTimer2::start(); } void loop() { } void AllInput() { byte i; for(i = 2;i <11;i++)
0;i--) { s = tmp / div; buff[i-1] = font[s]; tmp = tmp % div; div = div / 10; } } void Display() { byte i,v,mask,FontBuff; SetFont(); AllInput(); FontBuff = buff[Keta]; v = FontBuff & KetaMask; if(v == 0) { pinMode(2,OUTPUT); digitalWrite(2,LOW); } FontBuff = FontBuff | KetaMask; mask = B00000001; for(i = 3;i <11;i++)
} pinMode(7 - Keta,OUTPUT); digitalWrite(7 - Keta,HIGH); Keta++; KetaMask = KetaMask >> 1; if(Keta > 5) { Keta = 0; KetaMask = B00010000; } NumCount++; if(NumCount == 1000000) NumCount = 0; }