 |
|
 |
“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分频。
|
 |
10樓
巨大八爪鱼
2015-7-18 21:29
|