電音の工場ブログ

趣味の電子工作を中心としたブログです.音モノの工作が多いです.

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

*/