avr-gcc で工作(その8)
avr-gcc で工作(その8)
回路図はこちら → g:ecrafts:id:Chuck:20040919#p1
7セグメントLEDを点灯させるテストプログラムです。1桁ごとにRCKを送っていますが、3桁固定とわかっているのだから3桁目で送るのでも良さそうです。
表示データは アクティブLOW で出します。0xFE を アンド すると小数点が点灯します。
以下ソースコード
/* 7-segment LED control */ #include#include /* PB5 serial data (SER) PB6 latch clock (RCK) PB7 shift clock (SCK) */ void send7seg (uint8_t dat) { int i; for (i = 0; i < 8; i++, dat >>= 1) { if (dat & 0x01) sbi(PORTB, PB5); else cbi(PORTB, PB5); sbi(PORTB, PB7); cbi(PORTB, PB7); } sbi(PORTB, PB6); cbi(PORTB, PB6); } void ioinit (void) { DDRA = _BV (PA0); DDRB = _BV (PB5) | _BV (PB6) | _BV (PB7); } int main(void) { ioinit(); sbi(PORTA, PA0); send7seg(0x0D & 0xFE); send7seg((0x25)); send7seg(0x9F); for (;;) ; return 0; } /* a b c d e f g p 1 1 1 1 1 1 1 1 -> 0xFF 0 0 0 0 0 0 0 1 1 -> 0x03 1 1 0 0 1 1 1 1 1 -> 0x9F 2 0 0 1 0 0 1 0 1 -> 0x25 3 0 0 0 0 1 1 0 1 -> 0x0D 4 1 0 0 1 1 0 0 1 -> 0x99 5 0 1 0 0 1 0 0 1 -> 0x49 6 0 1 0 0 0 0 0 1 -> 0x41 7 0 0 0 1 1 0 1 1 -> 0x1B 8 0 0 0 0 0 0 0 1 -> 0x01 9 0 0 0 0 1 0 0 1 -> 0x09 . 1 1 1 1 1 1 1 0 -> 0xFE o 1 1 0 0 0 1 0 1 -> 0xC5 A 0 0 0 1 0 0 0 1 -> 0x11 b 1 1 0 0 0 0 0 1 -> 0xC1 c 1 1 1 0 0 1 0 1 -> 0xE5 C 0 1 1 0 0 0 1 1 -> 0x63 d 1 0 0 0 0 1 0 1 -> 0x85 E 0 1 1 0 0 0 0 1 -> 0x61 F 0 1 1 1 0 0 0 1 -> 0x71 G 0 1 0 0 0 0 1 1 -> 0x43 h 1 1 0 1 0 0 0 1 -> 0xD1 H 1 0 0 1 0 0 0 1 -> 0x91 J 1 0 0 0 0 1 1 1 -> 0x87 L 1 1 1 0 0 0 1 1 -> 0xE3 t 1 1 1 0 0 0 0 1 -> 0xE1 */