|
[案例]ATtiny13驅動74HC595 |
一派掌門 二十級 |
|
一派掌門 二十級 |
「main.c」 #include <avr/io.h> #define F_CPU 1200000U #include <util/delay.h> #include "74HC595.h"
unsigned char display = 0x00;
int main(void) { DDRB = PORTB = 0xff; while (1) { HC595_SerIn(~display); HC595_ParOut(); if (display % 2 == 0) PORTB |= _BV(4); else PORTB &= ~_BV(4); _delay_ms(500); display++; } return 0; }
|
|
一派掌門 二十級 |
「74HC595.c」 #include <avr/io.h> #include "74HC595.h"
void HC595_ParOut(void) { HC595_STCK0; HC595_STCK1; }
void HC595_SerIn(unsigned char data) { unsigned char i; for (i = 0; i < 8; i++) { HC595_SHCK0; // CLOCK_MAX = 100MHz if (data & _BV(7 - i)) HC595_SD1; else HC595_SD0; HC595_SHCK1; } }
|
|
一派掌門 二十級 |
「74HC595.h」 #define HC595_SHCK1 PORTB|=_BV(2) // PIN11 #define HC595_SHCK0 PORTB&=~_BV(2) #define HC595_STCK1 PORTB|=_BV(1) // PIN12 #define HC595_STCK0 PORTB&=~_BV(1) #define HC595_SD1 PORTB|=_BV(0) // PIN14 #define HC595_SD0 PORTB&=~_BV(0)
void HC595_ParOut(void); void HC595_SerIn(unsigned char data);
|
|
一派掌門 二十級 |
「Makefile」 # make main.hex: main.c 74HC595.c avr-gcc -mmcu=attiny13 -Wall -Os main.c 74HC595.c -o main.o avr-objcopy -j .text -j .data -O ihex main.o main.hex
# make run run: main.hex sudo avrdude -p t13 -c usbasp -e -U flash:w:main.hex
|
|
一派掌門 二十級 |
執行make run編譯並燒寫程序。
|
|
一派掌門 二十級 |
#define HC595_SHCK1 PORTB|=_BV(2) // PIN11 #define HC595_SHCK0 PORTB&=~_BV(2) #define HC595_STCK1 PORTB|=_BV(1) // PIN12 #define HC595_STCK0 PORTB&=~_BV(1) #define HC595_SD1 PORTB|=_BV(0) // PIN14 #define HC595_SD0 PORTB&=~_BV(0)
代碼說明: 74HC595的第11腳連接ATtiny的PB2口 第12腳連接ATtiny的PB1口 第14腳連接ATtiny的PB0口
|
|
一派掌門 二十級 |
右下角黃LED的正極連接到單片機的PB4口上。
|
|
一派掌門 二十級 |
單片機熔絲位的設定:E:FF, H:FF, L:2A 晶振採用默認的內部9.6MHz晶振,開啟8分頻。
|
|
一派掌門 二十級 |
|
|